可能是一个简单的Perl问题:
我有一些代码如下:
if (not defined $id) {
print "Enter ID number: ";
chomp ($id = <STDIN>);
exit 0 if ($id eq ""); # If empty string, exit.
}
if (not defined $name) {
print "Enter name: ";
chomp ($name = <STDIN>);
exit 0 if ($name eq ""); # If empty string, exit.
}
if (not defined $class) {
print "Enter class: ";
chomp ($class = <STDIN>);
exit 0 if ($class eq ""); # If empty string, exit.
}
我希望能够只传递其中的一些(例如名称和类,但不能传递ID),为未曝光的传递空白,所以我认为以下内容可行:
if (not defined $id || $id eq "") {
print "Enter ID number: ";
chomp ($id = <STDIN>);
exit 0 if ($id eq ""); # If empty string, exit.
}
但是,如果我通过例如,它似乎不起作用以下内容:
perl "myperlroutine.pl" "" "Mickey Mouse" "Entry"
命令窗口(我在Windows上运行此命令)会短暂出现,然后立即消失。
我错过了一些明显的东西吗?
答案 0 :(得分:5)
您使用的是低优先级not
,您应该使用高优先级!
。
所以你说:
if ( not( defined $id || $id eq "" ) )
就像:
if ( ! defined $id && $id ne '' )
总是假的。
答案 1 :(得分:2)
if ( not length( $id )) {
...
}
几乎涵盖了您正在寻找的任何内容。
AKA:
unless ( length $id ) {
...
}
答案 2 :(得分:1)
您已经收到了很好的答案,解释了您的代码究竟出了什么问题。但没有人评论过更大的图景。
当参数变为可选时,使用这样的位置参数(如您所见)会出现问题。在这种情况下,使用命名参数是一个好主意。标准的Perl库带有两个模块(Getopt::Std和Getopt::Long),可以轻松创建灵活的命令行选项集。我建议您考虑使用其中一种。
答案 3 :(得分:0)
如果您的窗口立即消失,通常表示编译错误。您应该打开命令窗口并从命令行运行脚本:
点击“开始” 在搜索栏中输入“cmd”并按Enter键。
然后从命令行运行脚本,如下所示: “perl full_path_to_script \ script_name.pl”
如果这样做,命令窗口不应该立即关闭,而是应该对脚本无法运行的原因提供一些反馈。如果你仍然无法弄清楚它为什么会失败,你应该发布你的编译错误,我们可以看看它们。
另外,ysth是正确的,你应该使用“!”而不是“不”。
例如:
if ((!defined $id) || ($id eq '')) {
print "Enter ID number: ";
chomp ($id = <STDIN>);
exit 0 if ($id eq ""); # If empty string, exit.
}