• ベストアンサー

for ( … ){}の処理ができません

いままで正常に動いていた cgi(perl)に次のようなセンテンス for ( $cnt=0 ; $cnt<2 ; $cnt++) { my $before = "snow06b.gif"; #変換前の名前 my $after = "snow06x.gif"; #変換後の名前 rename($before,$after); my $before = "snow06x.gif"; #変換前の名前 my $after = "snow06b.gif"; #変換後の名前 rename($before,$after); } を追加したところ、cgi 全体が動かなくなってしまいました。 for ( … ){  } の中の処理はこの cgi の他の箇所でも行っていて、正常に実行されることが分かっています。中の処理をはずして for ( $cnt=0 ; $cnt<2 ; $cnt++) { } だけにしてもこの cgi の他の処理を実行しなくなります。自分のパソコンの中にある他のperl のプログラムの中のループの処理と見比べてもどこが悪いのか分かりません。何が原因なのかお教え願えれば幸いです。 初歩的な質問で申し訳ありません。

質問者が選んだベストアンサー

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.3

No.1さん、No.2 さんがおっしゃる通り、一番臭いのは $cnt だと思います。 for ( $cnt=0 ; $cnt<2 ; $cnt++) を for ( my $cnt=0 ; $cnt<2 ; $cnt++) に直して試してください。 例えこれが原因で無かったとしても、 my は付けるべきです。

urinex
質問者

お礼

zxcv0000様。ご返事が遅れまして本当に申し訳ありません。 以下はお答えいただいた方すべてに同一文のご返事、お礼となりますがご了承ください。 zxcv0000 様からお寄せいただいたご回答の for ( $cnt=0 ; $cnt<2 ; $cnt++) を for ( my $cnt=0 ; $cnt<2 ; $cnt++) を試した時点で問題は解決していたと思われます。 ところが、このcgiが何らかの原因で全く動かなくなり、修復するのに非常に長い時間をかけてしまい、今日ご報告させていただく次第になりました。 ここでご相談させていただいた for ( … ){} については解決することができました。途中で動かなくなった原因は全角スペースが入る等のバグのように見えます。こんなご報告しかできず、本当に申し訳ありません。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.5

一番基本的なことですが、 >for ( $cnt=0 ; $cnt<2 ; $cnt++) >{ >} これをはずすと正常に動作するのでしょうか?

urinex
質問者

お礼

buffalomasa様。ご返事が遅れまして本当に申し訳ありません。 以下はお答えいただいた方すべてに同一文のご返事、お礼となりますがご了承ください。 この掲示板の zxcv0000 様からお寄せいただいたご回答の for ( $cnt=0 ; $cnt<2 ; $cnt++) を for ( my $cnt=0 ; $cnt<2 ; $cnt++) を試した時点で問題は解決していたと思われます。 ところが、このcgiが何らかの原因で全く動かなくなり、修復するのに非常に長い時間をかけてしまい、今日ご報告させていただく次第になりました。 ここでご相談させていただいた for ( … ){} については解決することができました。途中で動かなくなった原因は全角スペースが入る等のバグのように見えます。こんなご報告しかできず、本当に申し訳ありません。 ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.4

FTPでアップロードするときに、テキストモード(アスキーモード)にしていますか? ありがちな、FAQなことですが、これでだめなら私からはお手上げです。

すると、全ての回答が全文表示されます。
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

既存の部分で for{ ・・・・ } の外側で$cntを使っていたということはないですか。 もし、使っていると、$cntが望まない値に変更されるので、 正しく動作しません。

urinex
質問者

お礼

tatsu99様。ご返事が遅れまして本当に申し訳ありません。 以下はお答えいただいた方すべてに同一文のご返事、お礼となりますがご了承ください。 この掲示板の zxcv0000 様からお寄せいただいたご回答の for ( $cnt=0 ; $cnt<2 ; $cnt++) を for ( my $cnt=0 ; $cnt<2 ; $cnt++) を試した時点で問題は解決していたと思われます。 ところが、このcgiが何らかの原因で全く動かなくなり、修復するのに非常に長い時間をかけてしまい、今日ご報告させていただく次第になりました。 ここでご相談させていただいた for ( … ){} については解決することができました。途中で動かなくなった原因は全角スペースが入る等のバグのように見えます。こんなご報告しかできず、本当に申し訳ありません。 ありがとうございました。

urinex
質問者

補足

Tatsu99様、ご回答ありがとうございます。 $cntをループの外では使っていませんが、宣言について次のtaloo様のご回答への私の補足をお読みいただき、お分かりになることがありましたらご教授いただけましたら幸いです。 ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.1

use strictなどは使ってますか? もしそうなら、$cntは宣言されてますか?

urinex
質問者

お礼

taloo様。ご返事が遅れまして本当に申し訳ありません。 以下はお答えいただいた方すべてに同一文のご返事、お礼となりますがご了承ください。 この掲示板の zxcv0000 様からお寄せいただいたご回答の for ( $cnt=0 ; $cnt<2 ; $cnt++) を for ( my $cnt=0 ; $cnt<2 ; $cnt++) を試した時点で問題は解決していたと思われます。 ところが、このcgiが何らかの原因で全く動かなくなり、修復するのに非常に長い時間をかけてしまい、今日ご報告させていただく次第になりました。 ここでご相談させていただいた for ( … ){} については解決することができました。途中で動かなくなった原因は全角スペースが入る等のバグのように見えます。こんなご報告しかできず、本当に申し訳ありません。 ありがとうございました。

urinex
質問者

補足

taloo様、ご回答ありがとうございます。 use strict; を使っていますので、taloo様の回答を拝見して $cnt の宣言を my $cnt; としましたが、これでも実行結果は変りません。宣言はどのようにしたらいいのでしょうか。 初心者で何もわかりませんが、どうかよろしくお願いします。 ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A