kumoz の回答履歴

全323件中121~140件表示
  • flockの挙動がおかしい。。。

    おそれいります。 親プロセスから子プロセスを複数呼び 子プロセスが全て終わった後に次の手順に移行する。。。という処理をflockを使って作っているのですが、 うまくいきません。 下の「main.pl」を実行すると、「lock.pl」を10回呼び出して、 すべて終了したら「OK」と表示したいです。 lockというファイルを全部のプロセスで共有して、 子の全部の処理が終わった時点で、mailにロックが移る。。。という動きを想定したのですが、 なぜか、数回実行しているとMAIN LOCK(1) が最後に発動しているにもかかわらず、 子プロセスが終了していないのに「OK」の表示を出してしまいます。 flockは順番を守らないのでしょうか・・・・????? どのようにしたらうまく動くでしょうか。。。。 ==> main.pl <== #!/usr/bin/perl use Fcntl ':flock'; for (1..10){ system("./lock.pl $_ &"); } sleep 5; # 子プロセスが開始するまで待つ print qq("MAIN LOCK\n"); # ... (1) open LC,"+<lock" or die; flock LC,LOCK_EX; sleep 1; print qq("OK\n"); ==> lock.pl <== #!/usr/bin/perl use Fcntl ':flock'; print qq(lock $ARGV[0]\n!); # ... (2) open LC,"+<lock" or die; flock LC,LOCK_EX; sleep $ARGV[0]; print qq(release $ARGV[0]!\n);

    • ベストアンサー
    • azicyan
    • Perl
    • 回答数4
  • IE以外でcgiが適応されないのです。

    perlでホームページを作っていまして動作確認をしたところ、 IE以外(opera,safari,クローム,firefox)で画像が表示されませんでした。 コードを要点だけ書きますと、 まずファイルを一行読みこんで、 そこに入っている1~10までの数字を$bに納めます。 そしてsozaiディレクトリには b1.png~b10.png があります。 print"<table style=\"background-image:url(./sozai/b$b.png);\" width=\"1024\" border=\"0\">\n"; として、ファイル内容によって背景画像を変えようとしたのですが、 IE以外では背景が真っ白になってしまいます。 上記のb$b.pngの部分を普通にb1.pngと書くと全てのブラウザで表示されます。 $bにちゃんと数字が入っていないんじゃ?とも思ったのですが、 print"b$b.png";と書いてみたら普通にb1.pngとなるので$bにはちゃんと数字が入っています。 IEでは思うように表示されているので、単なる記述ミスとは思えないのですが 、 なにか根本的にルールが違ったりするのでしょうか、、? ちなみに、動作確認はスクリーンショットhttp://screenshots.jp/で行っています。 うまく伝わらなかったらすいません。 ささいなことでも構いませんのでよろしくお願いします。

  • 「option」をソートしたい!

    お世話になります。 調べてもわからないので、丸投げです。ごめんなさい。 このCGIのアイコン選択の「option」をソートで名前順にしたいのですが、 お分かりになるでしょうか? どうぞ、宜しくお願いします。 print "<tr><td><b>アイコン</b></td><td>\n"; if ($UZa_icn) { push(@icn_img,"$myicon"); push(@icn_nam,"管理者専用"); } print "<select name=gicon>\n"; foreach(0 .. $#icn_img) { if ($gicon eq "$icn_img[$_]") { print "<option value=\"$icn_img[$_]\" selected>$icn_nam[$_]\n"; } else { print "<option value=\"$icn_img[$_]\">$icn_nam[$_]\n"; } } print "</select>$ic_tog</td></tr>\n"; } else {print"<input type=hidden name=gicon value=\"$gicon\">";} print <<"EOM"; <tr><td><b>URL</b></td><td><input type=text name=ul size="$ltx_wth" value="http://$gurl" class="text"> </td></tr> <tr><td>&nbsp;</td><td> <input type=hidden name=ps value="$F{'ps'}"> <input type=hidden name=no value="$F{'no'}"> <input type=hidden name=dl value="$F{'dl'}"> <input type=hidden name=mode value="kakikae"> <input type=submit value="修正する" class="button"> </form></td></tr> </table></td></tr></table></div><br><br>

  • 「option」をソートしたい!

    お世話になります。 調べてもわからないので、丸投げです。ごめんなさい。 このCGIのアイコン選択の「option」をソートで名前順にしたいのですが、 お分かりになるでしょうか? どうぞ、宜しくお願いします。 print "<tr><td><b>アイコン</b></td><td>\n"; if ($UZa_icn) { push(@icn_img,"$myicon"); push(@icn_nam,"管理者専用"); } print "<select name=gicon>\n"; foreach(0 .. $#icn_img) { if ($gicon eq "$icn_img[$_]") { print "<option value=\"$icn_img[$_]\" selected>$icn_nam[$_]\n"; } else { print "<option value=\"$icn_img[$_]\">$icn_nam[$_]\n"; } } print "</select>$ic_tog</td></tr>\n"; } else {print"<input type=hidden name=gicon value=\"$gicon\">";} print <<"EOM"; <tr><td><b>URL</b></td><td><input type=text name=ul size="$ltx_wth" value="http://$gurl" class="text"> </td></tr> <tr><td>&nbsp;</td><td> <input type=hidden name=ps value="$F{'ps'}"> <input type=hidden name=no value="$F{'no'}"> <input type=hidden name=dl value="$F{'dl'}"> <input type=hidden name=mode value="kakikae"> <input type=submit value="修正する" class="button"> </form></td></tr> </table></td></tr></table></div><br><br>

  • perl 複数ファイルから一行ずつ読み込んで比較

    初心者向けのperl参考書がなんとか理解できる程度のperl初心者です。 一週間ほど思考錯誤してきたのですが、いくらスクリプトを書いてもどうしても自分では解決できない処理がありましたので、初めてなのですが、質問させていただきました。 二つの同じ形式の、一部情報だけ異なるファイルから一行ずつ配列を読み込んで、数値の大小を比較したいのですが・・・ ファイル構造は、下のように2行でひとつのtextデータの情報を表示する形式となってまして、 奇数行には、各textファイルの情報が、.以下の部分に4552221.2:(30.2):100、のように記載されています。 偶数行には、各テキストファイルの、IDとなる情報が、13333331のように記載されています。この奇数行と、偶数行一行ずつで、ひとつのtextデータの 情報を表しています。textというファイルは、text1から順に,text2000000まで、 2000万程度,行で言えば4000万行ほど存在しています。よって、file1もfile2も、同じ行であれば、同じtextで、同じIDのものを示しています。ずれはありません。 file1 ----------------------------- >text1. 4552221.2:(30.2):100 13333331 >text2 87999999 >text3. 3444444.1:(20.0):300 75533333 ----------------------------- 数値は意味が変わらない範囲で、比較しやすい数値に変えてあります。 この上のfile1と、下のfile2を比べたいのですが、 file2 ----------------------------- >text1. 4552221.2:(20.9):100 13333331 >text2 87999999 >text3. 3444444.1:(23.3):300 75533333 ----------------------------- 偶数行のtextファイルの欄が大事で、text名のドット(.)の後に、続けて数値が書いてある場合(上ではtext1とtext3が該当)、そのドットの後の括弧()で囲まれた中の数値の大小を比較して、 差が一定以上あるtextだけを出力するスクリプトが書きたいと思っているのですが、 これをいきなりすべてひとつのスクリプトにまとめるのは、私の知識と力量では到底無理なので、ひとつひとつ段階を踏んで処理していこうと考えました。 1、奇数行の、text.の後半に情報があるもの場合、tempファイルにその奇数行と、対になる偶数行を出力する。それを、file1、file2、個別に行う。(temp1、temp2を出力) file1で取り除かれる3、4行目のtext2は、file2でも必ず取り除かれるので、1の処理後も、file1と2の各行は、比較することが可能な状態です。 2、正規表現を使って、各行の()で囲まれた部分の最初の2桁の数字(一部は一桁の数字の場合もあり)、をtempに出力する。(temp3、temp4を出力) (この処理を行わなくても可能かもしれませんが、ややこしいので、数字だけ出すようにしました) 最後に、file1とfile2の各行の数字を一行ずつ読み込んで、数値に一定以上の差がある行の情報だけ出力したいのですが、各行を順番に分析できる方法は、while文か、配列に読み込む方法しか知りません。 前者のwhile文では、ファイルオープンは、ひたつ以上は同時には取り扱えないという情報を得たので、使えない思っています。後者の配列に読み込む方法は、桁が大きいので、実用的ではないと感じています。 二つ以上のファイルの各行の特定の数値データを、一行ずつ順に比較して、差があるものだけ抽出するにはどのようなスクリプトを書けばよいのか、ご教授下さい。 いろいろ調べましたが、(僕の調べ方が悪いと思いますが)適切なコマンドや方法にたどり着けません。 試してみた方法 ファイルハンドルを二つ指定して、while文の条件中に、andで条件を二つ指定してファイルハンドルから読み込んでやればよいと思ったのですが、実行するとエラーになってしまいます。ググっていろいろ調べてみたところ、ファイルハンドルの二つ指定はできないとの記述を見つけたので、whileの条件に複数のファイルハンドルを記述するこの方法はあきらめて、ここで、ストップしています。 まわりに、perlを扱える方がいらっしゃれば質問に伺うのですが。もしよろしければ、簡単でもご教授いただけますと幸いです。宜しくお願い申し上げます。

  • perlで変換時に十申曾箪貼等がもじばけ

    データ管理の為perlで データの保存先のパスを \から/に変換させる事をしたいのですが、パスの途中、ファイル名に 十 申 曾 箪 貼 能 表 等の文字が入ると 文字が化けてしまいます。いろいろ調べて化ける理由は分ったのですが、やりたい事が出来ません。対応できる方法があれば教えてください。 文字コードはSHIFT-JISです 例:c:\申請表\能力検定\貼付け\十分.txt を c:/申請表/能力検定/貼付け/十分.txt に変換したいがどうしても以下の様になってしまう。 c:/・請・・力検定/・付け/・分.txt 

    • ベストアンサー
    • drdrdr
    • Perl
    • 回答数3
  • perlで指定範囲を複数ファイルに分割する方法は?

    お世話になります。 perlを使用して、 下記の元ファイル[infile.txt]よりstart~endの範囲を各テキストファイルに 分割出力する方法をご教授いただけないでしょうか。  ※出力ファイル名は元のファイル名 (infile) + 1行目の文字列(単語)にします。   例>>infile_1111.txt , infile_333.txt よろしくお願いいたします。 [infile.txt] aaaa bbbb start 1111 2222 end dddd eeee start 3333 4444 end

  • perlで指定範囲を複数ファイルに分割する方法は?

    お世話になります。 perlを使用して、 下記の元ファイル[infile.txt]よりstart~endの範囲を各テキストファイルに 分割出力する方法をご教授いただけないでしょうか。  ※出力ファイル名は元のファイル名 (infile) + 1行目の文字列(単語)にします。   例>>infile_1111.txt , infile_333.txt よろしくお願いいたします。 [infile.txt] aaaa bbbb start 1111 2222 end dddd eeee start 3333 4444 end

  • perlで指定範囲を複数ファイルに分割する方法は?

    お世話になります。 perlを使用して、 下記の元ファイル[infile.txt]よりstart~endの範囲を各テキストファイルに 分割出力する方法をご教授いただけないでしょうか。  ※出力ファイル名は元のファイル名 (infile) + 1行目の文字列(単語)にします。   例>>infile_1111.txt , infile_333.txt よろしくお願いいたします。 [infile.txt] aaaa bbbb start 1111 2222 end dddd eeee start 3333 4444 end

  • perlで指定範囲を複数ファイルに分割する方法は?

    お世話になります。 perlを使用して、 下記の元ファイル[infile.txt]よりstart~endの範囲を各テキストファイルに 分割出力する方法をご教授いただけないでしょうか。  ※出力ファイル名は元のファイル名 (infile) + 1行目の文字列(単語)にします。   例>>infile_1111.txt , infile_333.txt よろしくお願いいたします。 [infile.txt] aaaa bbbb start 1111 2222 end dddd eeee start 3333 4444 end

  • 一致する要素が格納されている添え字番号を返す

    例えばある配列内に @moji = (ak, df, gc); などという値でも文字でもが格納されていたとして、 $x = "ak"; といったある変数に格納されている値・文字(この場合はak)と一致する要素が配列@mojiに格納されていた場合に、その格納されている要素の添え字番号(配列の添え字番号)を返すような関数はないでしょうか? イメージとして $res = mch($x); とすると、0が返されて$resに格納されるというものです。 ちなみにRという言語では > a <- c("ljj", "B0", "op199") # 変数aに3つの文字列要素を代入する > res <- which(a == "op199") # which()は引数に指定された論理に一致する要素番号を返す > res # aについて,a == "op199"がTRUEとなるのは要素番号3であるから,3を返す [1] 3 というものがあるのですが、これと同じような関数が欲しいのです(泣)

    • ベストアンサー
    • backs
    • Perl
    • 回答数6
  • 半角カタカナ→全角カタカナ変換がうまくいきません。

    お世話になっております。 フォームから入力された文字を、 「半角カタカナ→全角カタカナ」変換したいのですがうまくいきません。 コーディングは以下の通りですが、問題の箇所がわかりません。 どなたかご教授ください。 なお、jcode.plは、最新のものを使っています。 #↓=============================================== ##### フォームデータ受け取り if ($ENV{'REQUEST_METHOD'} eq 'POST') {  read( STDIN , $buffer , $ENV{'CONTENT_LENGTH'} ); } else {  $buffer = $ENV{'QUERY_STRING'}; } # 文字コードを正確に取得するために,全ての送信データをいったん文字コードチェックする $buffer1 = $buffer; $buffer1 =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; $kcode = &jcode::getcode(*buffer1); @pairs = split(/&/ , $buffer); ##### フォームデータのデコード、漢字コードをsjisに変換 foreach $pair (@pairs) {  ($k,$v) = split(/=/,$pair);  $v =~ tr/+/ /;  $v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;  &jcode'convert(*v,"sjis",$kcode);  # 半角カナを全角に変換  if($kcode eq 'sjis') {   &jcode::h2z_sjis(\$v);  }  if($kcode eq 'euc') {   &jcode::h2z_euc(\$v);  }  if($kcode eq 'jis') {   &jcode::h2z_jis(\$v);  }  $in{$k} = $v; } #↑=============================================== (なお、全角スペースは、半角スペースなどに変更願います。) よろしくお願いします。

  • 半角カタカナ→全角カタカナ変換がうまくいきません。

    お世話になっております。 フォームから入力された文字を、 「半角カタカナ→全角カタカナ」変換したいのですがうまくいきません。 コーディングは以下の通りですが、問題の箇所がわかりません。 どなたかご教授ください。 なお、jcode.plは、最新のものを使っています。 #↓=============================================== ##### フォームデータ受け取り if ($ENV{'REQUEST_METHOD'} eq 'POST') {  read( STDIN , $buffer , $ENV{'CONTENT_LENGTH'} ); } else {  $buffer = $ENV{'QUERY_STRING'}; } # 文字コードを正確に取得するために,全ての送信データをいったん文字コードチェックする $buffer1 = $buffer; $buffer1 =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; $kcode = &jcode::getcode(*buffer1); @pairs = split(/&/ , $buffer); ##### フォームデータのデコード、漢字コードをsjisに変換 foreach $pair (@pairs) {  ($k,$v) = split(/=/,$pair);  $v =~ tr/+/ /;  $v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;  &jcode'convert(*v,"sjis",$kcode);  # 半角カナを全角に変換  if($kcode eq 'sjis') {   &jcode::h2z_sjis(\$v);  }  if($kcode eq 'euc') {   &jcode::h2z_euc(\$v);  }  if($kcode eq 'jis') {   &jcode::h2z_jis(\$v);  }  $in{$k} = $v; } #↑=============================================== (なお、全角スペースは、半角スペースなどに変更願います。) よろしくお願いします。

  • コメントアウト以外を置換対象とする正規表現について質問です。

    コメントアウト以外を置換対象とする正規表現について質問です。 以下の(1)の入力に対して(2)の結果を得たいのですが、 綺麗な正規表現を使って置換する方法を教えて下さい。 とりあえず複数回に分けて無理やり置換したのですが、 とても汚いコードになってしまいました。。。 (前提) ・コメントは/*...*/ と //... の2種類 ・コードは改行を含めて1変数に格納されている ・目的はコメントアウト以外の「abcde」を「aaaaa」に置換すること (1) ---------------------------------------------------- /* abcde fghij */ abcde fghij /* abcde fghij */ abcde fghij // abcde fghij abcde fghij /* abcde fghij */ abcde fghij /* abcde fghij */ ---------------------------------------------------- (2) ---------------------------------------------------- /* abcde fghij */ aaaaa fghij /* abcde fghij */ aaaaa fghij // abcde fghij abcde fghij /* abcde fghij */ aaaaa fghij /* abcde fghij */ ---------------------------------------------------- (考えた方法) ---------------------------------------------------- $st = "#START#"; $ed = "#END#"; s/\b(abcde)\b/${st}$1${ed}/sg; s/(\/\*.*?)${st}(.*?)${ed}(.*?\*\/)/$1$2$3/sg; while(s/(\/\/.*?)${st}(.*?)${ed}/$1$2/g){}; s/${st}abcde${ed}/aaaaa/sg; ---------------------------------------------------- ご回答よろしくお願いします。

    • ベストアンサー
    • async
    • Perl
    • 回答数3
  • ActivePerl,UTF-8環境のCGIにてブラウザからアップロー

    ActivePerl,UTF-8環境のCGIにてブラウザからアップロードしたファイルの保存に失敗する件について、原因と対処方法をお願いいたします。 以下の環境でCGIを作成していましたが、  WindowsXP  ApacheServer  ActivePerl 5.10系 先日HDDがクラッシュしましたので、Windowsの再インストールからはじめて同じ環境を構築し動作確認を行っていたところ、新しい環境ではファイルのアップロードに失敗することが判明しました。 ファイルのバイナリが壊れるようです。画像等バイナリファイルをアップロードすると、ファイルサイズが3割程度増えたものが保存され、壊れます。 今回変わったところと言えば、ActivePerlのバージョンが最新になったくらいです。 調べても原因が判明しなかったことに加え、  クラッシュ前の環境ではこのような問題はなかった  Linuxサーバでは問題ない ので、悩んでいます。 問題部分のソースはこのようになります。 use utf8; # 略 CGIモジュールを使用しています $fh = $q->upload(key); open (OUT, ">$directoryname$filename"); binmode (OUT); while(read($fh, $buffer, 1024)){ print OUT $buffer;} close (OUT); close ($fh); どこも間違っていないと思うのですが、どなたかこの問題を解決できる方はおられるでしょうか。

  • ActivePerl,UTF-8環境のCGIにてブラウザからアップロー

    ActivePerl,UTF-8環境のCGIにてブラウザからアップロードしたファイルの保存に失敗する件について、原因と対処方法をお願いいたします。 以下の環境でCGIを作成していましたが、  WindowsXP  ApacheServer  ActivePerl 5.10系 先日HDDがクラッシュしましたので、Windowsの再インストールからはじめて同じ環境を構築し動作確認を行っていたところ、新しい環境ではファイルのアップロードに失敗することが判明しました。 ファイルのバイナリが壊れるようです。画像等バイナリファイルをアップロードすると、ファイルサイズが3割程度増えたものが保存され、壊れます。 今回変わったところと言えば、ActivePerlのバージョンが最新になったくらいです。 調べても原因が判明しなかったことに加え、  クラッシュ前の環境ではこのような問題はなかった  Linuxサーバでは問題ない ので、悩んでいます。 問題部分のソースはこのようになります。 use utf8; # 略 CGIモジュールを使用しています $fh = $q->upload(key); open (OUT, ">$directoryname$filename"); binmode (OUT); while(read($fh, $buffer, 1024)){ print OUT $buffer;} close (OUT); close ($fh); どこも間違っていないと思うのですが、どなたかこの問題を解決できる方はおられるでしょうか。

  • 文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結

    文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結果? 下記コードのように「文字列に半角・全角スペースが入っているかをチェックする関数」を作りました。 $textに入る文字列に半角・全角のスペースが入っているかをチェックします。 -------------------------------------------- my $text = "東 京"; if( isSpace($text) ) {   print "スペースあり"; } else {   print "スペースなし"; } sub isSpace{   my $str = shift || return(undef);   if( $str =~ /.*[\s ]+.*/ ){     return(1);   }else{     return(0);   } } -------------------------------------------- しかしなぜか1行目を my $text = "メ"; とするとスペースが入っているという結果になってしまいます。 なぜ「メ」が入ると半角もしくは全角のスペースとみなされてしまうのでしょうか? また、どうすれば正しくチェックできるようになりますか? よろしくお願いします。

    • ベストアンサー
    • suffre
    • Perl
    • 回答数4
  • XMLから行列を作成し、テキストに出力しようとしています。

    XMLから行列を作成し、テキストに出力しようとしています。 XMLには複数人がそれぞれ好む色が書かれています。 それをもとに、以下のような行列を作りたいと考えています。 Perlのプログラムのコードを教えてください。よろしくおねがいします。 --------XML------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <person_list> <person id="1001"> <keywords><keyword>赤</keyword><keyword>青</keyword></keywords> </person> <person id="1002"> <keywords><keyword>赤</keyword><keyword>黄</keyword></keywords> </person> <person id="1003"> <keywords><keyword>黄</keyword></keywords> </person> </person_list> ------------------------------------------------------------------ --------テキスト------------- 1001 1002 1003 赤 1 1 0 青 1 0 0 黄 0 1 1 -----------------------------

    • ベストアンサー
    • riyoooh
    • Perl
    • 回答数2
  • XMLから行列を作成し、テキストに出力しようとしています。

    XMLから行列を作成し、テキストに出力しようとしています。 XMLには複数人がそれぞれ好む色が書かれています。 それをもとに、以下のような行列を作りたいと考えています。 Perlのプログラムのコードを教えてください。よろしくおねがいします。 --------XML------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <person_list> <person id="1001"> <keywords><keyword>赤</keyword><keyword>青</keyword></keywords> </person> <person id="1002"> <keywords><keyword>赤</keyword><keyword>黄</keyword></keywords> </person> <person id="1003"> <keywords><keyword>黄</keyword></keywords> </person> </person_list> ------------------------------------------------------------------ --------テキスト------------- 1001 1002 1003 赤 1 1 0 青 1 0 0 黄 0 1 1 -----------------------------

    • ベストアンサー
    • riyoooh
    • Perl
    • 回答数2
  • データの日付でソートをしたい

    データの日付でソートをしたい データの日付でソートをしたいと思ってますが、うまくいっていません。 $kuchikm2の内容 1,8,,説明文,2010/07/06-01:27,1,,,,,,, 2,8,,紹介文,2010/07/18-02:27,1,,,,,,, 3,8,,コメント,2010/05/19-03:27,1,,,,,,, 4,8,,文言,2010/06/20-04:27,1,,,,,,, ソートした結果@sorted 2,8,,紹介文,2010/07/18-02:27,1,,,,,,, 1,8,,説明文,2010/07/06-01:27,1,,,,,,, 4,8,,文言,2010/06/20-04:27,1,,,,,,, 3,8,,コメント,2010/05/19-03:27,1,,,,,,, (perlソース) 略 #sortロジック use warnings; my @lines = $kuchikm2; print @lines, " a\n"; my @sorted = map { $_->[4] } sort { $a->[0] <=> $b->[0]} map { [(split q{,}, $_)[4], $_] } @lines; print @sorted, " b\n"; (ここまで) 以前ソートで質問したときに、数字でないといけないと言われたような気がしています。 お手数かけます。 よろしくお願いいたします。

    • ベストアンサー
    • hihin2003
    • Perl
    • 回答数2