所以我有一些用于打开文件的子程序:
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不允许这样做吗?
答案 0 :(得分:1)
好吧,我今天收到了这个警告,我 DID 有
use strict;
use warnings;
启用。
我查看了代码,查找了遗失的;
和无关的{
以及}
s,发现了一些多余的}
以上几行问题声明的结尾(但在分号之前)。
答案 1 :(得分:-6)
打开use strict
并修正了一些警告。所以没有问题,只是其他问题引起了这些警告。