Perl中的字符串是否等于eq下的所有其他字符串?

zzt*_*ops -1 string perl equality truthiness

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

if($myString eq "ExampleString")
Run Code Online (Sandbox Code Playgroud)

是否存在myString可能导致执行进入if结构的值,无论字符串文字是什么?

amo*_*mon 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";
Run Code Online (Sandbox Code Playgroud)

输出:

foo is =foo=
foo eq bar
Run Code Online (Sandbox Code Playgroud)

但是,这"$foo" eq "bar"是错误的,因为这会比较基础字符串.

  • @DVK是的​​,我自己只是盯着这篇文章,想着"我做了什么?".值得注意的是,这种重载违反了`eq`运算符的隐含契约,例如它应该是传递的:如果`$ a eq $ b`和`$ b eq $ c`则是$ $ eq $ c`,其中不适用于`$ b-> isa("AlwaysTrue")`. (3认同)