1

Getopt::Long を使用して、perl スクリプトのコマンド ライン オプションを取得します。オプションの引数を渡して、値が指定された場合に何かを実行したり、オプションが呼び出されたが値が渡されなかった場合に何かを実行したりしたいと考えています。

スクリプトは次のように呼び出されます。

/root/perlscripts/pingm.pl --installdaemon

引数が指定されていない場合:

--installdaemon=7.7.7.7

オプションの引数を指定します。

次に、これを行います:

Getopt::Long::Configure(qw(bundling no_getopt_compat));
GetOptions ('installdaemon:s' => \$daeminstall) or die ("Error in command line arguments\n");

次のステップは、私が疑わしいところです。

私が行った場合:

if ($daeminstall) {
        print "I was called!\n";
        $installdaemon=1;
    }

その場合、スクリプトが で呼び出された場合、その IF ブロックは決して呼び出されません。なぜなら、perldoc によると、値が指定されていない場合/root/perlscripts/pingm.pl --installdaemon、オプションの引数は文字列を受け取るからです。''

では、値を渡さずにオプションが指定されたかどうかを確認するにはどうすればよいでしょうか?

4

2 に答える 2

2

defined組み込み関数を使用します。

use warnings;
use strict;
use Getopt::Long;

my $daeminstall;
GetOptions(
    'installdaemon:s' => \$daeminstall,
) or die;

if (length $daeminstall) {
    print "installdaemon was used, and has a value: $daeminstall\n";
}
elsif (defined $daeminstall) {
    print "installdaemon was used, but has no value\n";
}
else {
    print "installdaemon was not used\n";
}
于 2013-08-19T17:39:38.163 に答える