" eq "=" in the context of <=><=><=>?-6ren"> " eq "=" in the context of <=><=><=>?-我只是在读 secret 的伪常数,即太空舰队常数 Space fleet 0 这似乎是因为外正在做我不明白的事情。我的问题是为什么 my $foo = ; 套装-6ren">
gpt4 book ai didi

Perl 词法分析器 : why does "<=>" eq "=" in the context of <=><=><=>?

转载 作者:行者123 更新时间:2023-12-04 00:34:13 27 4
gpt4 key购买 nike

我只是在读 secret 的伪常数,即太空舰队常数

<=><=><=>   Space fleet                 0

这似乎是因为外 <=>正在做我不明白的事情。我的问题是为什么
my $foo = <=>;

套装 $foo= ?其他非字母数字似乎也有效,
my $foo = <=>;
my $foo = <->;
my $foo = </>;

但是,字母数字不...
my $foo = <a>;

此外, the perlsecret pod is confusing to me ,

Even though it looks like a sequence of three spaceship operators, only the middle ship is an actual spaceship. The two outer "spaceships" are actually calls to glob("=").



似乎也不是这样,因为我不明白为什么, glob("=")会返回 = ,但是 glob("a")会返回 undef -- 即使有一个名为 a 的文件在当前工作目录中。

Perl 在这两种情况下都在做什么?如果 <> 里面的东西我认为它会回退到文字不是字母数字——是否支持这种行为?

最佳答案

在需要表达式的地方,Perl 选择以下适用的第一个:

  • <> <ARGV>的缩写
  • <<>><> 的“安全”版本(使用 3-arg open 而不是 2-arg open)
  • <<否则是 here-doc operator 的开始.
  • <IDENTIFIER> readline(IDENTIFIER) 的缩写
  • <...>否则是 glob(qq<...>) 的缩写

  • 如果需要中缀或后缀运算符,Perl 会选择以下适用的第一个:
  • <=>numerical comparison operator .
  • <=否则为数值小于或等于运算符。
  • <<是移位运算符。
  • <否则为数字小于运算符。

  • (最后三个在这里可能不相关。我添加了它们以涵盖以 < 开头的所有内容。)

    所以,

  • <=><=><=>

    是简称
    glob(qq<=>) <=> glob(qq<=>)

    哪个可以写
    glob("=") <=> glob("=")


    "=" <=> "="

    因为没有特殊 glob 字符的 glob 模式只是返回模式。

    它两次警告“不是数字”并计算为零。

  • my $foo = <=>;

    是简称
    my $foo = glob(qq<=>);

    哪个可以写
    my $foo = glob("=");


    my $foo = "=";

  • my $foo = <a>;

    是简称
    my $foo = readline(a);

    如果没有其他提及 *a,它会警告“仅使用一次:可能的错字”。 .

    如果您以前没有打开过 a,它会警告“在未打开的文件句柄上”作为文件句柄。
  • 关于Perl 词法分析器 : why does "<=>" eq "=" in the context of <=><=><=>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51203023/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com