Search code examples
perlvariablestk-toolkitsubroutine

Passing variable from subroutine in tk perl interface


I am using the perl Tk interface where I want to have a button test_1 and upon clicking on this button I would like a variable $varchoice to be defined as test_1. If I press on the button test_2, the variable $varchoice should be defined as test_2.

Before is the snippet of code in which I attempted to accomplish this:

$budget_frame->Button(-text => 'test_1',-command => sub{$varchoice=budget_plot_1()})->pack(-side => "left");
$budget_frame->Button(-text => 'test_2',-command => sub{$varchoice=budget_plot_2()})->pack(-side => "left");

sub budget_plot_1()
{
    print "plotting 1\n";
    my $var=1;
    return $var;
}

sub budget_plot_2()
{
    print "plotting 2\n";
    my $var=2;
    return $var;
}

How do I tweak this code to get the desired results?


Solution

  • Your program seems to work fine. Here is an example of how I tested it:

    use feature qw(say);
    use strict;
    use warnings;
    use Tk;
    
    my $budget_frame = MainWindow->new(-title=>"Button test");
    my $varchoice;
    
    $budget_frame->Button(
        -text => 'test_1',
        -command => sub{ $varchoice = budget_plot_1() }
    )->pack(-side => "left");
    $budget_frame->Button(
        -text => 'test_2',
        -command => sub{ $varchoice = budget_plot_2() }
    )->pack(-side => "left");
    MainLoop;
    say "Value of \$varchoice = $varchoice";
    
    sub budget_plot_1()
    {
        print "plotting 1\n";
        return "test_1";
    }
    
    sub budget_plot_2()
    {
        print "plotting 2\n";
        return "test_2";
    }
    

    Output:

    Value of $varchoice = test_1