質問編集履歴

1

コードの追加

2018/02/21 02:15

投稿

trm
trm

スコア117

test CHANGED
File without changes
test CHANGED
@@ -1 +1,445 @@
1
1
  ある程度スクリプトを作ってきたのですが、あるときから、変数の前にmyを付けないとエラーとなってしまうようになりました。そこで変数の前にmyを付けるとmyが必要ないとエラー表示されたり、myを付けているのにmyと付いていないとエラーが出ます。一体何なんなんでしょう?この解決策をお願いします。
2
+
3
+ ```#!C:/Perl64/bin/perl
4
+
5
+
6
+
7
+ use strict;
8
+
9
+ use warnings;
10
+
11
+
12
+
13
+ use utf8;
14
+
15
+ use CGI;
16
+
17
+ my $query = new CGI;
18
+
19
+ use CGI qw(:standard);
20
+
21
+ use File::Copy;
22
+
23
+
24
+
25
+ #binmode STDIN, ':utf8';
26
+
27
+ #binmode STDOUT, ':utf8';
28
+
29
+ #binmode STDERR, ':utf8';
30
+
31
+
32
+
33
+ #use strict;
34
+
35
+ #use warnings;
36
+
37
+ #use DBI;
38
+
39
+ #use DBD::SQLite;
40
+
41
+ #追加use
42
+
43
+ #use utf8;
44
+
45
+ #use CGI;
46
+
47
+ #$query = new CGI;
48
+
49
+ #use CGI qw(:standard);
50
+
51
+ #use File::Copy;
52
+
53
+
54
+
55
+ #binmode STDIN, ':utf8';
56
+
57
+ #binmode STDOUT, ':utf8';
58
+
59
+ #binmode STDERR, ':utf8';
60
+
61
+
62
+
63
+ #use strict;
64
+
65
+ #use warnings;
66
+
67
+ #追加use終了
68
+
69
+
70
+
71
+ #binmode STDIN, ':encoding(cp932)';
72
+
73
+ #binmode STDOUT, ':encoding(cp932)';
74
+
75
+ #binmode STDERR, ':encoding(cp932)';
76
+
77
+
78
+
79
+ my $syouhinkensaku = $query->param('syouhinkensaku');
80
+
81
+
82
+
83
+ my $dir = "syouhin";
84
+
85
+ chdir $dir
86
+
87
+ or die "Cannot change working directory $dir: $!";
88
+
89
+
90
+
91
+ my @file = glob "*";
92
+
93
+
94
+
95
+ #@syouhinfile=join(",", @file)"\n";
96
+
97
+
98
+
99
+ my @syouhinfile=join(",", @file);
100
+
101
+
102
+
103
+ #$abc = "kensakuitiji.txt";
104
+
105
+ #open(OUT, ">> $abc") || die("ファイルを追記モードで開けませんでした");
106
+
107
+ #$msg2 = "@file\n";
108
+
109
+ #print OUT $msg2;
110
+
111
+ #close(OUT);
112
+
113
+
114
+
115
+ if($syouhinkensaku ne ""){
116
+
117
+ my $i=index(my @syouhinfile,my $syouhinkensaku);
118
+
119
+ my $j=$i;
120
+
121
+ while(1){
122
+
123
+ my $sub = substr(my @syouhinfile, my $i, 1);
124
+
125
+ if(my $sub eq ","){
126
+
127
+ last;
128
+
129
+ my $i=$i-1;
130
+
131
+ }
132
+
133
+ }
134
+
135
+ $i=$i+1;
136
+
137
+ while(1){
138
+
139
+ my $sub = substr(my @syouhinfile, my $j,1);
140
+
141
+ if(my $sub eq ","){
142
+
143
+ last;
144
+
145
+ my $j=$j+1;
146
+
147
+ }
148
+
149
+ }
150
+
151
+ $j= $j-1;
152
+
153
+ my $k=$j-$i-1;
154
+
155
+ my $sub2 = substr(@syouhinfile, $i, $k);
156
+
157
+ }
158
+
159
+
160
+
161
+ print "Content-type: text/html\n\n";
162
+
163
+ print<<"HTML";
164
+
165
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
166
+
167
+ <html>
168
+
169
+ <head>
170
+
171
+ <title>検索ヒット</title>
172
+
173
+ </head>
174
+
175
+ <body bgcolor="#000066" text="#ff0000" link="#0000ee" alink="#0000ee" vlink="#551a8b">
176
+
177
+ <form action="b5.cgi">
178
+
179
+ <form>
180
+
181
+ my @syouhinfile<br>
182
+
183
+ my $sub2<br>
184
+
185
+ <input type="submit" onclick="location.href'b5.cgi'" value="NEXT"><input type="reset" value="RESET">
186
+
187
+ </form>
188
+
189
+ <br>
190
+
191
+ <br>
192
+
193
+ </body>
194
+
195
+ </html>
196
+
197
+ HTML
198
+
199
+ exit;
200
+
201
+ ```
202
+
203
+ 上述のコードをデバッグすると、my $sub2 にmyが付いていないとエラーになります。
204
+
205
+ ```#!C:/Perl64/bin/perl
206
+
207
+
208
+
209
+ use strict;
210
+
211
+ use warnings;
212
+
213
+
214
+
215
+ use utf8;
216
+
217
+ use CGI;
218
+
219
+ my $query = new CGI;
220
+
221
+ use CGI qw(:standard);
222
+
223
+ use File::Copy;
224
+
225
+
226
+
227
+ #binmode STDIN, ':utf8';
228
+
229
+ #binmode STDOUT, ':utf8';
230
+
231
+ #binmode STDERR, ':utf8';
232
+
233
+
234
+
235
+ #use strict;
236
+
237
+ #use warnings;
238
+
239
+ #use DBI;
240
+
241
+ #use DBD::SQLite;
242
+
243
+ #追加use
244
+
245
+ #use utf8;
246
+
247
+ #use CGI;
248
+
249
+ #$query = new CGI;
250
+
251
+ #use CGI qw(:standard);
252
+
253
+ #use File::Copy;
254
+
255
+
256
+
257
+ #binmode STDIN, ':utf8';
258
+
259
+ #binmode STDOUT, ':utf8';
260
+
261
+ #binmode STDERR, ':utf8';
262
+
263
+
264
+
265
+ #use strict;
266
+
267
+ #use warnings;
268
+
269
+ #追加use終了
270
+
271
+
272
+
273
+ #binmode STDIN, ':encoding(cp932)';
274
+
275
+ #binmode STDOUT, ':encoding(cp932)';
276
+
277
+ #binmode STDERR, ':encoding(cp932)';
278
+
279
+
280
+
281
+ my $syouhinkensaku = $query->param('syouhinkensaku');
282
+
283
+
284
+
285
+ my $dir = "syouhin";
286
+
287
+ chdir $dir
288
+
289
+ or die "Cannot change working directory $dir: $!";
290
+
291
+
292
+
293
+ my @file = glob "*";
294
+
295
+
296
+
297
+ #@syouhinfile=join(",", @file)"\n";
298
+
299
+
300
+
301
+ my @syouhinfile=join(",", @file);
302
+
303
+
304
+
305
+ #$abc = "kensakuitiji.txt";
306
+
307
+ #open(OUT, ">> $abc") || die("ファイルを追記モードで開けませんでした");
308
+
309
+ #$msg2 = "@file\n";
310
+
311
+ #print OUT $msg2;
312
+
313
+ #close(OUT);
314
+
315
+
316
+
317
+ my $i;
318
+
319
+ my $h=0;
320
+
321
+ my @sub2;
322
+
323
+ if($syouhinkensaku ne ""){
324
+
325
+ while($i!=-1){
326
+
327
+ my $i=index(@syouhinfile,$syouhinkensaku,$h);
328
+
329
+ my $j=$i;
330
+
331
+ while(1){
332
+
333
+ my $sub = substr(@syouhinfile,$i, 1);
334
+
335
+ if($sub eq ","){
336
+
337
+ last;
338
+
339
+ my $i=$i-1;
340
+
341
+ }
342
+
343
+ }
344
+
345
+ $i=$i+1;
346
+
347
+ while(1){
348
+
349
+ my $sub = substr(@syouhinfile,$j, 1);
350
+
351
+ if($sub eq ","){
352
+
353
+ last;
354
+
355
+ my $j=$j+1;
356
+
357
+ }
358
+
359
+ }
360
+
361
+ $j=$j-1;
362
+
363
+ my $k=$j-$i-1;
364
+
365
+ my $l=my $l+1;
366
+
367
+ $sub2[$l] = substr(@syouhinfile,$i,$k);
368
+
369
+ my $h=$i+1;
370
+
371
+ #$i=-1;
372
+
373
+ }
374
+
375
+ }
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+ print "Content-type: text/html\n\n";
384
+
385
+ print<<"HTML";
386
+
387
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
388
+
389
+ <html>
390
+
391
+ <head>
392
+
393
+ <title>検索ヒット</title>
394
+
395
+ </head>
396
+
397
+ <body bgcolor="#000066" text="#ff0000" link="#0000ee" alink="#0000ee" vlink="#551a8b">
398
+
399
+ <form action="b5.cgi">
400
+
401
+ <form>
402
+
403
+ @syouhinfile<br>
404
+
405
+ for(my $m=1;my $m=my $l;my $m++){
406
+
407
+ $sub2[my $m]<br>
408
+
409
+ }
410
+
411
+ <input type="submit" onclick="location.href'b5.cgi'" value="NEXT"><input type="reset" value="RESET">
412
+
413
+ </form>
414
+
415
+ <br>
416
+
417
+ <br>
418
+
419
+ </body>
420
+
421
+ </html>
422
+
423
+ HTML
424
+
425
+ exit;
426
+
427
+ ```
428
+
429
+ 上述のコードをデバッグすると、
430
+
431
+ my $l=my $l+1;
432
+
433
+ のmyを取るとmyが必要と表示され、myを付けるとmyが必要ないと表示されます。そして
434
+
435
+ for(my $m=1;my $m=my $l;my $m++){
436
+
437
+ $sub2[my $m]<br>
438
+
439
+ }
440
+
441
+ の$m と$lに myがついているにもかかわらず、myが付いていないとエラーが表示されます。
442
+
443
+
444
+
445
+ よろしくお願いします。