我是perl的新手。我编写了以下代码,以与输入相反的顺序读取文件,并将值打印到命令行。
#! /usr/bin/perl
use warnings;
if(@ARGV == 0)
{
die "No file name given \n";
}
my @argarr;
while(@ARGV != 0)
{
my $tmp = pop @ARGV;
push @argarr, $tmp;
}
foreach(@argarr)
{
#print $_;
#print "\n";
if (! open my $fh , "< $_")
{
print "unable to open $_\n";
}
while(<$fh>)
{
chomp;
print "$_\n";
}
}
然而,它没有按预期工作。而不是将文件打印到STDOUT,它显示以下错误:
Use of uninitialized value $fh in <HANDLE> at ./mtac.pl line 23.
readline() on unopened filehandle at ./mtac.pl line 23.
请帮忙。
答案 0 :(得分:2)
#!/usr/bin/perl
use strict;
use warnings;
if(@ARGV == 0)
{
die "No file name given \n";
}
my @argarr = reverse @ARGV;
foreach(@argarr)
{
my $fh;
unless(open $fh, '<', $_){
warn "unable to open file $_ : $! \n";
next;
}
while(<$fh>)
{
chomp;
print "$_\n";
}
close($fh);
}
标量是lexicaly作用域,仅在$fh
分支内可见
if
您可以使用
解决此问题 if (! open my $fh , "< $_") { .. }
或
open my $fh , "<", $_ or print("$! $_"), next;
答案 1 :(得分:1)
正如评论所说,你应该总是在脚本的顶部使用{"file_name":false,"error":["<p>The filetype you are attempting to upload is not allowed.<\/p>"]}
。如果变量没有正确范围,它会给你提示
在你的剧本中。
这将完成工作:
use strict
答案 2 :(得分:0)
这是因为FROM
的范围仅限于初始化的块。以下是我重写代码的方法:
$fh