我有这个脚本因为某些原因总是返回-1
。
#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 4;
is(scrub(''), '-1');
is(scrub('~'), '-1');
is(scrub('undef'), '-1');
is(scrub('a'), 'a');
sub scrub {
my $a = shift;
if ($a =~ m/~|undef|/) {
return -1;
}
return $a;
}
我想要的是,当-1
或perl的~
或空字符串``作为参数时,它只返回undef
。
有人能看出什么问题吗?
更新:根据回复,这种接缝是正确的方式。
sub scrub {
my $a = shift;
return ($a =~ m/^(~|undef|^$)$/) ? -1 : $a;
}
答案 0 :(得分:4)
正则表达式不是此作业的正确工具。您使用eq运算符来测试字符串相等性,您使用defined()运算符来测试undef。
if ($a eq '' or $a eq '~' or not defined $a) {
return -1;
}
顺便说一下,$ a的第4个值会在这里返回-1,即当$ a 已经 -1时。