-G在Perl中做什么?

qwr*_*rty -2 perl

我搜索了互联网和Perl文档,似乎无法找到答案.

帮助将不胜感激.

编辑::他问了我关于-G的事情,把它写在一张纸上,当我看起来很难过时,请让我读一读基础知识.

Chr*_*utz 7

我同意JesperE,请告诉我们一些代码.但是,就我所知,这就是发生的事情:

if(-G) {
Run Code Online (Sandbox Code Playgroud)

Perl看到了这个,无法识别-G,因此将其视为字符串.它成为了:

if('-G') {
Run Code Online (Sandbox Code Playgroud)

这相当于:

if(1) {
Run Code Online (Sandbox Code Playgroud)

据我所知,if(-G)什么都不做.我尝试过使用它,似乎总是回归真实,这支持了我的假设.进一步的支持来自以下代码(在OS X上使用Perl 5.10.0测试):

use strict;
use warnings;

my $var = -G;
print "$var\n";
Run Code Online (Sandbox Code Playgroud)

不显示警告,编译和运行,只打印"-G".

编辑:我应该做更早的搜索,从Perldoc的perlop页面提供以下内容:

如果操作数是数字,则一元" - "执行算术否定.如果操作数是标识符,则返回由与标识符连接的减号组成的字符串.否则,如果字符串以加号或减号开头,则返回以相反符号开头的字符串.这些规则的一个作用是-bareword等同于字符串"-bareword".但是,如果字符串以非字母字符开头(不包括"+"或" - "),Perl将尝试将字符串转换为数字,并执行算术否定.如果字符串不能干净地转换为数字,Perl将给出警告参数"字符串"不是数字否定( - )at ....

正如评论中所述,B::Deparse似乎表明Perl转换if(-G)if(-'G').但是,文档(及其行为print())与文档一致,即文档应转换if(-G)if('-G').这不会改变程序的结果.

然而,99%的人只会在数字上使用的一元运算符的行为的细微类型差异并不是我所谓的"基本".我不认为任何人应该(或将永远需要)使用-bareword'bareword'任何实际情况转换.