• ベストアンサー

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 のプログラムの中のループの処理と見比べてもどこが悪いのか分かりません。何が原因なのかお教え願えれば幸いです。 初歩的な質問で申し訳ありません。

  • Perl
  • 回答数5
  • ありがとう数5

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

  • ベストアンサー
  • 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

  • for文を使った配列の処理について

    for文を用いてそれぞれの$i時に別の名前で配列をつくり、共通の処理をするCGIを作ろうとしています。 for($i=1;$i<3;++$i){ @HAIRETSU = "@HAIRETSU$i"; #@HAIRETSUの処理# } のようなソースを用いて@HAIRETSU1、@HAIRETSU2を定義し、それぞれ共通の処理をすることを考えましたが、うまくいきません。何か良い方法はあるでしょうか?

    • ベストアンサー
    • CGI
  • ループ中でのmy宣言と処理速度

    こんにちは、Perl入門者ですがよろしくお願いします。 質問内容はループ中にmy宣言をいちいちすると処理速度は落ちてしまうのかということです。 ソースを例に挙げると まず、$lenをループの外に書く方法と my $i; my $len; for( $i=0 ; $i<1024 ; $i++){ $len = length($str[$i]; } $lenをループの中に書く方法 my $i; for($i=0 ; $i<1024 ; $i++){ my $len; $len = length($str[$i]); } の2種類です(その他の変数については特に言及していません) 使いやすさでいえば、ループ内で宣言をした方が自動的に初期化されるのでうれしいのですが ふと、いちいちメモリの解放と確保を行っているわけですからOS(?)に負荷がかかって遅くなっているのではと考えました。 Perlで処理速度を測ることもできるようですが恥ずかしいながらスキル不足です。すいません。 どなたかご存知の方、自分なりの考えがある方はご教授頂きたく存じます。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 画像ファイルの変換

    CGI(perl)で、ホームページを作成しているものですが、事情があってjpegファイルから、gifファイルに変換する必要があります。 perlモジュールにそのような変換機能あるでしょうか?

    • 締切済み
    • CGI
  • 排他処理について教えてください。

    現在、ガンダムカルトQQQ(MIDI-CG-SOFT-総合サイト)【http://ha1.seikyou.ne.jp/home/jun/】様よりフリーで配布されている「QQQ MEMBERS ver1.00」を使用してメンバー管理を行なっています。 しかし、このスクリプトには排他処理が入っていなかった為、ディスカバリーシステム【http://www.dscvsys.com/Perl.htm#filelock】様のページを参考にrenameを使った排他処理を作成しましたが、どこに排他処理をかけていいかわからず、かなり悩んでいます。 *排他処理はディスカバリーシステム様の記述をそのまんま使用しています。 尚、ファイル構成は以下の通りです。 cgi-bin  |  ├member.cgi  ├jcode.pl  └lockdir    └lockfile(拡張子無しテキストファイル) 大変申し訳ありませんがご教授宜しくお願い致します。

    • ベストアンサー
    • CGI
  • for文の中でエラーが出てしまいます。

    Perl初心者で、1から勉強始めました。 質問ですが、 #!c:\perl\bin\perl -w use strict; print "Content-type: text/html\n\n"; my %data1 = ( 'id','ID001', 'name','たなか', 'birthday','1970/10/10' ); my %data2 = ( 'id','ID002', 'name','すずき', 'birthday','1972/03/21' ); my %person = (\%data1,\%data2); for (my $i=0; $i<@person; $i++) { my %row = %{$person[$i]}; print "$row{'id'}:$row{'name'}($row{'birthday'}生)<br>\n"; } テキスト通りにやっているつもりですが、のforの中でエラーが出てしまいます。見直してもどこが悪いか分かりません。誰かお暇な方教えてください。お願いします。

    • ベストアンサー
    • Perl
  • Gimp for windowsのGIFアニメーションについて

    Gimp for windowsを使っています。gimpでアニメーションつくって保存したいのですが、windows版なのでGIFで保存できません。他のソフトをつかって後で変換すると、アニメーションじゃなくなってしまいます。  最初にgimpで保存するときの拡張子はなににすればいいのでしょうか?また変換してもGIF animationのまま変換するソフトなどはあるのでしょうか?教えてください。お願いします。

  • データ削除処理後に指定のhtmlファイルに飛ばす

    下記サイトで頂戴したファイルアップローダーについてご教示お願いします。 http://cgi-garage.parallel.jp/utility.html ※ファイルアップローダーVer 1 アップロードした画像の削除処理をした後に指定したhtmlファイルに飛ばしたいのですが どのようにに書き足すと上手くいくか悩んでいます。 削除処理を抜粋して記載しますので宜しくお願い致します。 sub delete{ my $inpass = $cgi->param('inpass'); if($pass ne $inpass){ &errorprint('Input Error!','パスワードが違いますので、削除できません。'); } my @delchk = $cgi->param('delchk'); my $newstr; my @logs = &setread2('log.cgi'); for my $i( @logs ){ my @i = split(/\t/,$i); my $hit = "0"; for my $p( @delchk ){ if($i[0] eq $p){ $hit++; unlink $i[2]; last; } } if($hit eq "0"){ $newstr .= $i . "\n"; } } $chstr = &setchange3($newstr,"log.cgi"); }

  • File::Findモジュールの例外処理

    サーバー内の入り組んだ階層の中にある全てのhtmlファイルをEUCコードに一括 変換処理したいと考えています。 但し、あるひとつのディレクトリ内とそのディレクト以下の階層にあるhtmlファイルは 処理したくありません。 require "jcode.pl"; use File::Find; find(\&fileProc, './public_html'); sub fileProc { my $fname = $_; return unless -f $_; #### ここに例外処理を書けばいいと思うのですが・・・ return unless /\.html$/; open IN, $fname; open TMP, ">$fname.temptemp"; # 存在しないファイル名 while (<IN>) { &jcode'convert(*_,'euc'); print TMP; } close IN; close TMP; rename "$fname.temptemp", $fname or warn "cannot rename $fname because $! \n"; } どう書けばいいのかよろしくご教授ください。

    • ベストアンサー
    • Perl
  • CGIの処理中に次の処理が出来る?

    perlで書いたCGIの処理時間が非常に長いのです。 処理は数百名に対してメールを配信するもので、テキストで書かれた数百のメールアドレス配列に対してループ文で一人ずつメールを配信しています。これが約4分くらいかかります。 質問は2つあって、 (1)まずこのメール配信の処理を早くする方法はないでしょうか?  配信アドレスは自動的に追加されたり削除されたりするので固定のML  を使う事ができませんので、個別にメールを送る方法を取っていま  す。 (2)メール配信をバックグランドで実行させて、メインのプログラムは  復帰させる、という方法が出来るでしょうか?  今は、メインCGIが画面の表示やメールの配信などほとんどを実行し  ています。  このような場合、メール配信中はそのメインCGIが実行権を握った  状態になる為、他のユーザはこのメインCGIを実行出来ないと思って  いるのですが、間違った認識でしょうか?  もしそうだとすると、早くメインCGIの実行権を他のユーザに明け渡 さなければならないと思うので、メール配信を別CGIで実行させたほ うが良いのかな?と思った次第です。  よろしくご教示下さい。

    • ベストアンサー
    • CGI
  • CGIで他のページに処理を委譲

    Perl初心者です。 CGIモジュールを用いてWEBサイトを制作しています。 特定の条件に応じて他のページに処理を委譲したいのですが、 どのようなやり方が一般的なのかを教えて頂きたいです。 requireを使えばそれらしいことが出来ますが、 他に何かやり方がありますでしょうか。 フレームワークなどは用いていません。

    • ベストアンサー
    • Perl