ある程度スクリプトを作ってきたのですが、あるときから、変数の前にmyを付けないとエラーとなってしまうようになりました。そこで変数の前にmyを付けるとmyが必要ないとエラー表示されたり、myを付けているのにmyと付いていないとエラーが出ます。一体何なんなんでしょう?この解決策をお願いします。
use strict; use warnings; use utf8; use CGI; my $query = new CGI; use CGI qw(:standard); use File::Copy; #binmode STDIN, ':utf8'; #binmode STDOUT, ':utf8'; #binmode STDERR, ':utf8'; #use strict; #use warnings; #use DBI; #use DBD::SQLite; #追加use #use utf8; #use CGI; #$query = new CGI; #use CGI qw(:standard); #use File::Copy; #binmode STDIN, ':utf8'; #binmode STDOUT, ':utf8'; #binmode STDERR, ':utf8'; #use strict; #use warnings; #追加use終了 #binmode STDIN, ':encoding(cp932)'; #binmode STDOUT, ':encoding(cp932)'; #binmode STDERR, ':encoding(cp932)'; my $syouhinkensaku = $query->param('syouhinkensaku'); my $dir = "syouhin"; chdir $dir or die "Cannot change working directory $dir: $!"; my @file = glob "*"; #@syouhinfile=join(",", @file)"\n"; my @syouhinfile=join(",", @file); #$abc = "kensakuitiji.txt"; #open(OUT, ">> $abc") || die("ファイルを追記モードで開けませんでした"); #$msg2 = "@file\n"; #print OUT $msg2; #close(OUT); if($syouhinkensaku ne ""){ my $i=index(my @syouhinfile,my $syouhinkensaku); my $j=$i; while(1){ my $sub = substr(my @syouhinfile, my $i, 1); if(my $sub eq ","){ last; my $i=$i-1; } } $i=$i+1; while(1){ my $sub = substr(my @syouhinfile, my $j,1); if(my $sub eq ","){ last; my $j=$j+1; } } $j= $j-1; my $k=$j-$i-1; my $sub2 = substr(@syouhinfile, $i, $k); } print "Content-type: text/html\n\n"; print<<"HTML"; <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>検索ヒット</title> </head> <body bgcolor="#000066" text="#ff0000" link="#0000ee" alink="#0000ee" vlink="#551a8b"> <form action="b5.cgi"> <form> my @syouhinfile<br> my $sub2<br> <input type="submit" onclick="location.href'b5.cgi'" value="NEXT"><input type="reset" value="RESET"> </form> <br> <br> </body> </html> HTML exit;
上述のコードをデバッグすると、my $sub2 にmyが付いていないとエラーになります。
use strict; use warnings; use utf8; use CGI; my $query = new CGI; use CGI qw(:standard); use File::Copy; #binmode STDIN, ':utf8'; #binmode STDOUT, ':utf8'; #binmode STDERR, ':utf8'; #use strict; #use warnings; #use DBI; #use DBD::SQLite; #追加use #use utf8; #use CGI; #$query = new CGI; #use CGI qw(:standard); #use File::Copy; #binmode STDIN, ':utf8'; #binmode STDOUT, ':utf8'; #binmode STDERR, ':utf8'; #use strict; #use warnings; #追加use終了 #binmode STDIN, ':encoding(cp932)'; #binmode STDOUT, ':encoding(cp932)'; #binmode STDERR, ':encoding(cp932)'; my $syouhinkensaku = $query->param('syouhinkensaku'); my $dir = "syouhin"; chdir $dir or die "Cannot change working directory $dir: $!"; my @file = glob "*"; #@syouhinfile=join(",", @file)"\n"; my @syouhinfile=join(",", @file); #$abc = "kensakuitiji.txt"; #open(OUT, ">> $abc") || die("ファイルを追記モードで開けませんでした"); #$msg2 = "@file\n"; #print OUT $msg2; #close(OUT); my $i; my $h=0; my @sub2; if($syouhinkensaku ne ""){ while($i!=-1){ my $i=index(@syouhinfile,$syouhinkensaku,$h); my $j=$i; while(1){ my $sub = substr(@syouhinfile,$i, 1); if($sub eq ","){ last; my $i=$i-1; } } $i=$i+1; while(1){ my $sub = substr(@syouhinfile,$j, 1); if($sub eq ","){ last; my $j=$j+1; } } $j=$j-1; my $k=$j-$i-1; my $l=my $l+1; $sub2[$l] = substr(@syouhinfile,$i,$k); my $h=$i+1; #$i=-1; } } print "Content-type: text/html\n\n"; print<<"HTML"; <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>検索ヒット</title> </head> <body bgcolor="#000066" text="#ff0000" link="#0000ee" alink="#0000ee" vlink="#551a8b"> <form action="b5.cgi"> <form> @syouhinfile<br> for(my $m=1;my $m=my $l;my $m++){ $sub2[my $m]<br> } <input type="submit" onclick="location.href'b5.cgi'" value="NEXT"><input type="reset" value="RESET"> </form> <br> <br> </body> </html> HTML exit;
上述のコードをデバッグすると、
my $l=my $l+1;
のmyを取るとmyが必要と表示され、myを付けるとmyが必要ないと表示されます。そして
for(my $m=1;my $m=my $l;my $m++){
$sub2[my $m]<br>
}
の$m と$lに myがついているにもかかわらず、myが付いていないとエラーが表示されます。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー