-G在Perl中做什么?

时间:2009-05-22 08:11:21

标签: perl

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

帮助将不胜感激。

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

5 个答案:

答案 0 :(得分:7)

我同意JesperE,请向我们展示一些代码。但是,据我所知,这就是发生的事情:

if(-G) {

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

if('-G') {

相当于:

if(1) {

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

use strict;
use warnings;

my $var = -G;
print "$var\n";

不显示警告,编译和运行,只打印“-G”。

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

  

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

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

然而,99%的人只会在数字上使用的一元操作员行为的细微输入差异并不是我所谓的“基本”。在任何实际情况下,我认为任何人都不应该(或根本不需要)使用-bareword'bareword'转化。

答案 1 :(得分:2)

perl中没有开关-G。

perl -G 无法识别的开关:-G(-h将显示有效选项)。

编辑:好的,-G也没有 - 只有-g。

-g文件已设置setgid位。

http://perldoc.perl.org/perlfunc.html

否则,这是胡说八道而且问题是错误的。

答案 2 :(得分:2)

我不知道-G但是-g被描述为here

-g  File has setgid bit set.

答案 3 :(得分:1)

这显然是[(测试)选项和Perl -X文件测试之间的混淆。 -G是前者(在我的BSD系统上),但不是后者。 -G是非posix扩展,我猜Perl不包括所有扩展,只是一些。所以它或者,他的意思是说-g或者他的意思是[-G $ file]; (对于POSIX [的一些超集。它也在我的默认shell(pdksh)和bash(Linux默认shell,大部分)

-G in test或作为shell内置:

-G文件          如果文件存在且其组与有效组ID匹配,则为True          这个过程。

答案 4 :(得分:0)

一个答案是:“我认为任何人都不应该(或者根本不需要)在任何实际情况下使用-bareword to -'bareword'转换。”

这广泛用于一种命名参数样式。请参阅古老的CGI获取一个:

$cookie1 = $q->cookie(-name=>'riddle_name', -value=>"The Sphynx's Question");
$cookie2 = $q->cookie(-name=>'answers', -value=>\%answers);
print $q->header(
    -type    => 'image/gif',
    -expires => '+3d',
    -cookie  => [$cookie1,$cookie2]
);