在Perl中,如何检查未定义或空白参数?
我有如下代码:在Perl中,如何检查未定义或空白参数?,perl,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 = &
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.
}
perl "myperlroutine.pl" "" "Mickey Mouse" "Entry"
命令窗口(我在Windows上运行此命令)短暂出现,然后立即消失
我是否遗漏了一些明显的内容?您使用的是低优先级
而不是应该使用高优先级的代码>
你是说:
if ( not( defined $id || $id eq "" ) )
这就像:
if ( ! defined $id && $id ne '' )
这总是错误的
我也是
相反
对于Perl 5.12及更高版本,length()在传递undef时不再发出警告,这非常方便。因此,您可以简单地执行以下操作:
if ( ! length $id ) {
这是一个短代码,但是如果$id
可能是一个长UTF-8字符串,那么确定长度很困难,那么它可能会效率低下。在那里,我更倾向于做:
if ( ( $id // '' ) eq '' ) {
但是,除非你熟悉这个习惯用法,否则它的可读性不是很好。这几乎涵盖了你要找的任何东西:
if ( not length( $id )) {
...
}
又名:
如果您的窗口立即消失,这通常表示编译错误。您应该打开命令窗口并从命令行运行脚本:
- 单击“开始”
- 在搜索栏中键入“cmd”,然后按Enter键
然后从命令行运行脚本,如下所示:
perl full_path_to_script\script_name.pl
如果执行此操作,命令窗口不应立即关闭。相反,它应该提供一些反馈,说明脚本无法运行的原因。如果这样做之后仍然无法找出失败的原因,那么也应该发布编译错误,我们可以查看一下
也。你应该用“!”而不是“不”
例如:
if ((!defined $id) || ($id eq '')) {
print "Enter ID number: ";
chomp ($id = <STDIN>);
exit 0 if ($id eq ""); # If empty string, exit.
}
if((!defined$id)| |($id eq')){
打印“输入ID号:”;
chomp($id=);
如果($id eq“”)则退出0;#如果字符串为空,则退出。
}
您已经收到了很好的答案,准确地解释了代码的错误。但没有人对大局发表评论
当参数变为可选时,使用这样的位置参数(如您所见)是有问题的。在这种情况下,最好使用命名参数。标准的Perl库带有两个模块(和),这使得创建灵活的命令行选项集变得容易。我建议您考虑使用其中之一。仍然定义了一个空白。只是一片空白。在您的逻辑中解决此问题,但请参阅以获取替代解决方案。感谢所有人提供有用的答案。奖品将颁发给@ysth。Dave Cross-如果我只能更改它,但是它已经被从许多地方调用了,我只有时间来做一个快速修复:(注意:在Perl 5.12之前发出警告,对错误进行解释会更好。始终从Getopt::Long开始;没有理由在新代码中使用::Std
unless ( length $id ) {
...
}
perl full_path_to_script\script_name.pl
if ((!defined $id) || ($id eq '')) {
print "Enter ID number: ";
chomp ($id = <STDIN>);
exit 0 if ($id eq ""); # If empty string, exit.
}