我正在运行这样的字符串相等检查:
if($myString eq "ExampleString")
无论字符串文字是什么,是否有一个值myString
会导致执行进入结构?if
我正在运行这样的字符串相等检查:
if($myString eq "ExampleString")
无论字符串文字是什么,是否有一个值myString
会导致执行进入结构?if
是的,使用对象和重载运算符:
package AlwaysTrue {
use overload 'eq' => sub { 1 },
'""' => sub { ${+shift} };
sub new {
my ($class, $val) = @_;
bless \$val => $class;
}
}
my $foo = AlwaysTrue->new("foo");
say "foo is =$foo=";
say "foo eq bar" if $foo eq "bar";
输出:
foo is =foo=
foo eq bar
但是,"$foo" eq "bar"
是错误的,因为这会比较基础字符串。
如果您的意思是“除 undef 之外的任何字符串”,则只需检查
if (defined $myString)
如果您的意思是“除 undef 或空字符串以外的任何字符串”,则只需检查
if ($myString) # Has a slight bug - will NOT enter if the number 0 passed
#or
if ($myString || $myString == 0) # Avoids the above bug
如果您的意思是 ANY ANY 字符串,则不需要 if.... 但如果您仍然想要一个:
if (1)
如果您的意思是“任何看起来不像数字的字符串”(例如区分“11”和“11a”):
use Scalar::Util qw(looks_like_number);
if (Scalar::Util::looks_like_number($myString))