2009-05-22 133 views
-2

我已经搜索了互联网和Perl文档,似乎无法找到答案。-G在Perl中做什么?

帮助将不胜感激。

编辑::他问我关于-G,写在一张纸上,当我看起来很难过,要求我去阅读基础知识。

+0

我无法找到任何-G要么信息。你能向我们展示一个例子吗? – JesperE 2009-05-22 08:21:29

+2

有人的电线在这里越过。 – Schwern 2009-05-24 00:51:54

+0

他问你的确切问题是什么? – 2009-05-26 15:10:21

回答

2

perl中没有开关-G。

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

编辑:好的,没有什么与-G或者 - 只有-g。

-g文件设置了setgid位。

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

否则,它是废话,问题是misphrased。

+0

他意味着在代码中,而不是一个开关:`打印“你好”如果-G;` – 2009-05-22 08:20:02

7

我同意JesperE,请给我们展示一些代码。然而,据我所知,这是发生了什么事:

if(-G) { 

Perl中看到这一点,不承认-G,因此将其视为一个字符串。它变为:

if('-G') { 

即相当于:那么据我可以告诉

if(1) { 

if(-G)什么都不做。我尝试过使用它,它似乎总是返回true,这支持了我的假设。进一步支持是从下面的代码(在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'转换。

+0

如果是这样的话,应该把提问者放在脑袋上。这不是“基础知识”。这是一个诡计的问题,甚至没有揭示任何有用的功能。即使他指的是-g filetest操作符,我也不会认为这是“基本”。 – 2009-05-22 13:03:18

2

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

-g File has setgid bit set. 
1

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

-G或在这里shell内建命令:

-G文件,如果 真实文件存在并且其组匹配此过程的有效组ID 。

0

一个答案是:“在任何实际情况下,我认为任何人都不应该(或者将永远不需要)使用”bareword“来实现'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] 
);