-1

我正在运行这样的字符串相等检查:

if($myString eq "ExampleString")

无论字符串文字是什么,是否有一个值myString会导致执行进入结构?if

4

2 回答 2

7

是的,使用对象和重载运算符:

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"是错误的,因为这会比较基础字符串。

于 2013-07-10T13:29:10.210 回答
2

如果您的意思是“除 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))
于 2013-07-10T13:25:36.107 回答