如果定义了变量,如何将变量作为第一个参数传递给子程序?

1 perl

有没有人有更好(更短)的方式在Perl中编写以下逻辑?似乎abit很麻烦,因为它现在......而且我不想将任何过多的变量传递给任何一个子程序......

#!perl
use Data::Dumper;

my $var = "ok";
my $bar = 1;
my ($a, $b, $c) = (1,2,3);

if ($var eq "ok") {
    if (defined $bar) {
        foo1($bar, $a);
    }
    else {
        foo1($a);
    }
}
elsif ($var eq "not_ok") {
    if (defined $bar) {
        foo2($bar, $a, $b);
    }
    else {
        foo2($a, $b);
    }
}
else {
    if (defined $bar) {
        foo3($bar, $a, $b, $c);
    }
    else {
        foo3($a, $b, $c);
    }
}

sub foo1 {print Dumper @_}
sub foo2 {print Dumper @_}
sub foo3 {print Dumper @_}
Run Code Online (Sandbox Code Playgroud)

yst*_*sth 7

use 5.010;
foo( $bar // (), $a, $b, $c );
Run Code Online (Sandbox Code Playgroud)