[英]BAREWORD filehandles: bareword “DATA” not allowed
我正在嘗試從Perl腳本的__END__
部分讀取一些tgz數據。 我遇到了文件句柄的問題,有時使用它不會引起問題,有時腳本會引發錯誤。
這是一些示例代碼,我知道數據不是tgz,但確實顯示了問題。)
#!/usr/bin/env perl
use strict;
use warnings;
my $raw_time = (stat(DATA))[9];
my $size = -s DATA;
my $kilosize = int($size / 1024) . 'k';
print "<P>Script size is $kilosize at $raw_time\n";
#print ref(DATA); #UNCOMMENT TO SEE THE PROBLEM?
__DATA__
DO NOT REMOVE THE PRECEDING LINE.
Everything else in this file will be ignored.
如果我運行此腳本,我將得到
$ /tmp/data.pl
<P>Script size is 0k at 1500655490
DATA似乎可以使用。
但是,如果我取消注釋,則print ref(DATA);
我在那條線上出現錯誤:
Bareword "DATA" not allowed while "strict subs" in use at /tmp/data.pl line 12.
Execution of /tmp/data.pl aborted due to compilation errors.
為什么早期使用DATA也不會有問題?
[發布前更新]如果我將行更改為
print "ref:". ref(\*DATA);
它不會引發編譯錯誤。 這是怎么回事?
其他人已經解釋了發生了什么。 在perl
需要文件句柄/ fileglob的情況下,可以使用DATA
。 但是,在諸如ref(DATA)
的上下文中,沒有先驗的理由假設該參數是文件句柄/文件,這是行不通的。
是否有
DATA
的詞匯文件句柄解決方案?
我不太確定您要做什么,但這可能會有所幫助:
#!/usr/bin/env perl
use strict;
use warnings;
# You could use any variable name you like
my $DATA_FH;
CHECK { $DATA_FH = \*DATA }
print <$DATA_FH>
__DATA__
One
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.