[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
的身份运行,我为了隐私而改变了它:)
答案 0 :(得分:10)
blessed
不是Perl中的关键字。您在shell命令中使用双引号,因此变量($a
,$c
等)来自shell的环境,它们不是Perl变量。
由于这些环境变量可能是空的,因此您实际上是在执行脚本
print 1 if blessed ;
如果像这样使用,blessed
只是一个 bareword 字符串,并且总是计算为true。你所做的与运行
$ perl -e 'print 1 if foo'
答案 1 :(得分:8)
您的意思是来自blessed
的Scalar::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.