如何僅通過名稱訪問外部注入的全域變數?
如果不完全限定變數,該代碼段將不起作用:
#! /bin/perl
use strict; use warnings;
package Haus;
sub test{
print __PACKAGE__."\n";
# Works
print "qualified var [$Haus::var]\n"; # OK
# not working, why and how to achieve that without
# local "our $var" instead external injected
print "simple var [$var]\n"; # NOK
}
package main;
$Haus::var=1;
Haus::test();
uj5u.com熱心網友回復:
您應該收到警告,因為$var您的示例中未宣告。宣告它,our以便 Perl 知道您的意思,$Haus::var而不是詞法變數$var。查看我們的
uj5u.com熱心網友回復:
您(適當地)要求 Perl 在$var沒有首先宣告$var.
strict vars如果你訪問了既沒有明確宣告的變數(使用任何這將產生一個編譯時錯誤
my,our,state,或use vars)也不是完全合格的。(因為這是為了避免變數自殺問題和微妙的動態范圍問題,僅僅local變數是不夠的。)參見 perlfunc 中的“my”,perlfunc 中的“our”,perlfunc 中的“state”,perlfunc 中的“local”,和變數。
您需要做的就是宣告$var。雙方our $var;并use vars qw( $var );會在這里做的伎倆。
您也可以洗掉請求(通過使用use strict; no strict qw( vars );),但沒有理由這樣做,而且很多情況下都沒有。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/330335.html
