簡體   English   中英

BAREWORD文件句柄:禁止使用裸字“ DATA”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM