Perl有多么幸运?

时间:2011-08-18 03:45:19

标签: perl

[root@ ~]$ perl -e "print 1 if blessed $a;"
1
[root@ ~]$ perl -e "print 1 if blessed $c;"
1
[root@ ~]$ perl -e "print 1 if blessed $cee;"
1

似乎总是true,版本为5.8.8

更新

我没有以root的身份运行,我为了隐私而改变了它:)

3 个答案:

答案 0 :(得分:10)

blessed不是Perl中的关键字。您在shell命令中使用双引号,因此变量($a$c等)来自shell的环境,它们不是Perl变量。 由于这些环境变量可能是空的,因此您实际上是在执行脚本

print 1 if blessed ;

如果像这样使用,blessed只是一个 bareword 字符串,并且总是计算为true。你所做的与运行

没什么区别
$ perl -e 'print 1 if foo'

答案 1 :(得分:8)

您的意思是来自blessedScalar::Util吗?您可能希望首先加载该函数:

perl -MScalar::Util=blessed -e "print 1 if blessed $a;"

否则你的blessed只是赤字(字符串),这显然是正确的。

答案 2 :(得分:1)

正如已经指出的那样,您需要在使用该方法之前加载模块。另外,如果您使用perl -we代替perl -e,则可能不会问这个问题。

对我来说,perl -we,我收到了这个警告:

Can't call method "blessed" without a package or object reference at -e line 1.