我在嘗試將我的某個模塊重構爲面向對象的代碼時遇到了此問題。我把它縮小到以下。下面是3個文件我使用的清單:'未加引號的字符串「..」「可能與未來的保留字發生衝突」,但僅限於使用包時
_mypkg.pm:
use _debug;
use _debug dprint;
package mypkg;
sub new {
my($class,%args) = @_;
my $self = bless {}, $class;
dprint "pkg<br>\n";
return $self;
}
1;
_debug.pm:
# package mydebug; # uncommenting this line gives error 500
my $bprint = "";
sub print_now { print "printing: ".$bprint; $bprint = "";}
sub bprint { $bprint .= "@_"; }
sub dprint { bprint @_; }
1;
testfile.cgi:
#!/usr/bin/perl
require '_mypkg.pm';
#require '_debug.pm';
#use _debug;
use _debug dprint;
print "Content-type: text/html\n\n";
dprint "first<br>\n";
&print_now;
my $somepkg = mypkg->new();
dprint "second<br>\n";
&print_now;
由於他們出現在上面,沒有輸出,但註釋掉了這幾行:
require '_mypkg.pm';
my $somepkg = mypkg->new();
在testfile.cgi
,導致以下(預期)輸出:
printing: first
printing: second
運行腳本(修改)與-w導致在錯誤日誌下面的輸出(修整了一下的清晰度):
Unquoted string "dprint" may clash with future reserved word
Unquoted string "mypkg" may clash with future reserved word
String found where operator expected at _mypkg.pm, near "dprint "pkg<br>\\n""
\t(Do you need to predeclare dprint?)
syntax error at _mypkg.pm line 10, near "dprint "pkg<br>\\n""
Compilation failed in require
基本上,我想用DPRINT(在_debug.pm定義)在我的腳本來代替「打印」。(即不帶括號或&),它完美地工作直到我嘗試在模塊中使用它,我bega ñ試圖使用對象..即「包」。那麼,我該如何解決這個問題?
感謝您的回答,我的確使用嚴格的使用警告,我只是爲了簡潔而不想將其包含在內,並且因爲他們沒有對問題做出貢獻。另外,我在文檔中看過,軟件包名稱和模塊名稱不一定是相同的,所以也不會導致問題。以「使用Exporter」開頭的兩行以及在_mypkg.pm中移動包聲明(給出@ mob的答案)是爲我解決了這個問題,謝謝! – insaner