尝试从文件读取时未初始化的值$ fh

时间:2015-09-05 13:37:26

标签: perl

我是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.

请帮忙。

3 个答案:

答案 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