質問するログイン新規登録

質問編集履歴

1

コードの追加

2018/02/21 02:15

投稿

trm
trm

スコア117

title CHANGED
File without changes
body CHANGED
@@ -1,1 +1,223 @@
1
- ある程度スクリプトを作ってきたのですが、あるときから、変数の前にmyを付けないとエラーとなってしまうようになりました。そこで変数の前にmyを付けるとmyが必要ないとエラー表示されたり、myを付けているのにmyと付いていないとエラーが出ます。一体何なんなんでしょう?この解決策をお願いします。
1
+ ある程度スクリプトを作ってきたのですが、あるときから、変数の前にmyを付けないとエラーとなってしまうようになりました。そこで変数の前にmyを付けるとmyが必要ないとエラー表示されたり、myを付けているのにmyと付いていないとエラーが出ます。一体何なんなんでしょう?この解決策をお願いします。
2
+ ```#!C:/Perl64/bin/perl
3
+
4
+ use strict;
5
+ use warnings;
6
+
7
+ use utf8;
8
+ use CGI;
9
+ my $query = new CGI;
10
+ use CGI qw(:standard);
11
+ use File::Copy;
12
+
13
+ #binmode STDIN, ':utf8';
14
+ #binmode STDOUT, ':utf8';
15
+ #binmode STDERR, ':utf8';
16
+
17
+ #use strict;
18
+ #use warnings;
19
+ #use DBI;
20
+ #use DBD::SQLite;
21
+ #追加use
22
+ #use utf8;
23
+ #use CGI;
24
+ #$query = new CGI;
25
+ #use CGI qw(:standard);
26
+ #use File::Copy;
27
+
28
+ #binmode STDIN, ':utf8';
29
+ #binmode STDOUT, ':utf8';
30
+ #binmode STDERR, ':utf8';
31
+
32
+ #use strict;
33
+ #use warnings;
34
+ #追加use終了
35
+
36
+ #binmode STDIN, ':encoding(cp932)';
37
+ #binmode STDOUT, ':encoding(cp932)';
38
+ #binmode STDERR, ':encoding(cp932)';
39
+
40
+ my $syouhinkensaku = $query->param('syouhinkensaku');
41
+
42
+ my $dir = "syouhin";
43
+ chdir $dir
44
+ or die "Cannot change working directory $dir: $!";
45
+
46
+ my @file = glob "*";
47
+
48
+ #@syouhinfile=join(",", @file)"\n";
49
+
50
+ my @syouhinfile=join(",", @file);
51
+
52
+ #$abc = "kensakuitiji.txt";
53
+ #open(OUT, ">> $abc") || die("ファイルを追記モードで開けませんでした");
54
+ #$msg2 = "@file\n";
55
+ #print OUT $msg2;
56
+ #close(OUT);
57
+
58
+ if($syouhinkensaku ne ""){
59
+ my $i=index(my @syouhinfile,my $syouhinkensaku);
60
+ my $j=$i;
61
+ while(1){
62
+ my $sub = substr(my @syouhinfile, my $i, 1);
63
+ if(my $sub eq ","){
64
+ last;
65
+ my $i=$i-1;
66
+ }
67
+ }
68
+ $i=$i+1;
69
+ while(1){
70
+ my $sub = substr(my @syouhinfile, my $j,1);
71
+ if(my $sub eq ","){
72
+ last;
73
+ my $j=$j+1;
74
+ }
75
+ }
76
+ $j= $j-1;
77
+ my $k=$j-$i-1;
78
+ my $sub2 = substr(@syouhinfile, $i, $k);
79
+ }
80
+
81
+ print "Content-type: text/html\n\n";
82
+ print<<"HTML";
83
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
84
+ <html>
85
+ <head>
86
+ <title>検索ヒット</title>
87
+ </head>
88
+ <body bgcolor="#000066" text="#ff0000" link="#0000ee" alink="#0000ee" vlink="#551a8b">
89
+ <form action="b5.cgi">
90
+ <form>
91
+ my @syouhinfile<br>
92
+ my $sub2<br>
93
+ <input type="submit" onclick="location.href'b5.cgi'" value="NEXT"><input type="reset" value="RESET">
94
+ </form>
95
+ <br>
96
+ <br>
97
+ </body>
98
+ </html>
99
+ HTML
100
+ exit;
101
+ ```
102
+ 上述のコードをデバッグすると、my $sub2 にmyが付いていないとエラーになります。
103
+ ```#!C:/Perl64/bin/perl
104
+
105
+ use strict;
106
+ use warnings;
107
+
108
+ use utf8;
109
+ use CGI;
110
+ my $query = new CGI;
111
+ use CGI qw(:standard);
112
+ use File::Copy;
113
+
114
+ #binmode STDIN, ':utf8';
115
+ #binmode STDOUT, ':utf8';
116
+ #binmode STDERR, ':utf8';
117
+
118
+ #use strict;
119
+ #use warnings;
120
+ #use DBI;
121
+ #use DBD::SQLite;
122
+ #追加use
123
+ #use utf8;
124
+ #use CGI;
125
+ #$query = new CGI;
126
+ #use CGI qw(:standard);
127
+ #use File::Copy;
128
+
129
+ #binmode STDIN, ':utf8';
130
+ #binmode STDOUT, ':utf8';
131
+ #binmode STDERR, ':utf8';
132
+
133
+ #use strict;
134
+ #use warnings;
135
+ #追加use終了
136
+
137
+ #binmode STDIN, ':encoding(cp932)';
138
+ #binmode STDOUT, ':encoding(cp932)';
139
+ #binmode STDERR, ':encoding(cp932)';
140
+
141
+ my $syouhinkensaku = $query->param('syouhinkensaku');
142
+
143
+ my $dir = "syouhin";
144
+ chdir $dir
145
+ or die "Cannot change working directory $dir: $!";
146
+
147
+ my @file = glob "*";
148
+
149
+ #@syouhinfile=join(",", @file)"\n";
150
+
151
+ my @syouhinfile=join(",", @file);
152
+
153
+ #$abc = "kensakuitiji.txt";
154
+ #open(OUT, ">> $abc") || die("ファイルを追記モードで開けませんでした");
155
+ #$msg2 = "@file\n";
156
+ #print OUT $msg2;
157
+ #close(OUT);
158
+
159
+ my $i;
160
+ my $h=0;
161
+ my @sub2;
162
+ if($syouhinkensaku ne ""){
163
+ while($i!=-1){
164
+ my $i=index(@syouhinfile,$syouhinkensaku,$h);
165
+ my $j=$i;
166
+ while(1){
167
+ my $sub = substr(@syouhinfile,$i, 1);
168
+ if($sub eq ","){
169
+ last;
170
+ my $i=$i-1;
171
+ }
172
+ }
173
+ $i=$i+1;
174
+ while(1){
175
+ my $sub = substr(@syouhinfile,$j, 1);
176
+ if($sub eq ","){
177
+ last;
178
+ my $j=$j+1;
179
+ }
180
+ }
181
+ $j=$j-1;
182
+ my $k=$j-$i-1;
183
+ my $l=my $l+1;
184
+ $sub2[$l] = substr(@syouhinfile,$i,$k);
185
+ my $h=$i+1;
186
+ #$i=-1;
187
+ }
188
+ }
189
+
190
+
191
+
192
+ print "Content-type: text/html\n\n";
193
+ print<<"HTML";
194
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
195
+ <html>
196
+ <head>
197
+ <title>検索ヒット</title>
198
+ </head>
199
+ <body bgcolor="#000066" text="#ff0000" link="#0000ee" alink="#0000ee" vlink="#551a8b">
200
+ <form action="b5.cgi">
201
+ <form>
202
+ @syouhinfile<br>
203
+ for(my $m=1;my $m=my $l;my $m++){
204
+ $sub2[my $m]<br>
205
+ }
206
+ <input type="submit" onclick="location.href'b5.cgi'" value="NEXT"><input type="reset" value="RESET">
207
+ </form>
208
+ <br>
209
+ <br>
210
+ </body>
211
+ </html>
212
+ HTML
213
+ exit;
214
+ ```
215
+ 上述のコードをデバッグすると、
216
+ my $l=my $l+1;
217
+ のmyを取るとmyが必要と表示され、myを付けるとmyが必要ないと表示されます。そして
218
+ for(my $m=1;my $m=my $l;my $m++){
219
+ $sub2[my $m]<br>
220
+ }
221
+ の$m と$lに myがついているにもかかわらず、myが付いていないとエラーが表示されます。
222
+
223
+ よろしくお願いします。