我希望用户输入文件名并让程序输出文件的内容.
我得到2x"未加引号的字符串可能与未来的保留字冲突"和"全局符号$ filename需要显式的包名称.
use strict;
use warnings;
print 'Enter file name: ';
my $fileName = <STDIN>;
chomp($fileName);
open(fh, $filename or die $!);
Run Code Online (Sandbox Code Playgroud)
另外,为什么文件句柄不是一个变量(实际上取决于我看到它是变量的例子,就像我在这里有的那样)?
您所有的问题都在这里(以及$filename与$fileName)。
open(fh, $filename or die $!);
Run Code Online (Sandbox Code Playgroud)
你想要的东西更像
open (my $fh, '<', $filename) || die $!;
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,die条件为 on $filename;它相当于:
if (!$filename) { die $! }
Run Code Online (Sandbox Code Playgroud)
但第二个更像是:
if (!open (my $fh, '<', $filename)) { die $! }
Run Code Online (Sandbox Code Playgroud)
尽管这样做(使用if (!open))是没有意义的,除非您$fh使用更有用的范围进行声明 - 现在它仅在if块内可见。
第二种情况隐式地覆盖了第一种情况,因为 if$filename未定义open()将失败并显示Use of uninitialized value $filename in open.