Perl'My'变量[$]在同一声明

时间:2015-06-24 16:43:44

标签: perl debugging warnings

所以我有一些用于打开文件的子程序:

828 sub open_for_r {
829     my $FH = shift;
830     my $filename = shift;
831 
832     open($FH, "< $filename") || die "cannot open $filename: $!";
833 }
834 
835 sub open_for_w {
836     my $FH = shift;
837     my $filename = shift;
838 
839     open($FH, "> $filename") || die "cannot open $filename: $!";
840     # open($FH, ">> $filename") || die "cannot open $filename: $!";
841 }
842 
843 sub open_for_rw {
844     my $FH = shift;
845     my $filename = shift;
846 
847     open($FH, "+< $filename") || die "cannot open $filename: $!";
848     # open($FH, ">> $filename") || die "cannot open $filename: $!";
849 
850 }
851 
852 sub read_file {
853 
854     my $FH = shift;
855     my $filename = shift;
856     my $contents = "";
857     my $var = "";
858 
859     #To read from that file
860     while (defined($var = <$FH>)) {
861         # chomp($var);
862         # print "$var\n";
863     $contents .= $var;
864     }
865     return $contents;
866 }

现在我收到警告:

“my”变量$ FH在ittp_to_scn.pl第836行覆盖同一范围内的早期声明。

“my”变量$ filename在ittp_to_scn.pl第837行覆盖同一范围内的早期声明。

“my”变量$ FH在ittp_to_scn.pl第844行屏蔽同一范围内的早期声明。

“my”变量$ filename在ittp_to_scn.pl第845行覆盖同一范围内的早期声明。

虽然我的代码中没有其他地方可以声明 $ FH $ filename 。我不明白为什么说有早先的声明?我不允许在不同的子程序中使用相同的变量名吗?或者Perl不允许这样做吗?

2 个答案:

答案 0 :(得分:1)

好吧,我今天收到了这个警告,我 DID

use strict;
use warnings;

启用。

我查看了代码,查找了遗失的;和无关的{以及} s,发现了一些多余的}以上几行问题声明的结尾(但在分号之前)。

答案 1 :(得分:-6)

打开use strict并修正了一些警告。所以没有问题,只是其他问题引起了这些警告。