Ich versuche die GetOptions
Funktion von GetOpt::Long
zu verwenden, um eine Subroutine aufzurufen, die ein Argument akzeptiert. Die Subroutine wird jedoch aufgerufen, unabhängig davon, ob die Option in der Befehlszeile angegeben ist. Dieses unerwartete Verhalten tritt nicht auf, wenn ein Argument in der Zeile GetOptions
nicht an das Unterprogramm übergeben wird.perl GetOptions, optiongetriggerte Subroutine, die Argumente akzeptiert
Was folgt, ist eine minimale Demonstration des Problems:
Wenn ein Argument an das Unterprogramm in der GetOptions
Leitung vorgesehen ist, das Unterprogramm aufgerufen wird, endet unabhängig davon, ob seine Steuerung Option auf der Befehlszeile angegeben wird:
$ cat a1.pl
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long qw(GetOptions);
my $var="entered";
GetOptions ("opt" => \&sub1($var));
sub sub1 { print "sub1 $_[0]\n"; }
$ perl a1.pl --opt
sub1 entered
$ perl a1.pl
sub1 entered
im Gegensatz dazu, wenn das Unterprogramm in GetOptions
ohne Argument aufgerufen wird, verhält es sich entsprechend:
$ cat a2.pl
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long qw(GetOptions);
GetOptions ("opt" => \&sub2);
sub sub2 { print "sub2 entered\n"; }
$ perl a2.pl --opt
sub2 entered
$ perl a2.pl
Was mache ich falsch?
PS: Ich weiß, dass ich einfach eine Variable festlegen kann, die steuert, ob das Unterprogramm nach dem GetOptions
-Block aufgerufen wird, aber ich möchte die richtige Syntax für den Aufruf der Unterroutine innerhalb der GetOptions
Zeile, sowie verstehen, warum das beobachtete Verhalten passiert.
Wow, die zweite Frage, die ich heute gesehen habe, dass tatsächlich enthält eine [MCVE]. Ich sehe zwei solche Fragen an einem Tag. Herzliche Glückwünsche! –