2011-08-18 29 views
-3
[[email protected] ~]$ perl -e "print 1 if blessed $a;" 
1 
[[email protected] ~]$ perl -e "print 1 if blessed $c;" 
1 
[[email protected] ~]$ perl -e "print 1 if blessed $cee;" 
1 

好像總是true,版本是5.8.8在Perl中有什麼好點的?

UPDATE

我沒有運行爲root,它是由我改變了隱私的緣故:)

+12

當你不知道它做什麼* root *時,運行代碼可能不是最好的想法! – Johnsyweb

+1

你希望*看到什麼? –

+0

[Perl的「祝福」究竟做了什麼?](http://stackoverflow.com/questions/392135/what-exactly-does-perls-bless-do) –

回答

8

你的意思是從Scalar::Utilblessed?你可能想先加載功能:

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

否則你blessed只是裸字(串),這顯然是正確的。

+0

如何可以'祝福$ a;'被解釋爲裸詞? – asker

+0

Bareword不作爲字符串,因爲'print test'不輸出'test'。 – asker

+0

@asker - 'print test'不是很好的例子,因爲它被解析爲'print test $ _'(使用test作爲文件句柄)。嘗試'打印STDOUT測試'。但無論如何,在你的情況下,'祝福'不是純粹的詞,因爲周圍的上下文(它被解釋爲'$ a->祝福',當祝福沒有被定義時) – bvr

1

正如已經指出的那樣,您需要在使用該方法之前加載模塊。另外,如果您使用perl -we而不是perl -e,則可能不會提出此問題。

對我來說,與perl -we,我得到這樣的警告:

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

blessed不是在Perl關鍵字。您在shell命令中使用雙引號,因此變量($a,$c等)來自您的shell環境,它們不是Perl變量。 由於這些環境變量可能是空的,你基本上是執行腳本

print 1 if blessed ; 

當這樣使用,blessed只是一個裸詞字符串始終計算爲真。你所做的與運行沒有多大區別

$ perl -e 'print 1 if foo' 
+0

哎呀,沒有發生在我身上。由於引用,我認爲OP是在Windows上。好點子。 – bvr

+2

或更清楚,就像運行'perl -e'打印1如果'祝福''' –