回答数
気になる
-
制御文字を含む文字列をフォームから受け取っての変換
最近Perlを勉強し始めたのですが、正規表現の扱いに困っています、よろしくお願いします。 rog.txt <usr1> ~~ (usr2) ~~ usr3 > ~~ <usr1> ~~ usr3 > ~~ というようなテキストの、ユーザー表示部分(ユーザー名の囲い方はcgi側からは指定できない)を、利用者がhtml上のフォームから 「<usr1> 」は「○○」に 「(usr2) 」は「××」に... というように指定して一気に変換するcgiを作っています。 ユーザー名部分だけを配列に溜めて、フォームを表示して、変換指定を受け取るところまではできたのですが 最後の変換の部分で上手くいかなくて困っています。 @oldRog には上記のテキストを読み込んで1行ごとに代入 @tmpOldName にはフォームから受け取った古い名前を代入 @tmpNewName にはフォームから受け取った新しい名前を代入してあります $i = 0; foreach(@oldRog){ $j = 0; $tmp = $_; foreach(@tmpOldName){ $tmp =~ s/^$tmpOldName[$j]/$tmpNewName[$j] /; $j = $j + 1; } $rog[$i] = $tmp; $i = $i + 1; } 実行してみるとユーザー名を囲う印に"("などが使用されているとその名前が全て変換されません おそらく正規表現上で意味のある"("と解釈されているのだろうと考え エスケープさせるために"\"を使おうと思ったのですが、 $tmp =~ s/^\$tmpOldName[$j]/$tmpNewName[$j] /; としてみてもうまくいきませんでした。 先にテキストファイルのほうで半角(から全角(に変換する等して回避はできたのですが できれば変換の部分だけで処理したく思っています よろしくお願いします *タブが消えてしまっていたので上げ直しました、ここの使い方にまだ慣れておらず申し訳ありません
質問日時: 2011/07/29 16:50 質問者: WatchGoo
ベストアンサー
1
0
-
perlによるデータのくっつけ方法の効率化
2種類のファイルがあり、これを下記のルールによりくっつけたいと考えています。 データ数の多さから ファイル1のデータを1行ずつみていき、ファイル2に条件に等しいものがないか確認して書き出しをするというやり方では、 時間がかかってしまい、効率よい書き方を教えていただきたいのです。 ファイル1:100万行 カラム1<タブ>カラム2<タブ>カラム3<タブ>カラム4 各カラムは可変長の値(各カラム、行重複値あり) 例 AAA<タブ>BB<タブ>CC<タブ>DDDD AAA<タブ>BBB<タブ>CC<タブ>DD XX<タブ>BB<タブ>YYY<タブ>Z ・・・ ファイル2:10万行 カラム5<タブ>カラム6<タブ>カラム7 各カラムは可変長の値(各カラム重複値あり、カラム5とカラム7のセットで一意データ) 例 BB<タブ>EEE<タブ>RRR BB<タブ>EEE<タブ>SS BB<タブ>FF<タブ>TTTT W<タブ>EEE<タブ>TTTT ・・・ 条件: カラム2=カラム5のとき、 結果: カラム1<タブ>カラム2<タブ>カラム3<タブ>カラム4<タブ>カラム6<タブ>カラム7 というものを出力させる 例 カラム2(BB)=カラム5(BB) AAA<タブ>BB<タブ>CC<タブ>DDDD<タブ>EEE<タブ>RRR AAA<タブ>BB<タブ>CC<タブ>DDDD<タブ>EEE<タブ>SS AAA<タブ>BB<タブ>CC<タブ>DDDD<タブ>FF<タブ>TTTT ・・・ ※カラム2(BB)=カラム5(BB)のとき、ファイル2のカラム5にBB存在する行分 ファイル1の内容がカラム6、7を追加し増えていくようにしたいのです。 よいプログラムを教えてください。
質問日時: 2011/07/29 10:31 質問者: 1204533
ベストアンサー
2
0
-
perlについて
my @a = qw(a b c); my @b = ( qw(e f g) ); これの違いは何なのでしょうか? perlにおいて()で囲むのはリストとして扱うということなのでしょうが、いまいちよく分かりません。 教えてください
質問日時: 2011/07/28 16:20 質問者: yamada11
ベストアンサー
4
0
-
perlで超素朴な質問
超初心者です。 辞書から不必要な文字を消そうをしていますが、はじめのファイルを読み出すから 行き詰っています。 下が使いたい辞書データです。 ------------ word,trans,exp,level,memory,modify,pron,filelink "さまざまな理由から [さまざまなりゆうから]","(exp) for various reasons","",0,0,0,"" "さめざめ","(adv) sorrowfully/anguishedly","",0,0,0,"" "さもしい","(adj) selfish/self-seeking/self-interested/mean","",0,0,0,"" "さようならホームラン","(n) game-ending home run (baseball)","",0,0,0,"" "さよならホームラン","(n) game-ending home run (baseball)","",0,0,0,"" "さらけ出す [さらけだす]","(v5s) to expose/to disclose/to lay bare/to confess","",0,0,0,"" "さらさら","(adj-na,adv,n,vs) (1) rustling/murmuring/(2) fluently/(3) silky (hair)/(P)","",0,0,0,"" "さらば","(conj,int) farewell","",0,0,0,"" "さん","(suf) Mr or Mrs/(P)","",0,0,0,"" "さーたーあんだぎー","(n) type of Okinawan doughnut (donut)","",0,0,0,"" "さ来週 [さらいしゅう]","(n-adv,n-t) week after next","",0,0,0,"" "さ迷う [さまよう]","(v5u) to loiter/to putter/to prowl/to wander about/to roam about/to knock around","",0,0,0,"" "ざあざあ","(adv) sound of rushing water/sound of pouring rain/white noise sound/(P)","",0,0,0,"" "ざあっ","(n) (onom) sound of water","",0,0,0,"" "ざくざく","(adj-na,adv) lots of coins or jewels/cutting up roughly/mixing gravel/walking on frost","",0,0,0,"" "ざけんなよ","(exp) (X) (vulg) fuck you!/""don't fuck around""/""don't be a screw off""","",0,0,0,"" "ざっくざっく","(adv) crunch crunch/thud thud/tramp tramp","",0,0,0,"" "ざっくばらん","(adj-na,n) frankness","",0,0,0,"" "ざっと","(adv) roughly/in round numbers/(P)","",0,0,0,"" "ざぶんと","(adv) with a splash","",0,0,0,"" ------------------ そして組んだのがこれです。 use encoding "cp932"; $/ = "\r\n"; open(DIC, "+> DicData.csv") or die("Error:$!"); while(<DIC>){ $data = $_; } if($a =~ /"/){ $a =~ s/"//g; } close(DIC); ----------- お恥ずかしい限りです。 なにとぞよろしくお願いします。
質問日時: 2011/07/28 12:20 質問者: neo_j
解決済
4
0
-
perl xml解析について
perl初心者です。 以下のxmlデータの「http://www.google.co.jp」をxml解析して値を取得したいのですが、 どのようなプログラムを記述すればよろしいのでしょうか? <?xml version="1.0" encoding="x-sjis-cp932" ?> <Res_result> <result result="1" /> <result redirect="http://www.google.co.jp" /> </Res_result> いろいろ試してみましたが、どうもうまくいきません。 ちなみにサーバーにインストールされているxml関連のモジュールが XML::Simple XML::Parser となります。 ご教授の方、宜しくお願い致します。
質問日時: 2011/07/25 00:56 質問者: mojabass
ベストアンサー
1
0
-
textareaの内容が一部の携帯で無効に
以下のように記述して投稿フォームを作っています。 <form action="******.cgi" method="post" enctype="" > <input type="hidden" name="mode" value="prev"> <input type="hidden" name="name" value=""> ・ ・ ・ <textarea cols="55" rows="8" name="CONTENTS"></textarea> <input type="submit" value="送信" class="btn"> </form> なぜか一部の携帯で<textarea>内の文字列が送信されません。 name属性が大文字なのが原因でしょうか? formのenctype属性が空欄だからでしょうか。 ちなみに問題を確認した端末はAUの京セラK002です。
質問日時: 2011/07/18 22:48 質問者: sunawachi2
解決済
1
0
-
サブルーチンやif分以外での中括弧
perlについて学習中で、現在フリーのスクリプトを見て勉強しております。 中括弧の使い方を教えて欲しいです。 sub test { print"OK"; } if ($test>1) { print"OK"; }else{ print"NG";} 上記のようにサブルーチンやif文での使い方は分かるのですが、フリーのスクリプトの中に単に中括弧を使用している部分がありました。 例) { ←この括弧 my(@new); for(0..3){if($tmp[$_]=~/jpg/){push(@new,$tmp[$_]);}} } 矢印の部分の部分の括弧ですが、これはどのような意味があるのでしょうか? よろしくお願いします。
質問日時: 2011/07/15 01:12 質問者: hana43
ベストアンサー
2
0
-
AUTOLOADサブルーチンが実行される条件?
Perlのコードを動かしながら勉強していて、ふと納得いかない点があったので教えてください。 次のコードを実行すると'0'と表示されます。 Cls->new; package Cls; sub new {bless([])} sub AUTOLOAD {print(0)} つまりAUTOLOADサブルーチンが実行されているようです。 しかし私のコードの中ではAUTOLOADサブルーチンの定義はしているものの、どこからも呼び出していません。 このコードは何も行わずに終了するはずなのですが、そうではありませんでした。 AUTOLOADサブルーチンは、いつ、どこで、何者によって呼び出されるのでしょうか。
質問日時: 2011/07/12 00:33 質問者: zyousuke
ベストアンサー
4
0
-
下のCookieの質問に関しまして補足です その2
さらに調べていたのですが、どうやら登録されているURLのデータに「=」が含まれていると 上手くいかないことが解りました。 以下のスクリプトで保存及び抽出データに「=」が含まれていても上手く処理する方法は無いでしょうか。 #***************************************************************************** sub plink{ #パーソナルリンク &error("現在、パーソ\ナルリンクは使用出来ません。") if !($personallink); my ($a1,$a2,$a3,%temphash); for $a1(split(/; */,$ENV{'HTTP_COOKIE'})){ ($a2,$a3) = split(/=/,$a1); $a3 =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; if ($a2 eq 'plink_list'){ foreach(split(/<>/,$a3)){ $temphash{$_}=1; } last; } } &filelock("linkdata"); open (IN,"$linkdata"); while(<IN>){ if ($temphash{(split(/<>/,$_))[15]}){ $totalct++; push(@site,$_) if ($totalct >= $startnum) && ($totalct <= $endnum); } } close (IN); &fileunlock("linkdata"); $endnum = $totalct if $totalct < $endnum; $startnum = 0 if $totalct == 0; $action = "パーソ\ナルリンク"; &searchbar("","<option value=\"\" selected>$searchtitle\n"); &databar(); if ($totalct != 0){ $resultmessage = "$totalct件のリンクが登録されています。<br /><br />"; &linkbar("act=$act&line=$line&indi=$indi"); &siteindicate("",@site); }else{ $resultmessage = "登録が無いか、クッキーが有効になっていません。<br /><br />"; $linkbar = $siteindicate = ""; } &html_output; } #***************************************************************************** sub plink_add{ #パーソナルリンク追加 &error("現在、パーソ\ナルリンクは使用出来ません。") if !($personallink); &get_cookie; $plink_list.=$url."<>" if $plink_list !~ /\Q$url\E/; &set_cookie; &searchbar("","<option value=\"\" selected>$searchtitle\n"); $linkbar = $siteindicate = ""; $action = "パーソ\ナルリンク追加"; $resultmessage = "<b>".&sitename_get."</b> をパーソ\ナルリンクに追加しました。<br />"; &html_output; } #***************************************************************************** sub get_cookie{ #クッキー取得 my ($a1,$a2,$a3); for $a1(split(/; */,$ENV{'HTTP_COOKIE'})){ ($a2,$a3) = split(/=/,$a1); $a3 =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; if ($a2 eq 'plink_list'){ $plink_list = $a3; last; } } } #****************************************************************************** sub set_cookie{ #クッキー設定 $plist_link =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; print "Set-Cookie:plink_list=$plink_list; expires=Thu, 1-Jan-2030 00:00:00 GMT;\n"; } #**************************************************************************** 宜しくお願い致します。
質問日時: 2011/07/10 00:17 質問者: das_horn
解決済
1
0
-
perlを学べる良いサイト
プログラム自体初心者です。というかほぼ知識ゼロです。 次の会社では perl (sledge) で開発をすることになっていて、入社までの間勉強したいと思います。 一番いい覚え方としては、どっかのアプリのコードを読むことだと思っているので、 そういったオープンソース的なの紹介しているサイトってありますか? moongift以外で・・・。 ちなみに、linux サーバエンジニアとして、3年の経験があります。
質問日時: 2011/07/09 19:18 質問者: okuasu
ベストアンサー
3
0
-
Perlで文字列から指定箇所を抽出したい
Perlで質問です。 「<div class="testclass"> <a href="test.php?filename=1600176008&s2=1307521989&s3=&p=1"><img src="test.jpg"></a>」 上記のデータのリンクのURL「test.php?~~」の部分を抽出したいです。 split("href=\"",$data); みたいな感じで前と後ろをsplit関数で消せば取り出せると思ったのですが、他に良い方法はありますか?
質問日時: 2011/07/08 12:26 質問者: xkuonx
ベストアンサー
2
0
-
フォームでの、巨大ファイルデータのアップロード
form input type="file" を使ってファイルデータをアップロードし、perl の標準入力からデータを取得します。 この時、約30メガくらいまでなら正常に取得可能ですが、それ以上になると、CGI側でエラーが出ます。このことについてサーバー業者に問合せをしたところ、 「CGIの動作時間が長くかかる場合、該当のスクリプトの動作が負荷軽減のため、仕様により中断される場合がございます。」という解答でした。 大きなファイルを転送する方法が不明です。 どなたかご回答をお願いできますでしょうか。 宜しくお願い致します。
質問日時: 2011/07/07 22:52 質問者: zazbzc
解決済
1
0
-
windows環境でのperlのパス
以下の環境で開発をしています。 OS: windows XP ActivePerl 5.8.8 apache 2.0.64 レンタルサーバで利用しやすいようにperlスクリプトの第1行目に #!/usr/bin/perl を記述していますが、ActivePerl のありどころが C:\dev\perl\bin\なので第1行目を #!/dev/perl/bin/perl にしなければなりません。 #!/usr/bin/perlの記述をそのまま使う為に巷でよく言われているようなwindowsのジャンクション機能を利用しています。 Cドライブ直下に「usr」ホルダを作り、ここにC:\dev\perl\bin\のジャンクションを設定しました。 するとC:\usr\を覗くとbin\が存在します。つまりC:\dev\perl\bin\はC:\usr\bin\でアクセスできるようになります。 しかしこの状態で#!/usr/bin/perlの記述をそのまま使うと500エラーが出ます。 これ以外に何か良い方法はございませんでしょうか? また同じような開発環境の皆様はperlスクリプトの第1行目をどのように対策されていますでしょうか? 宜しく御教授お願いいたします。
質問日時: 2011/07/07 20:28 質問者: osama_vin_ladin
ベストアンサー
3
0
-
テキストデータから指定した1行を抜き出して表示
perl初心者です。 説明不足の箇所もあるかと思いますが、よろしくお願いします。 テキストデータから指定した1行を抜き出して表示するのにはどうしたらいいんでしょうか。 data.txtの中に=で区切られた文字が入っているとします。 1=にんじん=150 2=じゃがいも=200 3=たまねぎ=100 左から$s_no,$s_name,$s_priceという変数になっています。 これを print <<"EOF"; <TABLE class="list_index"> EOF open(IN,"../indata/sdeta.txt"); @data = <IN>; close(IN); foreach $sdata (@data){ chop($sdata); ($s_no,$s_name,$s_price) = split (/=/, $sdata); print <<"EOF"; <TR> <TD class="list2">$s_no</TD> <TD class="list3">$s_name</TD> <TD class="list4">$s_price円</TD> <TR> EOF } print <<"EOF"; </TABLE> EOF という感じでテーブルにデータを全て一覧表示させました。 ここから、$s_noで表示されている「1」「2」「3」をクリックすると、 別ページにとんで、クリックした番号の1行を編集用のフォームに表示させたいです。 フォームに表示させる方法はわかっているんですが、 クリックで指定した1行だけを表示する方法がわからずに困っています。 よろしくお願い致します。
質問日時: 2011/07/04 16:38 質問者: kari729
ベストアンサー
4
0
-
perlで文書を読み込み検索置換したい
MAC OS Xを使用しています。 検索置換のプログラムをperで作成し、Applescript上で呼び出したいのです。 実際はファイルメーカーのスクリプトの中でApplescriptを記述してその中で呼び出したいのです。 do shell script "perl ~.pl"という感じで使えるのではないかと 下記のようなサンプルスクリプトを見つけたのですが 内容の更新の仕方がよく分かりません。 perlについては全くの初心者でいろいろ調べたのですがよく理解できませんでした。 検索置換したいのですが、どういうふうに書けばいいのでしょうか。 (2)の部分を教えて下さい。宜しくお願いします。 use strict; use warnings; use File::Copy 'move'; # (1) ファイルの内容を読み込む my $file = 'F:\共有\PERL\test.txt'; open my $fh, '<', $file or die qq/Can't open file "$file": $!/; my $content = do {local $/; <$fh>}; close $fh; # (2) 内容の更新 ▼をリターンに置き換えたいのです。 $line =~s/▼/\n/; # (3) 一時ファイルへの書き出し my $temp_file = "$file.$$." . int(rand 10000); open my $temp_fh, '>', $temp_file or die qq/Can't open file "$file": $!/; print $temp_fh $content; close $temp_fh or die qq/Can't open file "$file": $!/; # (4) 一時ファイル名を元のファイル名に変更 move $temp_file, $file or die qq/Can't move "$temp_file" to "$file": $!/;
質問日時: 2011/06/29 11:37 質問者: ADJUSTLIGHT
解決済
1
0
-
UTF8コードでのメール送信
現在、以下の内容でメールサーバおよびシステムを運用してます。 レンタルサーバを以下の内容で OS:FreeBsd DB:postgresql (eucコードで運用) PG:perl5.8.8 (eucコードで記述) 最近、当システムから携帯電話(スマートフォン含む)へのメール送信で受信側(携帯)で文字化けが多くなっている。それで、システムの一部のUTF8化しようと思いました。それで、メール送信のライブラリを以下のように修正してみたが、本文が文字化けしてしまいます。なぜ文字するか原因がわかりません。 以下のソースはUTF8Nで記述しています。 ※システム全部をUTF8コード化やDB(POSTGRESQL)もUTF8にする案もありますが、 改修作業が大きくて作業時間が少ない方法も模索しています。 どなたかご教授願います。 binmode(STDOUT, ":utf8"); use Encode; use Encode qw(from_to); use MIME::Base64; use MIME::Entity; use Net::SMTP; use MIME::Words qw (:all); sub sendmail() { my ($mail_date) = @_; <==メールのハッシュ配列(DBに登録されているメールの件名、本文) my $smtp_server = $mail_date->{SMTPsrv}; my $smtp_port = '25'; # 送信者のメールアドレスを設定する。 my $mail_from = $mail_date->{MailFr}; # 宛先のメールアドレスを設定する。 my $mail_to = $mail_date->{MailTo}; # メールの件名を設定する。 from_to($mail_date->{Subjct},"euc-jp","utf8"); #UTF8に変換 $utf8_str_sub = $mail_date->{Subjct}; # メールの内容を設定する。 my $message; my $utf8_str; from_to($mail_date->{Message},"euc-jp","utf8"); #UTF8に変換 $message = $mail_date->{Message}; $utf8_str = $message; # メールヘッダを作成する。 # from、to、件名共にMIME-Header(UTF-8)へエンコードします。 my $mail_header; $mail_header = "From: " .encode('MIME-Header-ISO_2022_JP',$mail_from)."\n"; $mail_header .= "To: " .encode('MIME-Header-ISO_2022_JP',$mail_to) ."\n"; $mail_header .= "Subject: ".encode('MIME-Header-ISO_2022_JP',$utf8_str_sub) ."\n"; # UTF-8とbase64 encodeを使う事を明記します。 $mail_header .= "MIME-Version: 1.0\n"; $mail_header .= "Content-type: text/plain; charset=utf-8\n"; $mail_header .= "Content-Transfer-Encoding: base64\n"; $mail_header .= "\n"; # SMTPでメールを送る。 my $SMTP = Net::SMTP->new($smtp_server,Port=>$smtp_port); $SMTP->mail($mail_from); $SMTP->to($mail_to); $SMTP->data(); $SMTP->datasend($mail_header); $SMTP->datasend(encode_base64(encode('utf8', $utf8_str))); $SMTP->dataend(); $SMTP->quit; }
質問日時: 2011/06/28 17:43 質問者: parkpress
解決済
2
0
-
:shared って何
my $packetcount : shared = 0; にある :shared は何でしょうか。 our $packetcount = 0; とおなじでしょうか。 また :shared 以外にもこういった使い方をするものはあるのでしょうか。
質問日時: 2011/06/27 20:25 質問者: t-okura
ベストアンサー
1
0
-
起動時に出るアダルト画面の消し方
起動時に出てくる、アダルト画面が消えません。 スタートアップを全部無効にしても、【C:\WINDOWS\system32\ezsp_PX.exe】というものだけ、無効になりません。
質問日時: 2011/06/26 18:37 質問者: takashi-5897
解決済
2
0
-
特殊ファイルハンドルの_(下線)はどうやって使うか
グローバルな特殊ファイルハンドル_(下線)について、プログラミングPerlでは、 最後に実行したstat、lstat、ファイルテスト演算子の情報をキャッシュするのに用いる特殊ファイルハンドル と説明してあります。 これを試すために、 -f('file'); print(<_>) このコードを実行すると、 readline() on unopened filehandle _ となってしまいます。 特殊ファイルハンドル_(下線)はどうやって使うのでしょうか
質問日時: 2011/06/25 18:15 質問者: zyousuke
ベストアンサー
2
0
-
perlの構文がおかしいようです。
構文は以下の通りです。IF文のところがおかしいようですが、どこに間違いがあるのか教えていただけないでしょうか。 sub ippack { my ($a, $b, $c, $d) = @_; return ($a << 24) | ($b << 16) | ($c << 8) | $d; } sub ipunpack() { my ($n) = @_; return (($n>>24)&0xFF,($n>>16)&0xFF,($n>>8)&0xFF,$n&0xFF); } open (IN,"<useIP.txt") while(my $input = <IN>) { if ($input =~ /([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+) ([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/){; my $n = &ippack($1,$2,$3,$4); my $m = &ippack($5,$6,$7,$8); $n = $n & $m; $m = ~$m & 0xFFFFFFFF; for(my $i = 0; $i <= $m; $i++) { print join(".", &ipunpack($n+$i))."\n "; } } if-else($input =~ /([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/);{ print "$input\n"; } print "\n"; }
質問日時: 2011/06/24 19:36 質問者: yasaiumaiumai
ベストアンサー
1
0
-
PerlでIPアドレスとサブネットマスクから計算
Perlを使用してIPアドレスとサブネットマスクから範囲内にあるIPアドレスを展開できるようにしたいです。 【例】 192.168.1.0 255.255.255.0の場合 ↓↓ 192.168.1.0 192.168.1.1 192.168.1.2 ・ ・ ・ 192.168.1.253 192.168.1.254 192.168.1.255 のような感じに展開できるようなものを作成したいと考えております。(サブネットマスクは様々です。) 何卒宜しくお願い致します。 なお、展開したいIPアドレス帯は1000個以上あります。ひとつのテキストファイルに一行にひとつのセットで記入されています。 【展開したいテキストファイル】 192.168.1.0 255.255.255.0 10.1.1.128 255.255.255.128 ・ ・ ・ 172.16.10.192 255.255.255.192 のように記入されています。 宜しくお願い致します。
質問日時: 2011/06/23 21:07 質問者: yasaiumaiumai
解決済
2
0
-
perlでファイルを分割してファイル名も出力したい
>AA A AAA aaaaaaaaaaaaaaa aaaaaaaaaaaa >BBB BB B bbbbbbbbbbbbbbb bbbbbbbbbbbbbbb bbbbbbbbbbbbbb ・ ・ こういった形式でテキストが入った大きいサイズのひとつのファイルを ・ファイル名 AA A AAA ・テキスト内 >AA A AAA aaaaaaaaaaaaaaa aaaaaaaaaaaa ・ファイル名 BBB BB B ・テキスト内 >BBB BB B bbbbbbbbbbbbbbb bbbbbbbbbbbbbbb bbbbbbbbbbbbbb となるように個別に出力させたいのですがどのようにすればよいでしょうか? #!/usr/bin/perl -w use strict; my $first; my $file; $first = 1; open(IN,"分割前ファイル"); foreach(<IN>) { if ( /^>(.*)/ ) { if ($first == 0 ) { close(OUT); } else {$first = 0; } $file = $1; $file =~ s/[\r\n]//; open(OUT,">$file"); } else { print OUT $1; print OUT $_; } } close(IN); このようなプログラムを組んだのですが、出力結果はファイル名についてはいいのですが、テキスト内が思ったようにいきません。 ・ファイル名 AA A AAA ・テキスト内 AA A AAAaaaaaaaaaaaaaaa AA A AAAaaaaaaaaaaaa このような結果になってしまいます。 どなたか対処方をわかるかたがいましたらお願いします。
質問日時: 2011/06/23 15:20 質問者: student1998
ベストアンサー
1
0
-
データ件数が多くなってもエラーにならない方法
perlで、URLからサイトが表示されるかを確認するプログラムを作成しました。 ただ現在の方法だと、チェックするデータ件数が多くなるとエラーとなってしまいます。 現在のソース (ここから) open(DB,"$memfile") || &error("Open Error : $memfile"); flock DB, 2; @lines = <DB>; close(DB); @new=(); foreach $line (@lines) { $flag=0; ($num,$url,$title) = split("<>", $line); &url_ckeck("$url"); $data = "$num<>$url<>$title\n"; $data =~ s/\n<>/<>/g; $data =~ s/\r\n<>/<>/g; $data =~ s/\r<>/<>/g; push(@new,$data); } open OUT, "> $memfile"; print OUT @new; close OUT; (ここまで) この方法だと300件を超えると「ページが表示出来ない」エラーがでてしまうので、 チェックの方法を小分けしてエラー回避できないかを考えているのですが、とのようにすれば良いのかがわからず先に進められなくなってしまいました。 プログラムも見よう見真似で作成しているのでおかしな箇所が多々あるかと思いますが、助けていただけないかと思い書き込みました。 「$line (@lines)」を「$start .. $end」として件数を小分けにしてボタンを表示させてクリックして進められるようにしてみたらとも思いましたが データがうまく更新出来ずにいます。 不明点はご指摘ください。 よろしくお願いいたします。
質問日時: 2011/06/23 04:36 質問者: hihin2003
ベストアンサー
1
0
-
perlを使用しての特定行抽出について
何万行も書いてあるテキストファイルがあります。抽出したい文字列の一覧がテキストファイルにまとめられています(文字列は約1000個)。抽出したい文字列は一行にひとつづつ書かれています。何万行も書いてあるテキストファイルから抽出したい文字列と二つ合致したらその行を抽出したいです。ここで、注意していただきたいのが、抽出したい文字列一覧から二つの文字列にヒットした行を抽出したいです。宜しくお願い致します。 何万行も書いてあるテキストファイル aaaaa abc edi bb aert kkkkkkkkkk lllllll ddddd aaaaa anhi kkk ・・・・・・・・ ・・・・・・・・ 抽出したい文字列一覧のテキストファイル aaaaa bbbbb ddddd iiiiiiiii eeeee ・・・・・ ・・・・・
質問日時: 2011/06/22 15:49 質問者: yasaiumaiumai
ベストアンサー
4
0
-
文字化け対策
sjisで保存されたファイルを読み込んで、別ファイルに書込みを行ったところ、能等の文字が文字化けを起こしました。 open(IN,"$file"); my $data = <IN>; close(IN); $data=~s/\\//g; open(OUT,">$file2"); print OUT $data; close(OUT); 莫大なソース量だったので、原因を探すのに時間がかかりましたが、一つ一つ消去しながら探したところ、 $data=~s/\\//g; これを消すことで解消しました。 文字化けさせずに\を消すにはどのように書けばいいのでしょうか?
質問日時: 2011/06/21 15:58 質問者: TPR_SET
ベストアンサー
1
0
-
ACLから特定のIPアドレス帯がある行のみ抽出
何万行もあるACLがあり、使用されていないIPが半分近く混ざっています。、使用中のIPアドレス帯(約1000個)が分かっています。その使用中のIPアドレス帯がソースとデストの両方に入っている行のみ抽出したいです。 抽出するためのツール(perl)を作成していますが、なかなか思いつきません。perlかマクロなどで良い方法がありましたら、ご教授いただけると幸いです。何卒宜しくお願い致します。
質問日時: 2011/06/21 10:33 質問者: yasaiumaiumai
ベストアンサー
2
0
-
BBCode削除&改行をサニタイジングBBCode
read.cgi #------------------------------------------------- # BBCode(特定の文字列をHTMLタグに変換) #------------------------------------------------- sub bbcodecnv { my $str = shift; $str =~ s/\[b\](.*?)\[\/b\]/<b>$1<\/b>/ig; $str =~ s/\[i\](.*?)\[\/i\]/<i>$1<\/i>/ig; $str =~ s/\[u\](.*?)\[\/u\]/<span style=\"text-decoration:underline\">$1<\/span>/ig; $str =~ s/\[s\](.*?)\[\/s\]/<span style=\"text-decoration:line-through\">$1<\/span>/ig; $str =~ s/\[code\](.*?)\[\/code\]/<code>$1<\/code>/ig; $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/<a href=\"$1\" target=\"$target\" rel=\"nofollow\">$2<\/a>/ig; $str =~ s/\[color=(\#[0-9A-F]{6}|[A-Z]+)\](.*?)\[\/color\]/<span style=\"color:$1\">$2<\/span>/ig; $str =~ s/\[list=1\](.*?)\[\/list\]/<ol style="list-style-type: decimal">$1<\/ol>/g; $str =~ s/\[list=A\](.*?)\[\/list\]/<ol style="list-style-type: upper-alpha">$1<\/ol>/g; $str =~ s/\[list=a\](.*?)\[\/list\]/<ol style="list-style-type: lower-alpha">$1<\/ol>/g; $str =~ s/\[list=I\](.*?)\[\/list\]/<ol style="list-style-type: upper-roman">$1<\/ol>/g; $str =~ s/\[list=i\](.*?)\[\/list\]/<ol style="list-style-type: lower-roman">$1<\/ol>/g; $str =~ s/\[list\](.*?)\[\/list\]/<ul style="list-style-type: disc">$1<\/ul>/ig; $str =~ s/\[\*\]/<li>/ig; return $str; } #------------------------------------------------- # BBCode削除 #------------------------------------------------- sub bbcodedel { my $str = shift; $str =~ s/\[b\](.*?)\[\/b\]/$1/ig; $str =~ s/\[i\](.*?)\[\/i\]/$1/ig; $str =~ s/\[u\](.*?)\[\/u\]/$1/ig; $str =~ s/\[s\](.*?)\[\/s\]/$1/ig; $str =~ s/\[code\](.*?)\[\/code\]/$1/ig; $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/$1/ig; $str =~ s/\[color=(\#[0-9A-F]{6}|[A-Z]+)\](.*?)\[\/color\]/$2/ig; $str =~ s/\[list=1\](.*?)\[\/list\]/$1/g; $str =~ s/\[list=A\](.*?)\[\/list\]/$1/g; $str =~ s/\[list=a\](.*?)\[\/list\]/$1/g; $str =~ s/\[list=I\](.*?)\[\/list\]/$1/g; $str =~ s/\[list=i\](.*?)\[\/list\]/$1/g; $str =~ s/\[list\](.*?)\[\/list\]/$1/ig; $str =~ s/\[\*\]/ig; return $str; } patio.cgi # 改行をサニタイジング・BBCode削除 $com =~ s/<br>/<br \/>/g; $com =~ s/\[b\](.*?)\[\/b\]/$1/ig; $com =~ s/\[i\](.*?)\[\/i\]/$1/ig; $com =~ s/\[u\](.*?)\[\/u\]/$1/ig; $com =~ s/\[s\](.*?)\[\/s\]/$1/ig; $com =~ s/\[code\](.*?)\[\/code\]/$1/ig; $com =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/$1/ig; $com =~ s/\[color=(\#[0-9A-F]{6}|[A-Z]+)\](.*?)\[\/color\]/$2/ig; $com =~ s/\[list=1\](.*?)\[\/list\]/$1/g; $com =~ s/\[list=A\](.*?)\[\/list\]/$1/g; $com =~ s/\[list=a\](.*?)\[\/list\]/$1/g; $com =~ s/\[list=I\](.*?)\[\/list\]/$1/g; $com =~ s/\[list=i\](.*?)\[\/list\]/$1/g; $com =~ s/\[list\](.*?)\[\/list\]/$1/ig; $com =~ s/\[\*\]/ig; エラーが出てしまいます。 どこがどう間違っていますか?? ※BBCode削除と 改行をサニタイジング・BBCode削除がたぶん ミスっていると思います。
質問日時: 2011/06/17 16:59 質問者: chopper_
ベストアンサー
1
0
-
特定の文字列をHTMLタグに変換・urlについて
#------------------------------------------------- # BBCode(特定の文字列をHTMLタグに変換) #------------------------------------------------- の中の、文字列なんですけれども $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/<a href=\"$jumpcgi?$1\" target=\"$target\" rel=\"nofollow\">$2<\/a>/ig; urlのものが、変になります。 http://www28.atpages.jp/wrsend1/patio/read.cgi?no=4 ↑みたいになってしまいます。 http://www.gemani.org/titi4/read.cgi?no=1391 ↑のように文字でリンクさせるにはどうしたらいいでしょうか。
質問日時: 2011/06/16 19:17 質問者: chopper_
ベストアンサー
1
0
-
read.cgi等のタグの追加について
#------------------------------------------------- # BBCode(特定の文字列をHTMLタグに変換) #------------------------------------------------- sub bbcodecnv { my $str = shift; $str =~ s/\[b\](.*?)\[\/b\]/<b>$1<\/b>/ig; $str =~ s/\[i\](.*?)\[\/i\]/<i>$1<\/i>/ig; $str =~ s/\[u\](.*?)\[\/u\]/<span style=\"text-decoration:underline\">$1<\/span>/ig; $str =~ s/\[s\](.*?)\[\/s\]/<span style=\"text-decoration:line-through\">$1<\/span>/ig; $str =~ s/\[code\](.*?)\[\/code\]/<code>$1<\/code>/ig; $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/<a href=\"$jumpcgi?$1\" target=\"$target\" rel=\"nofollow\">$2<\/a>/ig; $str =~ s/\[color=(\#[0-9A-F]{6}|[A-Z]+)\](.*?)\[\/color\]/<span style=\"color:$1\">$2<\/span>/ig; return $str; } #------------------------------------------------- # BBCode削除 #------------------------------------------------- sub bbcodedel { my $str = shift; $str =~ s/\[b\](.*?)\[\/b\]/$1/ig; $str =~ s/\[i\](.*?)\[\/i\]/$1/ig; $str =~ s/\[u\](.*?)\[\/u\]/$1/ig; $str =~ s/\[s\](.*?)\[\/s\]/$1/ig; $str =~ s/\[code\](.*?)\[\/code\]/$1/ig; $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/$1/ig; $str =~ s/\[color=(\#[0-9A-F]{6}|[A-Z]+)\](.*?)\[\/color\]/$2/ig; return $str; } と初期設定でありますが、 リスト形式のものは、どういう風に書いたら 良いのでしょうか?? いろいろ調べて(試して)みたんですが、 できませんでした。 よろしくお願いします! ちなみに、 $str =からやっぱり始まるんでしょうか?
質問日時: 2011/06/15 14:37 質問者: chopper_
ベストアンサー
2
0
-
クッションを踏まない場合
http://www28.atpages.jp/wrsend1/patio/read.cgi?no=2 ↑リンクのことなんですが、 クッションを踏まない場合の設定はどうすればいいでしょうか??
質問日時: 2011/06/15 14:29 質問者: chopper_
ベストアンサー
1
0
-
編集した時に日時を変える
きりしま式 Web Patio LibertyVerを今作成しているんですが スレッドやレスを編集した時の、日時に自動変更されるっていうのは できるでしょうか?? 例えば、今日、 2011/06/12 09:41のスレッドを変更するとき、 2011/06/14 何時何分 としたいわけです。 編集したときの日時にしたいのですが、 どうすればいいでしょうか。
質問日時: 2011/06/14 15:55 質問者: chopper_
ベストアンサー
1
0
-
リンクについて
http://www28.atpages.jp/wrsend1/patio/read.cgi?no=2 ↑リンクが他サイトと共有できないとかいって ジャンプできないのですが、つなげるようにするには どうすればよいでしょうか??
質問日時: 2011/06/12 17:48 質問者: chopper_
ベストアンサー
1
0
-
プログラムを書き足すことについて
http://oshiete.goo.ne.jp/qa/6803872.html ↑の質問で、新たにプログラムを書き足すことまでは わかったのですが、どこをどう書き足せば、 リスト形式が使えるようになるのでしょうか? いろいろしてみたんですが、わからなくて、困っています。
質問日時: 2011/06/12 17:36 質問者: chopper_
ベストアンサー
1
0
-
Perl: 数字だけの変数名について
お世話になります。 ラクダ本こと「プログラミング言語Perl」には「2.5 名前」という項目に「厳密な話をすれば、ファニー文字の後ろに続く名前は、識別子でなくても構わない。数字で始まり、数字のみで構成される名前-たとえば$123-を使うこともできる」と書かれています。 しかし、実際に、 $123 = sqrt(5); print "5の平方根は", $123, "です\n"; というプログラムを実行すると、 Modification of a read-only value attempted at foo.pl at line 1 というエラーメッセージが出て終了します。 これは、$123というのが、正規表現でカッコによるサブパターンを取得した、123番目のサブパターンにマッチするからだと思います。 ちなみにこれを、 $012 = sqrt(5); print "5の平方根は", $012, "です\n"; と変えるとちゃんと動作します。 ということで、数字の変数名を付ける場合は、 ・$0で始まる2桁以上 ・すべて数字 という規則である、と考えていいのでしょうか。 ($0はプログラム名という特殊変数になるので。。。) つまり、本の間違いでしょうか?
質問日時: 2011/06/11 21:59 質問者: TYWalker
ベストアンサー
1
0
-
改行コードが勝手に
はじめまして。perl初心者です。 見よう見まねでやりはじめたのですが。どうしてもわからないことがあります。 数十行ぐらいのテキストファイルがあるのですが、その中を訂正するcgiを作成しています。 htmlからそのファイル名を指定して、 open (DATA, "$file1"); #$file1がファイル名 として htmlのテキストエリアに表示して訂正し、それをさらに別のcgiで書き込むようにしています。 print "<form ACTION=\"hensyuu.cgi\" METHOD=\"POST\">\n; print "<textarea name=\"MSG\" cols=100 rows=30>\n"; foreach $gyou ( < DATA > ) { print $gyou; } print "</textarea>\n"; print "<input type=\"submit\" value=\"書込\">\n"; print "</form>\n"; hensyuu.cgiは open ( DATA,">>$file1" ); #ここでtextareaの内容を読み込み print DATA "$in{MSG}"; close ( DATA ); 編集したデータを見ると、各行ごとになぜか空白行が入ってしまいます。 バイナリエディタで見ると通常の0D0Aの前に0Dが追加され、0D0D0Aとなっているために そうなっていると思われます。 これってそういうものなのでしょうか。 それとも根本的にこんなやり方は間違っているのでしょうか。 ご教授のほど、よろしくお願いします。
質問日時: 2011/06/09 23:02 質問者: marusu_jp
解決済
2
0
-
ベストアンサー
5
0
-
テキストファイル内の「誤改行」を修文したい!
perl は初心者です。よろしくお願いします。 ★無名ハッシュを作り、リファレンスをハッシュに格納する方法を採用して、試行錯誤しています。 ファイル内容は、論理行の一行毎に行頭が ”AA” のように””で囲まれています。(例文後述) しかし、行の中には「誤改行」されて正常な行が分割されていて、改行され行頭が””で囲まれていない行が存在します。(正常な行が2分割され、前半部分と後半部分が別な行文となっている) この「誤改行」を、直前にある「元の正常な分割された前半の行文」と連結して、新たな正常な行としてファイルを修正し新規テキストファイルに書きこみたい。この際、分割されていた2個の「行文」は不要になったので、新規テキストファイルには書き込まない。 この修文作業が、途中まで出来ましたが最後の不要な行の削除が出来ないので、困っています。 ------------------------------------------------------------ 対象とするテキスト内容 (下記の行番号と文字列は例示です) 1. "ABCD",あいうえおかきくけこ123456789 XXXXXXXXXXXX 2. "EFGH", 3. さしすせそたちつてと9876543 XXXXXXXXXXXX # ←「誤改行」の行です。 4. "IGKL",なにぬねのはひふへほ123456789 XXXXXXXXXXX 5. "MNOP",まみむめもやいゆえよ987654321 XXXXXXXXXXX 6. "QRST", 7. らりるれろわいうえを123456789 XXXXXXXXX # ←「誤改行」の行です。 8. 9. ------------------------------------------------------------------ 期待する修文の出力結果 (行内容は、元の行番号の順番と違っても結構です) 1. "ABCD",あいうえおかきくけこ123456789 XXXXXXXXXXXX 2. "EFGH",さしすせそたちつてと9876543 XXXXXXXXXXXX 3. "IGKL",なにぬねのはひふへほ123456789 XXXXXXXXXXX 4. "MNOP",まみむめもやいゆえよ987654321 XXXXXXXXXXX 5. "QRST",らりるれろわいうえを123456789 XXXXXXXXX 6. 7. ----------------------------------------- 私作成したスクリプトの要約は、 # 対象ファイルを一行づつ読み込む. # 末尾の改行を削除 # 誤改行の場合を正規表現で探す。$ng_gyou に格納 # その他正常行は$ok_gyou, に格納する。 # $falag に誤改行の場合は0、正常な改行の場合は1を格納 # 誤改行の場合の行番号を$count_ng に、正常な改行の場合の行番号を$count_ok に、全部の行番号は$flag_1に格納する。 # 無名ハッシュを作り,リファレンスを $ref に格納する $ref = {'nomber' => $flag_1, 'ng' => $ng_gyou, 'ok' => $ok_gyou, 'ngcount' => $count_ng, 'okcount' => $count_ok, 'flag' => $flag_ok }; $WORD{$flag_1} = $ref; # nomber:$flag_1をキーにして,リファレンスをハッシュ:%WORDに格納 # このハッシュ「%WORDを」 読み込んで、処理しました。 foreach $flag_1 ( sort { $a <=> $b } keys %WORD) { if($one->{ok} == 0) { ・・・・・・・・・・・・・・・・・ # 細部は、長くなるので省略します。( 誤改行の連結までは成功しましたが、・・・・・・??) 以上、質問内容が冗長になりましたが、どうか御教示下さい。
質問日時: 2011/06/05 15:07 質問者: daiden-ina
ベストアンサー
8
0
-
日本語での正規表現について
「***************** Version 2 *****************」 ↑という文字列を評価して「2」を取りたい為に「/^\*+\s*Version\s+(\d+)\s*\*+\s*$/」という正規表現を使用しています。 「***************** バージョン 2 *****************」 同様に↑という文字列を評価して「2」を取りたいので「/^\*+\s*[バージョン]\s+(\d+)\s*\*+\s*$/」としましたがうまく動きません。 日本語文字列が正しく動作していないようです。 何らかの形でエンコードして当てはめればよいと思うのですが、どのような値を設定すればよいでしょうか? 「バージョン」以外にも「ユーザ」、「日付」などの日本語を同様にマッチさせる必要があるため、変換方法を教えて頂けると助かります。 perlはほぼ使えないため、WebやWindows上でのアプリケーションで指定文字列を渡すと変換できる物をお願い致します。 (perlは入っているためコマンドを叩けばOKというのであればそれでも構いません) 与えられる「バージョン」という文字の文字コードはSJISになります。
質問日時: 2011/06/03 16:51 質問者: tetuya120
ベストアンサー
3
0
-
use lib qw(./lib);が使えない?
システム名: Linux リリース: 2.6.9-89.ELsmp バージョン: #1 SMP Mon Apr 20 10:34:33 EDT 2009 Perl バージョン: 5.008005 Archive::Zipがインストールされていないサーバにlibディレクトリを作成して実行したいのですが、実行以前にエラーとなってしまいます。現在、libディレクトリはcgi-bin内にありますが、置き場所が悪いのでしょうか? 漠然とした内容で申し訳ございませんが、どのような理由が考えられるのかをお聞かせください。
質問日時: 2011/06/02 03:59 質問者: salvohouse
解決済
3
0
-
配列内定義サブルーチン呼び出し
下記のような配列内定義サブルーチン呼び出しを作成し動作を確認しました。 次にソース2行目の「no strict;」を「use script;」に変更すると Bareword "sub1" not allowed while "strict subs" in use at refsub_OK.pl line 4. Bareword "sub2" not allowed while "strict subs" in use at refsub_OK.pl line 4. Bareword "sub3" not allowed while "strict subs" in use at refsub_OK.pl line 4. Execution of refsub_OK.pl aborted due to compilation errors. とエラーになります。 プログラムはやはり「use script;」を記述したいのですが、「use script;」を記述 したままでエラーにならない方法がありましたらおしえてください。 perlのバージョンは5.12.3、OSはWindowsXP SP3です。 よろしくお願いします。 ---ソースここから--- #!perl no strict; use warnings; my @ary = ( ("input1.txt", "save1.txt", sub1), ("input2.txt", "save2.txt", sub2), ("input3.txt", "save3.txt", sub3), ); while (@ary) { my $p1 = shift(@ary); my $p2 = shift(@ary); my $sub = shift(@ary); print "p1=[$p1] p2=[$p2] sub=[$sub]\n"; &$sub("$p1", "$p2"); } sub sub1 { my ($p1, $p2) = @_; print "sub1: [$p1] [$p2]\n"; } sub sub2 { my ($p1, $p2) = @_; print "sub2: [$p1] [$p2]\n"; } sub sub3 { my ($p1, $p2) = @_; print "sub3: [$p1] [$p2]\n"; } ---ソースここまで---
質問日時: 2011/05/29 14:21 質問者: edoanago
ベストアンサー
1
0
-
Perl:計算誤差について
お世話になります。 Perlを使って、計算機には誤差があるという話をしようと思って、 print "1/3*3=", 1/3*3, "\n"; というプログラムを実行させました。 自分としては、1/3の時点で0.333333333333的な数になるので、それを3倍すると、0.9999999999的な数字になると思いましたが、結果としては1になります。 これはどういう原理でしょうか。 よろしくお願いします。
質問日時: 2011/05/29 14:05 質問者: TYWalker
ベストアンサー
1
0
-
Perlでファンクションへのリファレンス渡しについ
!isDependency( \( "aaa" , "bbb" , "ccc" ) , \( "000" ) ) ; 配列のリファレンスを渡そうとしていますがうまくいきません。 どう記述すればよいでしょうか?
質問日時: 2011/05/28 19:35 質問者: kedamuxl
解決済
2
0
-
perlの日本語文字コードはどうすべき?
perlで細かいことを理解できないままに呪文のように頭に require 'cgi-lib.pl'; require 'jcode.pl'; を使っていました。 そのうち文字化けなどの問題も出て、いろいろ調べたり質問したりして、jcode.plは古いからJcode.pmを使いなさいと指摘を受けたので、 require 'cgi-lib.pl'; require 'Jcode.pm'; と呪文変更を行いましたが、これについての使い方を理解せぬうちに、use Encode qw(from_to encode);としなさいと指摘を受け、 require 'cgi-lib.pl'; use Encode qw(from_to encode); と変えて使っていました。 ところが、このパターンを使っていたところ、GETでのデータの受渡がうまくできない(internal server error)となることに気づきました。 2つ目のパターンでも同じでした local($key,$val); undef(%in); &ReadParse; my($method) = $ENV{'REQUEST_METHOD'}; if ($method eq "GET"){ $QUERY_DATA = $ENV{'QUERY_STRING'}; }elsif ($method eq 'POST'){ read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'}); }else{ &error; } データの受信はこのようにはじめています。 そもそもJcode.pmやuse Encode qw(from_to encode);というのはjcode.plに変わる日本語変換のパッケージなのでしょうか? また、 require 'cgi-lib.pl'; require 'jcode.pl'; use Encode qw(from_to encode); とするとGETでの受渡も問題なかったのですが、2つを混在させても問題ないのでしょうか? というのも、メール送信で文字変換させるときに sub jis{ my $msg = $_[0]; Encode::from_to($msg, "shiftjis", "iso-2022-jp"); return $msg; } としているので、use Encode qw(from_to encode);がないとEncode::from_to()が使えないのかなと想像し2つをセットで使用しています。(冒頭でuse Encode qw(from_to encode)を宣言し、変換部分でEncode::from_to()を使用) jcode.pl、Jcode.pm、use Encode qw(from_to encode)、Encode::from_to()の関係について教えてください。 もちろん自分でもネットで調べてみましたが、思うように解説してあるところが見つからず困っています。
質問日時: 2011/05/27 19:35 質問者: choei
ベストアンサー
1
0
-
csvファイルでの,(カンマ)の取扱について
csvファイルをperlで取扱っています。 ,(カンマ)が含まれるデータは""で括ってやれば行がずれることなく入るのは分かっているのですが、今度は取り出すときどのようにしていいのか分かりません。 各行毎に一連のデータが羅列されていますが、それの分割方法を教えてください。 たとえば、 $bに,(カンマ)入りの文字列が入っていた場合、 ($a, $b, $c) = split(/,/, $query); とすると本来$bに入って欲しいデータの,(カンマ)から後の部分が$cに格納されてしまいます。(そこから先が1つずれます) これをずれずに分割させるにはどのようにしたらいいでしょうか? ちなみに ($a, "$b", $c) = split(/,/, $query); と試しにやってみましたが、エラーになってしまいました。 実は長年の悩みで、データを格納する際に,(カンマ)を別のあり得ないような文字列に置き換えて、取り出したあと,(カンマ)に戻すというやり方でやっていたのですが、1つのデータファイルを複数のperlで取扱うようになり、対応が難しくなってきたので、これを機にきちんとした方法でデータを取扱いたいと思っています。
質問日時: 2011/05/26 19:55 質問者: choei
ベストアンサー
2
0
-
rshを使うスクリプトをバックグラウンド実行
Linux+Perlでのお話です。 内部でsystem関数を使ってrshコマンドを実行しているperlスクリプト(以下、スクリプトAという)があります。 スクリプトAをフォアグラウンドで実行するとうまく流れるのですが、バックグラウンド実行すると、rshコマンドを実行した直後でjobが止まってしまいます。 もっと詳しく言いますと、スクリプトAのrshコマンドは、ディスクを共有しているリモートマシンに対して、スクリプトBを実行するように指示しています。 スクリプトBではとある計算を行なっており、その計算結果をファイルに出力しています。 そして、その結果をスクリプトAで読み込んで後処理を行うというものです。 ----- …(前処理)… system("rsh (ホスト名) \"(スクリプトB実行コマンド及び引数) 1> /dev/null 2> /dev/null\""); # ここでjobが止まってしまいます。 # ここで標準出力(ログファイルにリダイレクトしてる)に何か出力しようとしても、何も出力されてません。 (スクリプトBの結果ファイルの読み込み) …(後処理)… ----- Jobが止まってしまうと言っているのは、jobsコマンドで見ると"job stopped"となっている状態のことを言っています。 この状態でスクリプトBの結果はファイルに出力されているので、rshのコマンドはうまく投げられていると思います。 (「rshやsshは標準入力が期待されてるとバックグラウンド実行が出来ない」(?)というような記述をどこかで見かけたので、念のためrshに"< /dev/null"の記述を加えてもみたのですが、変わりませんでした) その後、止まっているjobをfgコマンドでフォアグラウンドで再開させると、最後まで問題なく実行されます。 フォアグラウンドで実行すればうまくいくのに、バックグラウンドで実行すると止まってしまうのが理解出来ません。 これは何が原因なのでしょうか。 そして、どうしたら解決出来るのか。 どなたかご存知でしたら、ご教示頂きたくお願い致します。
質問日時: 2011/05/26 18:26 質問者: sexy-55
ベストアンサー
2
0
-
perlでurlが正しいか判定したい
perlでホームページのURLが正しいか判定したいのですが、ネットで調べていても出てくるのがメールアドレスの判定方法ばかりで、ホームページに関してのことがなかなか見つかりません。 if($url !~ /^https?:\/\/[\w\.-~\?&=\/]{4,}/) { } こんな感じで適当にやっていたのですが、なぜか ,(カンマ) のチェックをスルーしてしまったりと思うように制御できておらず、 http://www.din.or.jp/~ohzaki/perl.htm#httpURL このページを読んでもちんぷんかんぷんで、とりあえず if($url !~ /\b(?:https?|shttp)://(?:(?:[-_.!~*'()a-zA-Z0-9;:&=+$,]|%[0-9A-Fa-f ][0-9A-Fa-f])*@)?(?:(?:[a-zA-Z0-9](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.) *[a-zA-Z](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.?|[0-9]+\.[0-9]+\.[0-9]+\. [0-9]+)(?::[0-9]*)?(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f] [0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A- Fa-f])*)*(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f ])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)*) *)?(?:\?(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f]) *)?(?:#(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])* )?/){ } こんな感じで代入してみても予想どおり構文エラーとなってしまい、どうやればいいのか困っています。(あまりの長さに理解できていないためエスケープも一切させてないので、エラーが出て当然といえば当然ですが) そこまで厳密にでなくてもかまわないのですが、ホームページのURLに間違いがないかチェックする方法はないでしょうか。 (特に . と , や : と ; や ~ と ^ の入力間違い、スペースが入っていないかとか全角入力になっていないかなどをチェックしたいです)
質問日時: 2011/05/26 17:22 質問者: choei
ベストアンサー
2
0
-
PerlでHTTPを扱いたい
たとえば あるファイルhttp://xxx.xxx.xxx/xxx/xxxx.xxxを Perlで*.cgiのあるフォルダにそのファイルを ./yyyymmdd_hhmmss_xxx.xxx.xxx_xxx_xxxx.xxxとして 保存したいのですが 検索してもヘッダがついていたり、そのままな感じだったりして思うようなものは見つからず Perlではファイル入出力を少しと$ENV{'~'}とか時刻とかしかつかったことがないので ほとんどわかりません。 環境は 自宅では Windows95でAnHTTPD サーバーは@PAGESのものです よろしくお願いします
質問日時: 2011/05/26 14:34 質問者: ft1711
解決済
3
0
-
Perlでリモートファイルの参照方法
Perlからリモートファイルを参照する方法がわかりません。 参照というのは、ファイルをOPENして順次読み込みをするという意味です。 リモートファイルはURLでのみ指定して参照しようとしています。 FTPは使えません。 いろいろと調べたのですが、そもそもPerlでは出来ないのか、または何か方法があるのかわかりません。 是非よきアドバイスをお願い致します。
質問日時: 2011/05/24 13:04 質問者: boogee777
ベストアンサー
2
0
-
HTMLの中にperlを記述する方法について
例えばphpの場合、下記の<?php~?>の間にphpの記述をしますが、同じことをperlで行おうとした場合、どのように記述すれば良いか分からなかったため、アドバイスいただける方がいらっしゃいましたら、ご教示の程、よろしくお願いします。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>title</title> </head> <body> <?php ?> </body> </html> なお、既存のhtmlにperlを追加したいと思っているため、上記のhtml自体をperlで書きなおす以外でお願いします。 以上、宜しくお願いします。
質問日時: 2011/05/23 00:59 質問者: iroha_168
ベストアンサー
3
0
-
HTMLとPERLの関係について教えてください
ホームページのカウンターなどPERLでかけると聞きました。 これはhtmlファイルやCSSファイルのほかにPERLファイルみたいのがあって、HTMLファイルからPERLファイルにリンクで飛んで、PERL言語を動かして、カウンターを表示させる、みたいな手順でしょうか? プログラム素人なので、なるべく簡単にお教えいただければあり額存じます。 よろしくお願いいたします。
質問日時: 2011/05/22 13:56 質問者: maruhase
ベストアンサー
1
0
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
【Perl】に関するコラム/記事
-
メダロット:第249話「Vol.249※期間限定公開」
天才メダロッター六葉カガミの戦いを描く「メダロット再~リローデッド~」(漫画:伯林、監修:イマジニア)、20周年を迎えた『メダロット』が新たなストリーでココに再起動!!★全話無料で読める、週刊メダロット通信...
-
日本古来の伝統工芸「金継ぎ」で修復した食器は前と同じように使えるの?
大切にしている食器が割れてしまったら、きっと誰もが「元に戻したい」と願うだろう。「教えて!goo」にも「割ってしまったお気に入りの食器を復活できる?」という質問があり、最適な方法について様々な意見が寄せら...
-
メダロット:第248話「Vol.248※期間限定公開」
天才メダロッター六葉カガミの戦いを描く「メダロット再~リローデッド~」(漫画:伯林、監修:イマジニア)、20周年を迎えた『メダロット』が新たなストリーでココに再起動!!★全話無料で読める、週刊メダロット通信...
-
タンス預金で旧紙幣を持ち続けるのは大丈夫?タンス預金のメリット・デメリットを紹介
今年7月、約20年ぶりに新紙幣が発行される。紙幣が変わることを改刷というが、この改刷には「タンス預金をあぶり出す目的があるのでは?」という見方をする人もいるという。「教えて!goo」にも「改刷で本当にタンス...
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
ファイルをディレクトリ分配のプロ...
-
openした後、closeしないでプログラ...
-
perlのプログラミング 部分入れ替え...
-
Perlのエラーについてご教授くださ...
-
画像が表示でnull; this.src
-
perlプログラミング 空白行削除
-
Perlで特定文字列から特定文字列ま...
-
ラズベリーパイ初心者です。 ラズパ...
-
アルファベットに付いて質問します...
-
#!/usr/bin/perlで書きだしたCGIを...
-
perlのflock関数でロックをかけたま...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□の中...
-
perlでリテラル値はメモリにどのよ...
-
perlで2次元配列をサブルーチンに...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方についての質問
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
openした後、closeしないでプログラ...
-
テキストファイルで提出とは?
-
INDIRECT 横に再度抽出したい
-
Perlで特定文字列から特定文字列ま...
-
perlをバージョンアップしたら、今...
-
Wallpaper Engineでおすすめの壁紙...
-
arduino の割り込み処理について
-
アルファベットに付いて質問します...
-
Strawberry Perl for Windows で Ou...
-
Perlで時間の計算
-
このファイルを開く方法で困ってい...
-
TeraPadエディターの操作方法について
-
cgiでサーバーにファイルを追加する
-
フローチャート 九九
-
LinuxにおいてのPerlのプログラムの...
-
perl 初等プログラミングについて
-
Perlのエラーについてご教授くださ...
-
こんにちは ブラケッツでプログラミ...
-
bashスクリプト
-
perlプログラミング 空白行削除
おすすめ情報