Perlコーディング初心者質問スレ Part 62
Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ
http://hibari.2ch.net/test/read.cgi/php/1275739870/
即死しそうだなおい
ぱ☆る☆る
5 :
nobodyさん :2011/01/17(月) 17:09:42 ID:ux/cXg3g
質問させてください 今、アップローダーCGI使ってるのですが、 ファイルのMIMEタイプを見て、拡張子が間違っている場合ファイル名の変更をしようとしているのですが、 CGI.pmで、 $mime = CGI::uploadInfo($fh)->{'Content-Type'}; とした所、mimeタイプは返ってくるのですが、 JPEGファイルにPNG拡張子をつけて判定させるとPNGのmimeが返ってきます・・・ その他で試しても、そのファイルに付いてる拡張子のmimeが返ってきます。 何か指定の仕方が間違ってたりするのでしょうか・・・?
そりゃウェブサーバがファイルのmime-type決めるのに普通は 拡張子使ってるからな。ファイルを取得して中身から判定しない とだめじゃない?
7 :
nobodyさん :2011/01/17(月) 17:32:56 ID:ux/cXg3g
>>6 レスありがとうございます
おぉ・・・一度ファイル取得してから判断するしかないですか・・・
大きなファイルうpして、許可してないタイプのファイルだった場合、
結構無駄なリソース食っちゃいますねぇ・・・
ネットでいろいろ調べたら、CGI.pmで拡張子間違ってても正常なmimeが取得できるとあったのですが・・・
Apache で MagicType が有効なら、たぶん拡張子が違くても ファイルの種類を判別できるのかも
>>7 ねえ、ファイル見もしないで判定出来るって凄すぎませんか?
>>10 # File::MMagic->new()
# File::MMagic->new( $filename )
モジュールを初期化します。ファイル名が与えられなければ、
File::MMagicに格納されている秘技(=magic number)が使われます。
秘技!なんか凄そう
どういう仕組なんだろう…
先頭何バイトが何に一致するかで探すだけ 秘技は翻訳ミスな気がしなくもない 秘技はリストと読み替えれば分かりやすい
ただのfileやね
実際のオープンは FILE とかで開いてるのに、スレのサンプルをそのままコピペしてるから何も表示されてない。 と予測してみる。
誤爆?
ですww コピペしなおすのも面倒なので放置 ^-^;
perl超ど素人の私に教えて下さい。 HTMLの整形プログラミングをしてるんですが、 フォームから入力されたテキストの改行を</p>\n<p>で置換されるまではできるようになったのですが これを二回以上改行するときに</p><p style="margin-top:○(←改行した数)em;">ってできるようにしたいんですが、どうしたらいいですか?
my $count = $str =~ s/元/後/g;
あ、ちゃんと読んでなかった。こういうことか? $str =~ s{(\n+)}{sprintf '</p><p style="margin-top: %dem;">', length($1)}ge;
>>19 はい、要望どおりでございます。おかげさまで解決できました。
そして一瞬で解決してくれて軽く感激しています。ありがとうございました!
ちなみに私は$value =~ s/&/&/g;とかの置換しか知らないから一日中四苦八苦してました(汗
ファイルハンドルをlocalする理由をおしえてください
局所化しないと余計な問題が起こるからです。 というかそもそも今日びは open my $fh, '<', '/etc/passwd'; などとしてレキシカル変数をハンドルにするのが普通です。
余計な問題ってなんですか? あとなんでレキシカル変数を使うんですか?
ファイルハンドルの重複 ↑を避けるため
25 :
Perl忍者 ◆M5ZWRnXOj6 :2011/01/22(土) 13:51:35 ID:Yp6l44nh
Perlでパスワードをメール送信することがあるのですが、 平文でコード中に書いてしまってもいいのでしょうか。 パスワードは一種類だけで、CGIファイルのパーミッションも 700にしてあるのですが、この程度で良いのかどうにも不安です…。
strftimeを使って、時刻を英文で表示したくて以下のように書きました。 use POSIX; setlocale( LC_ALL, "English" ); print strftime("%a, %d %b %Y %H:%M:%S %Z", localtime); 曜日は英語になったのですが、タイムゾーン%Zが日本語のままになってしまいます。 %ZもJSTなどと表示させるようにするにはどうしたらいいですか? 日本以外でも実行したいのでJST直書きは避けたいです。
$tag=許可するタグ。 $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/<$tag>(.*?)<\/$tag>/<$1>$2<\/$3>/g; として許可しておいたタグだけ使用できるようにしたいんですが、 <tag>文字</tag>は上手くいくようになったんですが <tag><tag>文字</tag></tag>とやると上手くいかないです。 <tag>が重複しても大丈夫なようにするにはどうすればいいですか?
~s/</< ~s/>> って打たないといけないのか・・・。訂正します。
正規表現で任意の深さのネストの対応をとるのは無理って習わなかったか? 間はそのままでいいんなら対応を気にせず<tag>と</tag>をそれぞれ独立に 置換すればいいと思う。
32 :
nobodyさん :2011/01/28(金) 18:37:22 ID:dCs2TR10
>>29 先に&<>"'をescapeした上で許可するタグだけ戻したらいいんじゃないの?
$htmlがescapeし終わった後の文字列だとして、tagとtag1だけ許可したいなら
$html =~ s{&lt;(/?(?:tag|tag1))&gt;}{<$1>}g;
とか。
>>29 ><tag><tag>文字</tag></tag>
これ↑の意味がよく分からないのですが、同じタグがネストするケース(ネストさせて意味のあるタグ)ってありましたっけ?
<b><b>文字</b></b>
<small><small>文字</small></small> 他にもあると思う。
>>28 うまくいくはずだけど。
なんか足りないんじゃねえの?
手元環境ではそもそも%Zが日本語にならないのでなんとも。 環境さらした方がいいんじゃ? strftimeって普通はCの ライブラリ呼んでるだけだろうし。
>>28 locale の見てる場所が違うのかと思って試してみたけど
手元の Linux 環境では日本語にできなかった。
で、Windows の ActivePerl で試したら日本語になった。
perldoc POSIX の strftime を見るとダメっぽいように読める。
http://perldoc.perl.org/POSIX.html#strftime 一応 Windows ActivePerl 5.8.9(build 827)で試すとこんな感じ。
perl -MPOSIX -e "print strftime(\"%a, %d %b %Y %H:%M:%S %Z\", localtime)"
月, 31 1 2011 01:41:51 東京 (標準時)
perl -MPOSIX -e "setlocale(LC_ALL,"C");print strftime(\"%a, %d %b %Y %H:%M:%S %Z\", localtime)"
Mon, 31 Jan 2011 01:42:41 東京 (標準時)
utf8 フラグが立ってる時の decode って、url decode もされる?
リファレンス先が同じものであるのかの比較演算子は何を使うのでしょうか? ==でしょうか? eqでしょうか? my $ref1 = \"char"; my $ref2 = \"another char"; my $ref3 = $ref1; print $ref1 == $ref2 ? "ref1 == ref2" : "ref1 != ref2", "\n"; print $ref1 eq $ref2 ? "ref1 eq ref2" : "ref1 ne ref2", "\n\n"; print $ref1 == $ref3 ? "ref1 == ref3" : "ref1 != ref3", "\n"; print $ref1 eq $ref3 ? "ref1 eq ref3" : "ref1 ne ref3";
>>40 つ
ttp://perldoc.jp/docs/perl/5.10.0/perlref.pod リファレンスを数値として使うと、メモリ内のストレージの位置の 整数表現を生成します。 これを利用して便利な唯一の状況は、二つのリファレンスを数値として 比較することで、同じ場所を参照しているかどうかを調べる場合です。 reference, numeric context
if ($ref1 == $ref2) { # cheap numeric compare of references
print "refs 1 and 2 refer to the same thing¥n";
}
すいません、少し語弊がありそうな気がしたので、以下に訂正します。 × リファレンス先が同じものであるのか ○ リファレンス(アドレス)が同じものであるのか
>>41 ありがとうございます。
==で比較すればいいんですね!
リファレンスはアドレスなんだから == でしょ?
@ISAって何の略 教えて
しらん 「ISA」って名前の配列変数ってのはわかる。
どんな略か推測してみて ISAの英語
Included ShippingCharge Array つまり、運送料の一覧の数字が配列されてる。
is a has a
DA PUMPのイケメンの人でなく?
うわっ。。。。つまんね〜 やっちまったなw
52 :
nobodyさん :2011/02/02(水) 11:51:08 ID:QPEQ2Nwa
ハッシュの中から、特定のキーを持つペアだけ抽出し、ハッシュとして返す関数はないですか?
map
perlに関する質問です。 実現したいこと: 4枚程度の画像が実際の大きさの20%に縮小されて並んでいる。 その4枚の中からどれか1つを選ぶ。(チェックする) そして「OK」のボタンを押す。 その結果、選んだ画像が実際の大きさで表示される。 CGIのファイルの中で、 その4枚の画像を<img src="$gazou.png" width="20%">のように設定しました。 その結果、画像はしっかり4枚並びました。 しかし「OK」を押してみると、実物の画像は表示されません。 CGIのファイルの中で、OKを押した後に表示されるものとして <img src="$gazou.png"> と指定しましたが、これだとだめなんでしょうか。 「チェックをつけたもの」の画像を表示するため 何か+αとしてなんらかの記述を書き加える必要があるとは思っているのですが、 具体的にどんなことを書き加えれば良いのか、分かる方ご教授願います。
それは Perl の質問じゃなく html の質問の様な気がする。
56 :
54 :2011/02/02(水) 14:09:30 ID:???
「変数をどう指定するか」 という話なのでPerlの質問のつもりでしました。
多分ね。
jQuery 使ったほうが幸せになれると思うの
>>52 テストしてないけど
my %results = map { ($_, $test{$_}) } grep { 〜判定〜 } keys(%test);
多分動かないと思うけどw
>>56 OK を押した後に何が出力されてるか
print すればいいじゃない
keysって左辺値にもなるんだね。 知らなかった。 keys %hash = 64;
60 :
56 :2011/02/02(水) 16:52:02 ID:???
>>58 「選んだものの画像」を出すにはどうすればいいですか?
<input type=radio name=baka value=aho> CGI->new->param(baka)
62 :
56 :2011/02/02(水) 17:16:46 ID:???
そのvalueの値を関係付けさせるというのはなんとなくイメージがつくのですが どう記述して表せば良いでしょうか。
そもそも表示されたHTMLのソースはどうなってるのよ ><img src="$gazou.png"> と指定しましたが、 こうなってるの?
メモ帳でざっくり書いてみた HTML <html><head></head><body> <form action="teihen.cgi" method="GET"> <input type="checkbox" name="selimg" value="baka"> <img src="baka.jpg" alt="" width="25%" /><br /> <input type="checkbox" name="selimg" value="aho"> <img src="aho.jpg" alt="" width="25%" /><br /> <input type="checkbox" name="selimg" value="kasu"> <img src=kasu.jpg" alt="" width="25%" /><br /> </form> </body></html> use CGI; my $in = new CGI; my @checklist = (); push(@checklist, $in->param('selimg')); print "content-type: text/html; charset=utf-8\n\n"; print "<html><head></head><body>\n"; foreach my $img (@checklist){ print "<img src=\"$img.jpg\" /><br />" defined($img); } print "</body></html>\n"; perl も何もない環境なので動作確認できない
65 :
56 :2011/02/02(水) 20:59:38 ID:???
>>63 $gazou は変数なので、表示されたHTMLにはそれぞれの画像ごとに$gazouの部分が変わっています。
>>64 試してみます。
>>65 本当にHTMLソースがそうなってるなら画像が表示されないってのはあり得なくね?
Perl部分は問題ないってことだよね
67 :
56 :2011/02/02(水) 21:28:40 ID:???
説明不足でしたが、全て1つのCGIで行うことを前提とすればどうでしょうか。
>>64 HTMLの中身見ましたが、「OK」ボタンの記述が書かれていませんよ
>>66 選択肢となる画像はちゃんと表示されます。
OKを押したときに選んだ画像が表示されないのです。
>>67 >OKを押したときに選んだ画像が表示されないのです。
>>63 も
>>66 もそのOK押したHTMLソースの話だろ
そのHTMLのソースにimgタグが書いてあるならPerlの話じゃないよね
つか、面倒だからPerlのコード晒せよ
type=submitぐらい黙って書き足せよかす
70 :
56 :2011/02/02(水) 21:44:26 ID:???
>>70 正男は置いといて、一通り探してみたけどOKの処理部分がねーじゃねーか
72 :
56 :2011/02/02(水) 22:05:12 ID:???
その処理をどう作ればいいかわからないんです;; スクリプト中の #★★★★★★★★ と書いてあるところらへんにOKのボタンを入れたいと思っているのですが。
お客様の中にエスパーの方はいらっしゃいませんかー
75 :
56 :2011/02/02(水) 22:12:50 ID:???
いろいろと事情が残っていませんね。
76 :
56 :2011/02/02(水) 22:19:11 ID:???
↑ 事情が 《あって》 残っていません
78 :
Perl忍者 ◆M5ZWRnXOj6 :2011/02/02(水) 22:32:05 ID:YiKhMWVN
おめえらstrictオタクのPerlerは 他人が書いたコードで、use strict;やuse warnings;や レキシカルスコープのmyとかつけてなかったら みくだすんだろうなあぁwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwww
79 :
Perl忍者 ◆M5ZWRnXOj6 :2011/02/02(水) 22:37:44 ID:YiKhMWVN
駆け出し君「ワールドオブクラフトのアイテムDBスクリプトかきました」 ###strictオタク 「プっ なにその古い書き方・・・ないわー・・・ strictオタク「ほお すごいですねぇ use strictってしってます?」
81 :
56 :2011/02/03(木) 01:09:54 ID:???
開けませんね
何がどう開けないのか書くべき 404が出るのかとか403なのかとか。 そもそもDNSの解決がされないのか。 index.txtが開けないのかとか。 端的に一言で済ますんじゃなくて、もっと詳しく。
84 :
Perl忍者 ◆M5ZWRnXOj6 :2011/02/03(木) 08:03:52 ID:ub8sTpkt
my $config = { 'cgi' => 'index.cgi', 'dir_img' => 'img/', 'per_line' => 3, 'file_template' => '_data/index.html' }; ここが凄くかっこいい
表示用テンプレートって言ってるのが カッカッカw
88 :
そしえて :2011/02/03(木) 17:10:41 ID:49ky3Gl+
pack,unpack
91 :
そしえて :2011/02/03(木) 18:35:35 ID:49ky3Gl+
>>89 ,90
出来ました、ヒントありがとうございます!
新しくなったPerldoc カッカッカw
改悪うじぇえ
>>80 質問主さんフェードアウトのため、消しました。
index.cgi から require した sub.cgi の中で、index.cgi で使われてるグローバル変数を使うのってどうやるんですか?
パッケージを変えてなければそのまま使えるし、変えてたら パッケージ名で修飾すればいい($PACKAGE::foo)。でもそういう 書き方は感心しないな。悪い癖がつく前にモジュールの勉強とか した方がいいよ。
ソウダヨ ベンキョウ シタホウガイイヨ
$form->CGI->new(); したときに、これを使いまわすんだけど、 これをいちいち渡さなきゃならないのがね。 同じデータのコピーを作られるってのがなんかやだ。
リファレンス
デリファレンスがめんどくさい
今日以前の、DateTimeオブジェクトの配列@dateListを得るために、 以下のように書きましたが、もう少しマシな書き方はないでしょうか? $count+1個分取得したい。 @dowList→取得したい曜日の配列です。 my $tmpDate = DateTime->today(time_zone=>'local'); while ($count > $#dateList) { my @tmpDowList = sort @dowList; my $i = $#tmpDowList; while (0 <= $i) { if($tmpDate->day_of_week == $tmpDowList[$i]) { push(@dateList, $tmpDate->clone); last if ($count <= $#dateList); $i--; } if($tmpDate->day_of_week < $tmpDowList[$i]) { $i--; } else { $tmpDate->subtract(days=>1); } } my $diff = (7 - $tmpDate->day_of_week % 7); $tmpDate->add(days=>$diff); $tmpDate->subtract(weeks=>1); }
perl + WWWW:Mechanizeを使いはじめたばかりです。フォームのsubmitの仕方で困っている ので教えてください。 対象のサイトで、formでtypeが下記のようにbuttonの場合は <input type=button name="name1"> $mech->submit_form(value => 'name1'); として押せるのですが、下記のようにimageの場合、 <input type=image name="name2"> $mech->submit_form(value => 'name2'); としても反応せず、下記のようにsubmitやclickでも反応しません。 $mech->submit() $mech->click() こんな時はどう対処すればよいのでしょうか?
またMechanize野郎かよwwwwwwwwwwwwwww WWWWWWWWWWWWWWWWWWWWWWWWWWW wwwwwwwWwwwwwwwwwwwwwwwwwwwwwww
$mech->click('name2')
105 :
102 :2011/02/05(土) 00:30:07 ID:???
普通にポストすりゃいいじゃん
107 :
nobodyさん :2011/02/08(火) 20:02:05 ID:Jq+d5fQU
独学でmacでパールを勉強してるのですが、 print命令でファイルハンドルに指示を出してるのですが、書き込めはできるのですが、 ファイルが無い場合、新規で自動でファイルが作成されるはずとの記載がありましたが、 一切自動でファイルが生成されません。 ググっても、設定が必要等言われてますが、 mac自体も初心者でほとんどわかりません。 どのような設定にすればいいのでしょうか? お助けください。
どう書いたかぐらい載せろや
110 :
nobodyさん :2011/02/08(火) 20:28:44 ID:Jq+d5fQU
>>109 macのは少ししかなかったんです。
>>108 ごめんなさい、下の通りです。
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>アクセスカウンタ</TITLE></HEAD>\n";
print " <BODY>\n";
print "<H1>test</H1><HR>\n";
if ( open ( FH , "count.txt")){
$cnt = <FH>;
close( FH );
$cnt++;
print"<CENTER>あなたは${cnt}人目の訪問者です。</CENTER>\n";
if ( open(FH, ">count.txt" )){
print FH $cnt;
close(FH);
}
else {
print "ファイルの書き込みオープンに失敗しました。\n";
}
}
else {
print "ファイルの書き込みオープンに失敗しました。\n";
}
print "</BODY>\n";
print "</HTML>\n";
__END__
ファイルがある場合の書き込みはできるのですが、
ファイルが無い場合の新規で自動ファイル作成が行われません。
どうしてでしょうか?
if (open(FH, "count.txt")) { # ファイルないから false # ここ通らないからファイルも生成されない if (open(FH, ">count.txt")) { # 略 } else { print "書き込みでコケた\n" } } else { print "書き込みでコケた\n"; # たぶん読み込み }
メルアド教えて>マック君
アップロードされる画像をImageMagickで縮小して保存するだけのCGIをPerlで書いています。 ImageMagickのread()はファイル名を取るようなので、以下のようにアップロードされた ファイルをまず保存してから、それを再度Read()してリサイズしているのですが、もっと シンプルに中間ファイルを作らず、$updataをそのまま扱う方法はありませんか? use CGI; use Image::Magick; my $form = new CGI; my $updata = $form->param("upload_file"); my $buffer; open(FP, ">hoge.jpg"); binmode(FP); while(read($updata, $buffer, 4096)){ print FP $buffer; } close(FP); my $image = Image::Magick->new; $image->Read("hoge.jpg"); my ($width, $height) = $image->Get('width', 'height'); $image->Resize( width => int($width * 0.5), height => int($height * 0.5), blur => 0.8 ); $image->Write("hoge_small.jpg");
考えとくから待っとけカス
寝る
GD なら LWP とかで取得したメモリの中のを使って new 出来る 拡大・縮小だけなら GD の resample でいいんじゃないの?
$image->Read($ImageData); これだとどう?
間違えたw $image->ReadImage($ImageData);
120 :
113 :2011/02/09(水) 17:04:08 ID:???
ありがとうございますー
>>116 さんの通り、file=>$updata でそのまま扱えました。
検索なんてするな ここで聞いたほうがいいよ だから、皆検索しないでここで聞いたほうがいいよ
みんなって、自分が作った関数とかパッケージとかのファイル名ってどうつけてるんですか?
func0001 から連番。
CPANとかぶらなくて一般的な短めの名前付けてる My〜とかネームスペースは付けてない
> CPANとかぶらなくて どういうこと?
>>125 自分で付けたパッケージ名がたまたまCPANにも存在してたらややこしいから避けるということ
かぶらないようにしてても、 アップデートで被ったりするんだ罠
Local::* を使うか Foo_Corp::* のように下線を使いましょう
129 :
nobodyさん :2011/02/14(月) 12:04:38 ID:Nfx51quu
文字コードについて色々調べていますが、まだうまく理解、整理できていないので質問します。 @perlでは内部文字コードというものがある、とあったのですが、 それはsjisやutf8などとは全く別のperlプログラム内でしか使い道のない文字コードなのでしょうか? 例えば下記のような場合、$decはどういった文字コードになっているのでしょうか? (そもそも内部コードは文字コードどうこう関係なく、外部出力するものではないから単に"内部コード"と認識しておけばよい?) use Encode; open(FH,"./sjis.txt"); while(<FH>){ my $dec = decode('shiftjis',$_); my $utf8 = encode('utf8',$dec); } Aプログラム内で書いた文字を使いたい場合、下記のような使い方であっていますでしょうか? 他にパフォーマンスが良かったり簡潔に書けたりしますか? ※下記ファイルはutf-8で作成した場合 use Encode; my $seiki = decode('utf8',"[あアア]"); #プログラム内で書く文字を内部コードに変換 open(FH,"./sjis.txt"); while(<FH>){ my $dec = decode('shiftjis',$_); if( $dec =~ /$seiki/ ){ #テキスト中にあorアorアがあれば真としたい print encode('utf8',$dec); } } B下記は、sjis→内部コード→$utf8までを"Unicode::Japanese->new($_,'sjis')->get;"で 一括して行っているという認識であっていますでしょうか? use Unicode::Japanese; open(FH,"./sjis.txt"); while(<FH>){ my $utf8 = Unicode::Japanese->new($_,'sjis')->get; }
>>129 @あくまで内部文字コードなので何であるかに依存したコードを書いては
いけまないし、普通は気にしないでかけるようになっています。内部的には
全く新規の文字コードを1から作ってるということはなくてutf8だったり
するかもしれないけど。
Aプログラム中に書くときはいちいちそんなめんどくさいことしなくても
ソースをutf8で記述してuse utf8プラグマを使えば直接書いていいよ
use utf8
if ($dec =~ /[あア]/) {
Bいちいち変換処理を書くのは面倒なので普通はI/Oレイヤを使います。
open(FH, "<:encoding(sjis)", "./sjis.txt");
while(<FH>){
# ここで$_はすでに内部文字コード
}
さらに言うとファイルを開いたりするたびに指定を書くのも面倒なので
openプラグマでまとめてデフォルトを指定したほうが楽です。
131 :
nobodyさん :2011/02/14(月) 18:04:43 ID:Nfx51quu
>>130 ありがとうございます。
@指定していない時の内部文字コードが何なのかは気にしないことにします。
A下記で問題ないということであれば"use utf8"を付けることで
内部文字コードがutf8になるという認識であっていますでしょうか?
use utf8;
use Encode;
open(FH,"./sjis.txt");
while(<FH>){
my $dec = decode('shiftjis',$_); #内部文字コードに変換
if( $dec =~ /[あア]/ ){
print $dec;
}
}
B下記をすることで内部文字コードがutf8でsjisファイルをopenした中身もutf8として扱える
ということでよろしいでしょうか?
use utf8;
use open ":encoding(shiftjis)";
ttp://takuo.main.jp/Cycling/weblib.htm のサイトを参考に更新順のソートが出来るようにいじっています。
昇順(1234...)でのソートはできたものの(古いものが先頭)、降順(最新が先頭)のソートが出来ません。
いろいろ試したところ、そもそも上記サイトのモノでは索引での降順のソート自体が出来ないことがわかりました。cgiより表示されるリスト表示は問題なく出来ているようですがログファイルの並び替えがちゃんと出来ないようです。
5
1,よみがな,カテゴリ,登録語,本文,投稿者,アドレス,,,,2011/01/12,ID,グローバルアドレス,
4,よみがな,カテゴリ,登録語,本文,投稿者,アドレス,,,,2011/01/13,ID,グローバルアドレス,
2,よみがな,カテゴリ,登録語,本文,投稿者,アドレス,,,,2011/01/14,ID,グローバルアドレス,
3,よみがな,カテゴリ,登録語,本文,投稿者,アドレス,,,,2011/01/15,ID,グローバルアドレス,
の昇順(51423)はできるが、降順(53241)はできない
3,よみがな,カテゴリ,登録語,本文,投稿者,アドレス,,,,2011/01/15,ID,グローバルアドレス,
2,よみがな,カテゴリ,登録語,本文,投稿者,アドレス,,,,2011/01/14,ID,グローバルアドレス,
4,よみがな,カテゴリ,登録語,本文,投稿者,アドレス,,,,2011/01/13,ID,グローバルアドレス,
1,よみがな,カテゴリ,登録語,本文,投稿者,アドレス,,,,2011/01/12,ID,グローバルアドレス,
5,
のようなログになってしまい、先頭の行が表示されない状態になります。
わたしの拙い検索能力でコマンドを色々探しいれてみましたが上手く動きませんでした。
上記アドレスの加えるコードのいろいろな部分に
$find = index ($line, ",", 0);
$find--;
$str = substr($line, 0, 3);
substr($line, -0) = $str;
を加えるなど
どうしたらよいか、教えていただけませんか。
reverse
map {$_->[1]} sort {$a <=> $b} map {[(split /,/)[0], $_]} @list sort {$a <=> $b} 昇順 sort {$b <=> $a} 降順
136 :
130 :2011/02/15(火) 11:05:13 ID:72K0WW0b
>>132 勉強になりました。
ありがとうございます。
ふと思ったのですが、shiftjisとsjisはどちらも同じなのでしょうか?
use open ":encoding(shiftjis)";
use open ":encoding(sjis)";
decode('shiftjis',$_);
decode('sjis',$_);
あと、sjisを使うならcp932を使っといた方が良いのでしょうか?
cp932はsjisと完全互換+windows用の文字ならcp932を使ったほうがよさそうなので。
137 :
131 :2011/02/15(火) 11:11:30 ID:???
>>132 勉強になりました。
ふと思ったのですが、shiftjisとsjisはどちらも同じなのでしょうか?
use open ":encoding(shiftjis)";
use open ":encoding(sjis)";
decode('shiftjis',$_);
decode('sjis',$_);
あと、sjisを使うならcp932を使っといた方が良いのでしょうか?
cp932はsjisと完全互換+windows用の文字ならcp932を使ったほうがよさそうなので。
shiftjisとsjisは単なる別名なので同じ。 sjisとcp932は一部の文字のマッピングが違うので目的によって選べ。 JISとMSがそれぞれ違う変換表を定義しちゃったのですよ。ほんと不便 で迷惑な話だが恨むなら先人を恨んでくれ。
139 :
137 :2011/02/15(火) 12:31:16 ID:???
>>138 ありがとうございます。
それってもしかして"〜"とかのことですよね?
何て迷惑なことを…
→ shiftjis じゃなくて cp932 で扱う。 〜 → 例のやつ。 いろいろめんどくさいのです。Encode::EUCJPMS を入れる用事ができてみたり。
全角<->半角変換するのにUnicode版とEncode版があるようですが、 どちらも処理速度や変換性能は似たりよったりなのでしょうか? それとも性能に差がありますか? $stringはshiftjisで入力し半角に変換 #use Unicode版 $hankaku = Unicode::Japanese->new($string, 'sjis')->hira2kata->z2h->get; #use Encode版 $euc = encode('euc-jp', decode('shiftjis', $string)); Encode::JP::H2Z::z2h(\$euc); $hankaku = $enc;
bechmarkでもしてろよ
他にも Lingua::JA::Regular::Unicode というモジュールもあります
べっちまーくwww
145 :
nobodyさん :2011/02/17(木) 01:14:23 ID:ql/X6pf8
perl初心者です。 os mac osx です。 ターミナルで、helloworldはできました。 次は、miでやりたいです。 設定に方法をわかりません。 どうやって設定すればよいでしょう?
まるちでしね
日本語不自由だな。 miって何だっけと思ってググったらエディタか そのまま保存してperlコマンドに渡せばいいだけだと思うけど何がわからんのだろう ターミナル操作までできてそこからわからないって珍しいな
質問です
ニコニコの動画情報のxmlをタグごと取得したいのですが
上手くいきません。コードは以下です。
--------------------
#! /usr/bin/perl
$data_file="
http://ext.nicovideo.jp/api/getthumbinfo/sm9 ";
open (IN,"$data_file") or die "$!";
@ary=<IN>;
close(IN);
print "Content-type: text/plain\n\n";
$xml_read=join("", @ary);
print "$xml_read";
exit;
--------------------
同一サーバにおいてあるxmlデータだと上手くいき
外部サーバにアクセスするとサーバーエラー?になります。
色々わかってない所があるので変な事いってるかもですが
よろしくお願いします。
そんなんで取得できたら苦労しません! LWP::Simple で get してくださいな
>>145 マカー初心者ならitoolsか@CHaTいけ
オサーンたちが教えてくれる
>>149 > そんなんで取得できたら苦労しません!
フイタwww
152 :
nobodyさん :2011/02/17(木) 16:07:46 ID:ql/X6pf8
>147 実は、ターミナルもよくわかってない ぐぐって、まねしただけ >150 thx いってみる
ニコニコっていうだけで書き込み見るきなかったごめん^−^;
大丈夫だよ、もともと誰も期待してないから
155って誰にいってんの? 独り言きもいよ
158 :
ぱるぱる :2011/02/17(木) 19:25:40 ID:???
159 :
ぱるぱる :2011/02/17(木) 19:26:56 ID:???
154に対する侮辱を撤退しろカス155
sub func{ my @array = ( 0 .. 5 ); return \@array; } my $ref = &func( ); ===================== のようなプログラムだと、@arrayはfunc( )を抜けるときに破棄されるから、 $refが持っているアドレスは無効になると考えて良いでしょうか?
無効にはならない メモリからは破棄されない
ぱーるはいちどかくほしためもりはおわるまでかいほうしなかったきがする
163 :
160 :2011/02/18(金) 01:58:12 ID:???
>>161 ありがとうございます。
$ref が @array を参照しているから、破棄されない、
ということでしょうか?
164 :
160 :2011/02/18(金) 02:03:03 ID:???
そもそも、関数を抜けても変数は破棄されない、ということでしょうか?
リファレンスカウンタが0になったらガベージコレクトされる
166 :
160 :2011/02/18(金) 06:18:31 ID:???
>>165 ありがとうございます。
日頃C++やっていて、最近Perlの勉強を始めたばかりでした。
この変数の寿命は本当に大きな違いでした。
助かります。
>>148 以下コードをスクリプトの先頭につけ加えればうまくいくと思う。
既存のopen関数の仕様と合わせるのに苦労した(マニュアルを見ると引数が1個とかもあるし)。
最後の引数の数によってCORE::openを羅列してるのと、未初期化変数がファイルハンドルに渡されたときの処理をうまくまとめられないものだろうか。
BEGIN {
my $re_scheme = join "|", qw(http https ftp file);
*CORE::GLOBAL::open = sub(*;$@) {
my ($filehandle, $mode, $file) = (@_, q{}, q{});
my $pkg = caller;
if( @_ == 1 ) {
no strict "refs";
${$filehandle} = ${"$pkg\::$filehandle"};
} elsif( ($mode . $file) =~ m{(($re_scheme)://.+)$} ) {
require LWP;
my $res = LWP::UserAgent->new(timeout => 30)->get($1);
return if not $res->is_success;
my $content = $res->content;
$mode = $mode =~ /^(\+?[<>])/ ? $1 : "<";
$_[2] = \$content;
}
if( $filehandle ) {
require Symbol;
my $fh_sym = Symbol::qualify_to_ref($filehandle, $pkg);
return @_ == 1 ? CORE::open( $fh_sym ) : @_ == 2 ? CORE::open( $fh_sym, $mode ) : CORE::open( $fh_sym, $mode, @_[2..$#_] );
} else {
return @_ == 2 ? CORE::open( $_[0], $mode ) : CORE::open( $_[0], $mode, @_[2..$#_] );
}
};
}
168 :
Perl忍者 ◆M5ZWRnXOj6 :2011/02/18(金) 13:51:27 ID:zGuGrruR
>>167 0点 javascript板におかえり
これはひどい。。。
ひゅひゅだよ
0点って言われるの嫌だろ? お前たちと同じこととしてやったんだよ
相当負けず嫌いな子供だな
175 :
133 :2011/02/21(月) 04:06:23.18 ID:???
# code of 2.(1) sub sort { @new = map {$_->[1]} sort {$a->[0] cmp $b->[0]} map { my($no, $index) = split /,/; # 索引を2文字に省略し、登録順と分類を合成 [substr($index, 0, 4).sprintf("%03d", $no), $_]; } @new ; } # sample code @new = (<<"END_OF_HERE_DOC" =~ /^(.+)/gm); 1,よみがな,カテゴリ,登録語,本文,投稿者,アドレス,,,,2011/01/12,ID,グローバルアドレス, 4,よみがな,カテゴリ,登録語,本文,投稿者,アドレス,,,,2011/01/13,ID,グローバルアドレス, 2,よみがな,カテゴリ,登録語,本文,投稿者,アドレス,,,,2011/01/14,ID,グローバルアドレス, 3,よみがな,カテゴリ,登録語,本文,投稿者,アドレス,,,,2011/01/15,ID,グローバルアドレス, END_OF_HERE_DOC $, = "\n"; print "-before-", @new, ""; &sort; print "-after-", @new, "";
do{ local $/; <FH> }; ってよく見かけるんですが join "", <FH>; は何かまずい所があるんでしょうか 手元のベンチだと join の方が早いんですが…
>>177 ベンチをしたコードをさらしてもらえます?
あと、環境も(OS、Perlのバージョン等)
自分の環境でも試してみたいので。
自分が以前したときは、
read FH, my $buf, -s FH;
が速かった記憶が。
バイナリーモードでよかったら、バッファーを使わない
sysread FH, my $buf, -s FH;
もかなり速かったような。
179 :
177 :2011/02/21(月) 16:28:15.29 ID:???
>>178 use Benchmark qw(:all);
cmpthese(1000000, {
'DO' => sub {
do{ local $/; <DATA> };
},
'JOIN' => sub {
join '', <DATA>;
},
});
__DATA__
abc
def
ってやってたんですが、ふと気になって
open my $fh, '<', "./$0" or die;
do{ local $/; <$fh> };
とすると、do{ local $/; <FH> }; の方が高速でした。ごめんなさい。
あと教えて頂いた sysread が一番高速でした。ありがとうございました。
もう必要ないかもしれませんが、環境は
Mac OS X 10.4.11
% perl -v
This is perl 5, version 12, subversion 1 (v5.12.1) built for darwin-2level
>>179 <DATA>でreadlineを1回コールすると、ファイポインタが末尾まで行くので、seekで先頭
に戻す必要があるんじゃないかな?
my $pos = tell DATA;
sub {
seek DATA, $pos, 0;
do{ local $/; <DATA> };
}
sub {
seek DATA, $pos, 0;
join '', <DATA>;
}
あと、データ量が少ない(2行)ため、join '', <DATA>;では2要素のリストしか作られ
なくて、local $/;の元の$/をプッシュする作業のほうがコストがかかっているのかも。
perlのcgiをサイトに設置するのはいいけどこれってソースコードぱくられたりしないの?
これはなかなかいいギャグがきたなww
181=182 自問自答乙wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
181だけどなんで答えてくれないの?イジメ?
>>183 ざんねんでした
181 と 182 は別人だぉ!
ActivePerl 5.12.3でベンチしたけど、slurpモードはデータの行数が少ないと遅いみたい。 行数が増えるとさすがに逆転するけど。 use Benchmark qw(:all); my $pos = tell DATA; cmpthese( timethese( 0, { '$/ = "\n"' => sub { $/ = "\n"; seek DATA, $pos, 0; () = <DATA>; }, '$/ = undef' => sub { $/ = undef; seek DATA, $pos, 0; <DATA>; }, })); __DATA__ abc def ____________________________________________________________________ Benchmark: running $/ = "\n", $/ = undef for at least 3 CPU seconds... $/ = "\n": 4 wallclock secs ( 2.37 usr + 0.77 sys = 3.14 CPU) @ 19753.90/s (n=62126) $/ = undef: 4 wallclock secs ( 1.87 usr + 1.31 sys = 3.19 CPU) @ 15287.91/s (n=48692) Rate $/ = undef $/ = "\n" $/ = undef 15288/s -- -23% $/ = "\n" 19754/s 29% --
教えてください。 perlでメールを受信するために、NET::POP3を使って サーバにアクセスしようとしたところ、途中で止まってしまいます。 1 # モジュールの読みこみ 2 use Net::POP3; 3 4 # POPサーバにユーザ名とパスワードで接続 5 my $pop = Net::POP3->new('hoge.jp') or die "Cound\'t Connect to POP server\n"; 6 $pop->login('oooooooo', 'xxxxxxxx') or die "Authentication failed\n"; 7 8 $pop->quit; 5行目で、"Cound't Connect to POP server"のエラーコードをログに記録して終了しています。 Net::POP3は、コマンドラインで perl -e "use Net::POP3"として、エラーが出ないのを確認しています。 ソケット通信の許可関係で接続できないで終わってしまうのでしょうか? もしそうであれば、どのように許可すればよいか参考になるヒントをいただければ幸いです。 よろしくお願いいたします。
5 my $pop = Net::POP3->new('hoge.jp') or die "Cound\'t Connect to POP server: $!\n"; 6 $pop->login('oooooooo', 'xxxxxxxx') or die "Authentication failed: $!\n";
外と通信が禁止されてる共有鯖ってゆうオチは無いよね?
190 :
187 :2011/02/23(水) 00:15:00.37 ID:HlQuDHDG
>>189 cgiは、hoge.jp上で動作し、hoge.jpへ接続するのですが…
サーバはFreeBSDです。
ソケット通信の許可は、どのように行うのでしょうか?
共用サーバですが、ある程度の設定は自分でできるようです。
怪しい匂いがしてきた!w サーバーの利用規約とかに外に出ることを許可されてるか確認を。
192 :
187 :2011/02/23(水) 22:33:57.42 ID:???
個別のCGIについては、無料サポート対象外。 どうしてもっていうなら、金よこせ言われたorz ソケット通信が許可されてるかどうか、確認するにはどうしたらよいでしょう?
use LWP::Simple;
my $content = get("
http://www.yahoo.co.jp/ ");
これで取得出来なければ無理。
そもそも LWP が無いかもしれないので、Socket 使うなら
use Socket;
my $port = getservbyname('http', 'tcp');
my $host = 'www.yahoo.co.jp';
my $ipaddr = inet_aton($host);
my $sock_addr = pack_sockaddr_in($port, $ipaddr);
socket(SOCK, PF_INET, SOCK_STREAM, 0);
connect(SOCK, $sock_addr);
while(<SOCK>){ print $_ }
close SOCK;
かな。
194 :
187 :2011/02/24(木) 00:10:34.04 ID:???
>>193 ありがとうございます。
明日、仕事中にこっそり試してみます。
おかげさまで、外部通信可能なことが判明しました。 cgiを叩いて、yahooページを表示させることができました。 次に、Net::POP3による接続ですが、'hoge.jp'へのアクセスではなく、 'localhost'へアクセスするようにしたところ、エラーが出なくなりました。 原因は、これから確認していこうと思います。 もし、思い当たる節がありましたら、お教え頂けると助かります。 アイディアを出していただいた方々には、重ねてお礼申し上げます。
110、25、458が外にいけなかったりね てか、いい加減サポートにメールしれw
>>196 独自cgiのサポートは、有料だそうですorz
スレ住人の方々には、お手数をおかけして、申し訳ありません。
さて、アカウントへログインし(おかげさまで、ここまで順調です)
メール内容を、ファイルへ書き出すことができました
ところが、このcgiをエイリアスから呼び出して動作させたところ、
ファイルの書き出しを行えませんでした。
メールログを確認したところ、呼出し後のステータスが
stat=Can't create output
となっておりました。
エイリアスからの呼び出しは、パーミッションの関係で、
書き出しできないのでしょうか?
また、どのように設定すれば、書き出しできるようになるでしょうか?
chmod a+w *でしね
あのな、サポートと仕様を教えて貰う事は別問題だろw そこのレン鯖はクソすぎるから解約しれw
>>198 シェルから当該ディレクトリのパーミッションを、
ご提案のとおり変更してみましたがダメでしたorz
上書きではなく、受信ごとに新規ファイルを作るようになってるので、
個別のファイルでなく、ディレクトリを変更したのですが…
>>199 弟が、商売で使ってる鯖に寄生してる状況なので、なんとも;
ドメインはがして、逃げられるようにしたいと思ってはいますけどw
年額4000円しないんだから、個人で契約しなよ
202 :
nobodyさん :2011/02/25(金) 15:54:11.05 ID:gYvrY45z
LWP で GET して、GD で処理
204 :
nobodyさん :2011/02/25(金) 17:52:34.19 ID:gYvrY45z
thx ただGDを使う所がわからないしそもそも使ってない気が・・・
携帯端末用にファイルを分割し ってのを、大きな1枚の画像を表示するには携帯には荷が重いから、 たとえば9分割して表示またはダウンロード用のリンクを張るって意味で 捉えたから GD が必要って書いただけ。 あと携帯用に表示するなら縮小表示された方がいいから、GD なり ImageMagick なりが必要なのかなと
binmodeで直接結合してるだけなのか・・・ スレ汚し失礼
>>202 のメールフォームは法的にまずくないか?
送信先が自由で、作者のメアドから好き勝手にメール送り放題になってる。
みんな、どんなHTMLパーサーつかってる? 私は、HTML::TagParserだよ HTML::Parserむずかしそうだったから使ってないよ HTML::ParserのほかにTreeBuilderとかあるけど みんな何使ってるの?教えて
PerlでCGIを作成し、別のPerlスクリプトを実行して標準出力を受取っています chomp($stdout = `$command`); 全く同じ条件でCGIを実行しても、 空文字列しか得られない場合と正常な結果が得られる場合があり、仕方なくこうしています $stdout = ''; while (!$stdout) { chomp($stdout = `$command`); } 理由の分かる方、いらっしゃいますか?
別のスクリプトは確実に結果を返すの?エラーとか全くない?
>>210 そのwhileループは危険すぎる。機関銃のように子プロセスを作りまくる恐れあり。
$commandの中身と、$stdoutに入る値のペアを書き出すなどしてデバッグしてはいかが。
それから、空文字列しか得られないとき、エラーになっているなどということはないのか。
`$command 2>&1`などとしてエラー出力も見てみるなど。
213 :
210 :2011/02/26(土) 23:43:51.29 ID:???
>>211-212 スクリプトで何もせず、Hello Worldだけなら結果を受取ります
また、毎回同じテストデータを使って試している段階なので、エラーはありません
ただ、気になるのは、スクリプトがHello Worldだけなら一瞬で終わりますが、
本来の処理をCGIで呼出すと30秒くらい掛かります
(Windowsのmsysで実行すると1秒掛かりません)
タイムアウトで空文字列しか得られないしかような気がします
214 :
210 :2011/02/27(日) 01:29:32.88 ID:???
213の訂正です テストデータは2種類あって、スクリプトを A:msysで実行してもCGIから呼出しても、一瞬(毎回成功) B:msysで実行してもCGIから呼出しても、30秒くらい(msysでは毎回成功、CGIでは空文字列が返ることあり)
215 :
nobodyさん :2011/03/03(木) 12:34:41.67 ID:3YMYo08Y
携帯からTwitterへの投稿クライアントを作っています。 Net::Twitter::Lite モジュールを使ってます。 $twt->get_authorization_url(callback => 'コールバックURL'); ↑のようにコールバックを指定してもアプリ登録で指定したURLへ 戻ってしまいます。動的にコールバックしたいのですが良い方法は ないでしょうか。
あ;い;e;e;e う;え;e;e;e お;か;e;e;e と並んでいるデータがあるのですが、;e;e;eが重複しているデータを削除して お;か;e;e;e でまとめるにはどうすればいいですか?
>>216 俺の読解力がないのか質問の意味がわからん。その3つの例はなんだ?その3つがあったら最後の1つになるってこと?
;e;e;e が出現する行は 「お;か;e;e;e 」 にしちゃいたいってこと? そんなん if(instr(〜)){} で十分だし、一番高速。
219 :
216 :2011/03/06(日) 00:47:41.71 ID:???
説明不足ですみませんでした。 2つ目の;以降の文字列を比較して重複していたら同じ行を削除するという処理をしたいと思っています。 あれからググったりして調べたのですが、一つ目の;の区切り以降の文字列を比較して重複行を削除するということは open my $data,'<',$file or die "$!"; my @array =<$data>; close($data); my %count; @array=grep(!$count{split(/;/,$_,2))[1]}++,@array); でできるようにはなったと思うんですが、この先が分からないです。
>>219 重複行は後のものを残すのか先のものを残すのか、
出現順は保存する必要があるのか、
;が2つ以上無い行はどう扱うのか。
#!/usr/bin/perl -w
use strict;
my %data;
/^([^;]*;[^;]*;)(.*)/ and $data{$2} = $1 while <DATA>;
print map "$data{$_}$_\n", keys %data;
__DATA__
a;b;1;2;3
c;d;4;5;6
e;f;1;2;3
g;h;1;2;3
i;j;4;5;6
k;l;7;8;9
>>220 ありがとうございます。
何度もすみませんでした
Perlって今から覚える意味はありますか? あとPHPみたいにモジュールとして動かせますか? <?perl echo "テスト";?>みたいに
mod_perl
embedperlだったっけ
>>222 今からPerlを覚えるのはやめたほうがいいでしょう。
復権するかどうかわからないけど、復権してから覚えればいいかと。
WEBならとりあえずPHPで、CやJavaをするのもいいかもしれない。
Perlやってるやつは凄いんだよ 悪魔の証明だから、証明される側だから 一生その証明される側でいられる PHPは証明する側 Perl使いはPHP使いより凄いってなってるから 凄いっていう特権えられるから くやしそうだねPHP使いは
CGIならSpeedyCGIとの相性がよかったな。Perlは。 導入の際のコード周りの小細工も最小限で済んだし。 コード修正してもCGI呼び出し時の都度新しいコードで走ってくれたし。 速度もmod_perlとあまり遜色なかったし。
定期的にSpeedyCGIの話したい人が現れるね。
230 :
nobodyさん :2011/03/09(水) 17:25:24.81 ID:AodX13TO
http://upload.restspace.jp/src/upload1724.zip.html にファイルをまとめてあります。
サンプルとなるようなプログラムを改良してみたtest.plですが、期待通りに動きません。
どこが悪いのか、ご指摘いただければありがたいです。
やりたいこと
deseq_result.txtのtagというカラム
annotated_all_tags.txtのtagというカラム
を比較します。
deseq_result.txtのtagの要素がannotated_all_tags.txtのtagと一致すれば
deseq_result.txtのカラムの最後にannotated_all_tags.txtのtag以外の要素を加えます。
カラム名でいえば、
tag baseMean baseMeanA baseMeanB foldChange log2FoldChange
pval padj resVarA resVarB origin description variant
と並べてresult.txtに出力したいのです。
既にこの時点でつまずいていますが、
もし、deseq_result.txtのtagの要素がannotated_all_tags.txtのtagと一致しない場合は
そのままdeseq_result.txtのすべての要素をresult.txtに出力したいです。
どうぞよろしくお願いします。
if をネスト
私みたいなバカに力を貸してください 文字列を16進に変換して、変換した16進文字の 上位ビットと下位ビットを入れ替えて出力したいです。 例 0xABCD → 0xCDAB packで変換すると0xBADCと出力されてしまいましたorz 正しく出力させるやり方をご教授ください
こんなこともわからないの? 答える気ないけどさ 見た瞬間考えればわかる問題ってわかるよ
>>233 まあ力技で並び替えるしかないんじゃないか
入れ替えるってあったハズだが?
>>233 それ「上位ビット」と「下位ビット」ではなくて「上位バイト」と「下位バイト」だよね。
方法は何通りもあるだろうけど、16進文字列が必ず4文字(2バイト分)なら
$hex =~ s/([\da-f]{2})([\da-f]{2})/$1$1/i とか。
238 :
237 :2011/03/10(木) 00:11:19.74 ID:???
>>237 超間違えた。すまぬ。訂正。
$hex =~ s/([\da-f]{2})([\da-f]{2})/$2$1/i;
>>233 の質問はどういう意味でしょうか?
どなたか(本人でもいいですが)私に教えてください。
>文字列を16進に変換して、変換した16進文字の
これは、unpack("H*", "\xAB\xCD")をしたということでしょうか?
それとも後述にpackが出てますので、pack("H*", "ABCD")をしたということでしょうか?
>例 0xABCD → 0xCDAB
これは、文字列"ABCD"を文字列"CDAB"に変換するということでしょうか?
あるいは、"\xAB\xCD"から"\xCD\xAB"への変換でしょうか?
それとも、0xABCDという数値を0xCDABという数値に変換するという意味でしょうか?
(前後の文との整合性からこれではないと思いますが)
>packで変換すると0xBADCと出力されてしまいましたorz
packのどういうフォーマットを使ったら、文字列"ABCD"を文字列"BADC"に変換
(あるいは"\xAB\xCD"から"\xBA\xDC"への変換?)できるのでしょうか?
それとも、pack("h*", "ABCD")をして、"\xBA\xDC"が得られたという意味でしょうか?
もしそうならば、文字列"ABCD"を"\xCD\xAB"に変換したいというのが質問の趣旨でしょうか?
どこでもいいよ Catalystなら専用スレあるよ
ここはコーディングスレだろぼけ? なんでCatalystだけ専用にたててんだよバカ? Perlフレームワークスレでいいだろ
フレームワークによってはルールが異なる
フレームワークの比較なら
>>242 の提案でいいが・・・
ダサい名前wwwww
linuxの中で、perlのsystemなどを使って、suになって root権限の処理をすることって出来ますか?
バイブみたいな名前だなww
249 :
246 :2011/03/14(月) 22:17:39.42 ID:???
ここでこの質問大丈夫かな… 文字列の最初の数文字だけを表示させたいのですが、方法がわかりません。 よく見かける「あいうえおあいうえおあいうえお」ってのを「あいうえお...」とするやつです。 なんという語句で検索したらいいでしょうか?
少なくとも専用の関数は無い
>>250 先頭の文字だけ取得して..をお尻に足せばいいじゃん
>>250 >>1-2 length $str > $max and substr($str, $max) = '...'; # $str が UTF-8 フラグ付き文字列の場合
それだと$strの内容が変わっちゃうから印字だけ変えたい場合はあまりよくないネ
DBD::mysqlをインストールしたいのですが、上手く行きません。 mac os x 10.6.6でオリジナルのperlを使ってます。 DBD-mysql-4.018をcpanから落とした所まではよかったのですが、 カレントディレクトリでperl Makefile.PLを実行すると下記のように Can't exec "mysql_config": No such file or directory at Makefile.PL line 82. Cannot find the file 'mysql_config'! Your execution PATH doesn't seem not contain the path to mysql_config. Resorting to guessed values! 略 To change these settings, see 'perl Makefile.PL --help' and 'perldoc INSTALL'. Using DBI 1.607 (for perl 5.010000 on darwin-thread-multi-2level) installed in /System/Library/Perl/Extras/5.10.0/darwin-thread-multi-2level/auto/DBI/ Writing Makefile for DBD::mysql と表示が出るのですが、その後にmakeをするとエラーが出ます。 どなたか、解決策を教えていただけませんか?
mysql_config でぐぐれ
>>256 mysql_configで探した所、
"mysql_config"を
"/usr/local/mysql/bin/mysql_config"に
変更すればいいとの記載があり、変更した所エラーは減りましたが、で前述のようになりました。
Can't exec "mysql_config": No such file or directory at Makefile.PL line 82.
Cannot find the file 'mysql_config'! Your execution PATH doesn't seem
not contain the path to mysql_config. Resorting to guessed values!
解説のサイト等ではダブルクオーテーション中の"mysql_config"のみ、
"/usr/local/mysql/bin/mysql_config"へ変更するように
指示がありそのように実行していますが、
この段階でも前述のエラーが発生してしまいます。
それ以上は検索しても対応方法が明記されておりません。
今後どのように対応すればよろしいですか?
mysql_config が置いてあるところにパス通して実行しろってことだよ 当然その場所は環境による
ありがとう御座います。 $ PATH=${PATH}:/usr/local/mysql/bin $ export PATH $ LANG=C $ export LANG でパスを変えて、実行した所、perl Makefile.PLではエラーは発生しなくなりました。 ただ、次の段階のmakeで gcc-4.2 -c -I/System/Library/Perl/Extras/5.10.0/darwin-thread-multi-2level /auto/DBI -I/usr/local/mysql/include -Os -g -fno-common -fno-strict-aliasing -arch i386 -DDBD_MYSQL_INSERT_ID_IS_GOOD -g -arch x86_64 -arch i386 -arch ppc -g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -I/usr/local/include -Os -DVERSION=\"4.018\" -DXS_VERSION=\"4.018\" "-I/System/Library/Perl/5.10.0/darwin-thread-multi-2level/CORE" dbdimp.c dbdimp.c: In function 'alloc_param': dbdimp.c:212: warning: format not a string literal and no format arguments 略 /usr/libexec/gcc/powerpc-apple-darwin10/4.2.1/as: assembler (/usr/bin/../libexec/gcc/darwin/ppc/as or /usr/bin/../local/libexec/gcc/darwin/ppc/as) for architecture ppc not installed Installed assemblers are:/usr/bin/../libexec/gcc/darwin/x86_64/as for architecture x86_64 /usr/bin/../libexec/gcc/darwin/i386/as for architecture i386 dbdimp.c: In function 'alloc_param': dbdimp.c:212: warning: format not a string literal and no format arguments dbdimp.c: In function 'alloc_bind': 略 dbdimp.c:4630: warning: format '%d' expects type 'int', but argument 5 has type 'IV' lipo: can't open input file: /var/tmp//ccyuWkYq.out (No such file or directory) make: *** [dbdimp.o] Error 2 とのエラーが出ました。 これについても詳しい解説のあるサイトがほとんどないので、 対応方法の指示を頂けませんでしょうか?お願いします。
PPCは老害 消えろかす
262 :
nobodyさん :2011/03/20(日) 22:33:15.21 ID:h8lG7QxI
getpost5.htmlで、東京と入力してgetformdatatest5.cgiがgetformdata5.plの内容で結果を表示します。 この時のgetformdata5.plはuse utf8を使い、getformdatatest5.cgiもuse utf8を使った場合は、文字化けが出ます。\x{04cc}\x{02de} getformdatatest5.cgiのuse utf8を消すと、正常になります。perlで、何が起こっているのでしょうか。 getpost5.htmlは、下記の内容です。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>関数化してデータを受け取る</title></head> <body> <table align=center><tr><td nowrap> <form action=getformdatatest5.cgi target=_blank method=get> input1 <input size=70 type=text name="input1" value="東京"><br> input2 <input size=70 type=text name="input2" value=""> <input type=submit value="送信"> </form></td></tr></table> </body> </html> getformdatatest5.cgiの内容は、つぎに書きます。
263 :
nobodyさん :2011/03/20(日) 22:35:25.72 ID:h8lG7QxI
getformdatatest5.cgiの内容は、下記です。 # パッケージ化た版 use Encode; use utf8; binmode STDIN, ":encoding(cp932)"; binmode STDERR, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; require 'getformdata5.pl'; %formdata = plab::getformdata(); print "input1 : $formdata{'input1'}<br>"; print "input2 : $formdata{'input2'}<br>"; # vim:set ft=perl: getformdata5.plの内容はつぎに書きます
264 :
nobodyさん :2011/03/20(日) 22:40:49.86 ID:h8lG7QxI
getformdata5.plの内容は下記です。 package plab; # vim:set tw=64 ft=perl fenc=utf-8: use Encode; use utf8; binmode STDIN, ":encoding(cp932)"; binmode STDERR, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; sub getformdata { local $rawdata; local %formdata; local @inputs; local($input, $name, $val); if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $rawdata, $ENV{'CONTENT_LENGTH'}); } elsif ($ENV{'REQUEST_METHOD'} eq "GET") { $rawdata = $ENV{'QUERY_STRING'}; } 続く
265 :
nobodyさん :2011/03/20(日) 22:42:29.56 ID:h8lG7QxI
@inputs = split('&', $rawdata); print "Content-type: text/html\n"; print "\n"; foreach $input (@inputs) { ($name, $val) = split('=', $input); $val =~ tr/+/ /; $val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("H*", $1)/eg; $formdata{$name} = decode('cp932',$val); } return %formdata; } 1; 以上、宜しくお願いします。
266 :
nobodyさん :2011/03/21(月) 01:05:29.89 ID:75CcT3RP
先ほどのは、長過ぎたので要約したもので再度質問をします。 100-1.plは、下記の内容で動きます。 use utf8; binmode STDIN, ":encoding(cp932)"; binmode STDERR, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; print decode('cp932',pack("H*","895088e4")),"\n"; 所が、101.plで100-0.plを動かすとエラーになる。 "\x{0250}" does not map to cp932. "\x{0224}" does not map to cp932. \x{0250}\x{0224} 101.plで、何がおかしいのだろうか。 .続く
267 :
nobodyさん :2011/03/21(月) 01:06:55.82 ID:75CcT3RP
101.plは下記の内容。 use utf8; binmode STDIN, ":encoding(cp932)"; binmode STDERR, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; require '100-0.pl'; &print_test(); 100-0.plは下記の内容。 use Encode; use utf8; binmode STDIN, ":encoding(cp932)"; binmode STDERR, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; sub print_test{# 8950 88e4 print decode('cp932',pack("H*","895088e4")),"\n"; } 1; 宜しく、お願いします。
268 :
nobodyさん :2011/03/21(月) 11:07:55.39 ID:75CcT3RP
先程の101.plを下記の様に修正したら、今度はうまくいった。 何が起こったのだろうか。私には説明が出来ない。 101.plの内容 use Encode; {no utf8; require '100-0.pl'; $a = decode('cp932',&print_test()); print "$a\n"; } use utf8; binmode STDIN, ":encoding(cp932)"; binmode STDERR, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)";
binmodeを2回やってるから。 use Encode; use utf8; binmode STDOUT, ":encoding(cp932)"; print decode('cp932',pack("H*","895088e4")),"¥n"; binmode STDOUT, ":encoding(cp932)"; print decode('cp932',pack("H*","895088e4")),"¥n";
270 :
nobodyさん :2011/03/21(月) 13:07:17.65 ID:75CcT3RP
早速の解答、有難うございます。 基本的には、binmodeは、関係無く何回でも使いたいんだけど。 その場合は、下記の様な書き方しか出来ないんだろうか。 そこを、教えてもらえないでしょうか。 {no utf8; require '100-0.pl'; $a = decode('cp932',&print_test()); print "$a\n"; }
レイヤーは新しいのを追加していくものなので、何回も使いたいという 方を何とかした方がいいと思う。それにそのめんどくさい書き方に意味が あった訳じゃなくて、101.plのbinmodeをやる前に実行される部分に 書いたからそこは二重にならなくて済んだってだけだしな。
272 :
nobodyさん :2011/03/21(月) 18:39:03.64 ID:75CcT3RP
有難うございます。 実は、下記の書き方と言うのは、テンプレートに入れている物だから。 これが、実装により影響をあまりされたくは無かったから。 しかし、これに関してはどうやら結論的には無理の様だ。 この件は諦めるべきなんだろうか。この辺は、良く分からん。 use utf8; binmode STDIN, ":encoding(cp932)"; binmode STDERR, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)";
273 :
nobodyさん :2011/03/27(日) 22:13:43.07 ID:2LYCAGvP
今cpanを インストールしている これは、おわるまで、何時間かかるの? もう1時間くらい続けたのだが。
275 :
273 :2011/03/27(日) 22:33:07.40 ID:2LYCAGvP
>274 linuxは、インストールを、はやいのですか?
はい
ActivePerlいれたら入ってこなかったっけ?
macです。 perlは、始めから、はいってました もしかしたら、cpanも、はいってる?
あたりめーだろぼけ
280 :
nobodyさん :2011/03/28(月) 13:22:01.97 ID:Zy8h0cnO
ありがとうございます。 今度は、cpanに、アップロードしようと思います。 で、アカウントをとるため、 The [Perl programming] Authors Upload Serverの、Request PAUSE accountを記入して、送信したのですが、 パスワードを、送られません。 どのくらいの時間を、おくられるまでにかかるでしょうか?
てめえみたいな2chバカがCPANにモジュールアップするな 汚染される
普通なら数時間から1週間ってとこだが、 I like a perl なんつーふざけた申請理由じゃさすがにハネられるだろ 万が一通ったとしてもおまえのモジュールはチラシの裏に書いてたほうが身のため皆のためだと思うが
だなハゲ
285 :
nobodyさん :2011/03/28(月) 15:01:11.26 ID:Zy8h0cnO
>数時間から1週間 ありがとうございます
286 :
nobodyさん :2011/03/28(月) 22:49:50.77 ID:fdyYV56o
HTML::TreeBuilder::XPathは、active perlのppmからは、インストール は出来ないのだろうか。 ppmからインストールする方法を教えてください。
XPathとか本気でいってるのか?wwww
xpathだけど 本気だけど。 出来ないの
WebScraperつかえよCSSセレクタで検索できてらくだぞ my $c=fetch CGI::Cookie; $cookie=new CGI::Cookie( -name=>"unko", -value=>{name=>'ken',mail=>'aho'}, -expires=>'+30m', ); $cookie->bake; #print $c->{unko}->value; print $cgi->cookie("unko"); 出力がnamekenmailahoになるんだけど これハッシュで返すことできないの? print [$cgi->cookie("unko")]->[1]; で取得するのがめんどくさいんだけど #print $c->{unko}->value; print $cgi->cookie("unko")->{name}みたいにできるやり方教えてください
>>290 Web::Scraper内でHTML::TreeBuilder::XPath使ってるでしょ
ばかか?使ってねえから俺が使う場合は
ppm4のguiでは、見つからなかったけどppm-shellでsearch xpathで見つ かっのでinstall xpathで出来ました。 有難う。
このまえ昼寝をしたくなったので、マクラに”Perl/CGI大全600の極意”を使いました 僕はこれを使って数回寝ましたよ 固くて寝心地悪かったですけど ん〜5回ほどですかね 天気がよかったので、マクラをほしちゃったときです 僕はマクラが無いので、どうしようか迷いました 本棚を探したらたまたまありました マクラになるものがないか探したのです 自分「うがううあうあうあうああああ 固いですね」 頭の角にくる固さ、しょうがないので後頭部に当てて寝ました 自分「スヤスヤ・・・」 数時間後・・・ どうやら寝てたみたいです ラクダ本で寝たときは寝起きには表面が汗でヘニョ!!ってなってました ですがこの本はなりませんでした表紙の作りが凄いかったです みなさん、Perl/CGI大全600の極意を使ってネタ人はいますか?
295 :
nobodyさん :2011/03/29(火) 15:41:26.49 ID:EwTY2x/7
YAMLがないって言ってるぽいから入れてみれば? 普通は依存関係があればそう書いとけば自動的にインストールされるように なってるんだけどうまくいってない感じだな。
297 :
nobodyさん :2011/03/29(火) 16:37:45.54 ID:EwTY2x/7
thx YAMLを、インストールしようとしたが、だめっぽい。 ooguma-katsuki-no-MacBook:~ 12we56ty$ cpan Terminal does not support AddHistory. cpan shell -- CPAN exploration and modules installation (v1.9205) ReadLine support available (maybe install Bundle::CPAN or Bundle::CPANxxl?) cpan[1]> install YMAL CPAN: Storable loaded ok (v2.18) Going to read /Users/12we56ty/.cpan/Metadata Database was generated on Tue, 29 Mar 2011 05:28:54 GMT Warning: Cannot install YMAL, don't know what it is. Try the command i /YMAL/ to find objects with matching identifiers. CPAN: Time::HiRes loaded ok (v1.9711) cpan[2]> i /YMAL/ No objects found of any type for argument /YMAL/
落ち着け。YMALってなんだよ(笑)
299 :
nobodyさん :2011/03/29(火) 17:02:19.03 ID:EwTY2x/7
間違ったw リトライする
300 :
nobodyさん :2011/03/29(火) 17:06:09.58 ID:mvtY1ceF
YAMLってなんだよっていう時期は誰にでもあるよ by Perl忍者
301 :
nobodyさん :2011/03/29(火) 17:09:02.71 ID:EwTY2x/7
もしかしてレンタルサーバか何かでやってる? testは全部通ってるし、rootでインストールせずユーザ権限でインストールしようとしてるように思えるんだけども。
303 :
nobodyさん :2011/03/29(火) 18:31:34.98 ID:EwTY2x/7
ネットワークのことは、よくわからない pcは、無線LANで、Bフレッツで、 サーバーは、plala ホームページ作るときは、レンタルサーバーは,yahoo ジオシティーズを使ってる これらは、関係ある?
書き込み権限がないのでインストールに失敗してるから、rootになれるなら rootになってから再挑戦。 レンサバでrootになれないとかだとデフォルトのインストール先になってる 共通ディレクトリには書けないから自分用の場所を指定しないとだめ。 「cpan インストール先」とかでぐぐれ。
306 :
nobodyさん :2011/03/29(火) 20:42:03.12 ID:EwTY2x/7
>305 おお! ありがとう 試す
cpanm 最高だ。 miyagawa++
308 :
303 :2011/03/29(火) 23:55:00.00 ID:EwTY2x/7
>305 thx! perlbrewと、 cpanmを、インストールできた! で、cpanm plaggerと、うったら、 最後に, 46 distributions installedとでたから、成功したと思われる! 助かりました thx
>>308 エラー出力のファイル非公開にしておいた方がいいよ
310 :
nobodyさん :2011/03/30(水) 09:11:48.19 ID:T5eYN1F8
>309 そうですね ありがとうございます
311 :
nobodyさん :2011/03/30(水) 09:33:07.38 ID:KhKgJB+7
miyagawa--
312 :
nobodyさん :2011/03/30(水) 10:13:24.93 ID:KhKgJB+7
miyagawa-=99999999999999999999999999999999999999999999999999;
て
miyagawa=伝説ポケモン miyagawa++ するやつはポケモンでいうミュウツゥーとかホウオウ、ルギア ミュウあたりばっかり使いそうだな 中2病発症してるのか?伝説ポケモンしか使わない奴 どうせパーティーは miyagawa miyagawa miyagawa miyagawa miyagawa dankogaiなんだろ?
あ、フォロワーがmiyagawaでしたか すみません^^ フォロワーがmiyagawaとか強すぎるやつフォローしてるやつは厨房
316 :
nobodyさん :2011/04/01(金) 14:16:06.86 ID:W50lEp9D
すいません 以前cpanmを、インストールしたものですが、使い方を分からないです. 続?初めてのperlを、読みながらやっています。 ターミナルで、何のコマンドを使うとよいでしょう?
317 :
237 :2011/04/01(金) 14:49:09.32 ID:???
「cpan 使い方」でググってみたら?
318 :
nobodyさん :2011/04/01(金) 16:35:50.72 ID:W50lEp9D
ぐぐりながら、
ターミナルコマンドを、よくわかってないので、cpanmを起動させそうな言葉を、たくさんうって当てる方法を、試してみた。
ooguma-katsuki-no-MacBook:~ 12we56ty$
に、続く言葉で、
wget
http://xrl.us/cpanm ???-bash: wget: command not found
cpanm -h???-bash: cpanm: command not found
これは、cpanmを、インストール出来ていないということでしょうか?
319 :
nobodyさん :2011/04/01(金) 17:25:47.59 ID:W50lEp9D
間違えた。 ?は、・です
ここに名前書いたらあのエラーページ消した意味ないじゃないかw cpanmはcpanm Web::Scraperみたいに打つとのあとのモジュールがインストールされるよ cpanm --help か perldoc cpanm でヘルプも確認できる
あぁ、
>>318 を全然見てなかった
perlbrewがちゃんと入ってるなら
>>321 の言う通りcurlで落とした後に
perl cpanm --self-upgrade
ってすれば最新版がインストールされるよ
self-upgradeした後は最新版の方が自動的に使われるので、rm cpanmでそいつは削除しちゃっていい
cpanってバックアップできるのしってた? これ知るまで 全部手動でやってたぞくそが
日本語のファイル名にするとファイル名が文字化けしてしまうんですが どうすればいいですか?
327 :
237 :2011/04/01(金) 20:54:55.85 ID:???
教え手管才237
>>327 ありがとうございます。
サーバーだからEUCでやればいいかと思ってたけど
shift-jisにしたらできました。
330 :
326 :2011/04/01(金) 21:55:24.67 ID:???
出来たと思ったら出来てませんでした。 全角アルファベットは出来るけどひらがなとかにしたらファイルが作成されません。
331 :
237 :2011/04/01(金) 22:07:09.39 ID:???
>>330 環境の文字コードは本当にshift-jisなのか
perlスクリプト自体の文字コードは何なのか
確実な解決策として「ファイル名に日本語を使わない」のはどうか
332 :
318 :2011/04/01(金) 22:30:59.26 ID:W50lEp9D
>20 前回は、ありがとうございました! cpanm Web::Scraperと、うつと、 -bash: cpanm: command not foundと、いう perldoc cpanmとうつと、 No documentation found for "cpanm".という cpanm--helpとうつと、 -bash: cpanm--help: command not foundという >321 ありがとうございます curl -o cpanm と、うつと、 curl: no URL specified! curl: try 'curl --help' or 'curl --manual' for more informationと、いう >322 rm cpanm とうつと、 rm: cpanm: No such file or directory と、いう perl cpanm --self-upgradeと、うつと、 Can't open perl script "cpanm": No such file or directoryと、いう cpanmは、はいってないようですね orz( ̄ー?)ホロリ 私は、Plaggerを、使いたいのですが、cpanmは、インストールできなくて、cpanは、root権限が、ないため、インストールできないという状況です。 何か良い方法は、ないでしょうか?
こだまでしょうか
いいえ ケフィアです
なんかlinuxの本を一冊買うとかサイト見るとかでコマンド並べてるサイト見た方がいいんじゃないかと思って来たわw
>>335 で全部解決して終わりそうな気がするけど
337 :
326 :2011/04/02(土) 01:04:09.23 ID:???
>>337 > jcode'convert(*fileName,"sjis",'euc');
ってperl4?
「perl cgi 日本語ファイル名 アップロード」でググってみたら。
そもそもアップロードする OS によって漢字コードが・・・ Linux でも途中からデフォルトの日本語が EUC-JP から UTF-8 になってたりするし。 FTP クライアントのファイルの漢字コード変換のとこも見直してみな てか、日本語ファイル名を使うこと自体がクソだからなぁ。。。
340 :
318 :2011/04/02(土) 07:00:24.43 ID:T9DATJpg
>335
curl -o cpanm
http://xrl.us/cpanm と、うちました
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
108 216 108 216 0 0 496 0 --:--:-- --:--:-- --:--:-- 1565
ググりましたが?です
どいうことですか?
>336 そうですね
自分で、理解出来るよう、行動します
342 :
318 :2011/04/02(土) 10:04:02.14 ID:T9DATJpg
343 :
nobodyさん :2011/04/03(日) 10:39:56.42 ID:EengHFO2
下記のperlを実行すると、下記のエラーが出ます。 何がおかしいのだろうか。sendmailがきちんとインストールされていないのだろうか。 教えてください。 Can't call method "auth_types" on an undefined value at c:\usr\usui\bin\sendmail\sendmail.exe line 206, <STDIN> line ---c:/bin/sendmail.iniの内容--- # SMTPサーバー名(ISPのものなど)を記入 MySMTPServer = smtpサーバー名 # SMTPサーバーで認証が必要かどうかの設定 # SMTP認証が必要ない場合 0 # SMTP認証が必要である場合 1 MySMTPAuth = 1 # SMTPサーバーで認証が必要(上記MySMTPAuthが1)の場合は # ログイン名とパスワードを記入 MySMTPLogin = ユーザー名 MySMTPPassword = パスワード 続く
344 :
nobodyさん :2011/04/03(日) 10:41:37.25 ID:EengHFO2
sendmailで下記のperlが実行出来ません。
お教え願います。
---perlの内容---
$sendmail = 'c:/usr/usui/bin/sendmail/sendmail'; # sendmailコマンドパス
$from = 'ユーザー名@yahoo.co.jp'; # 送信元メールアドレス
$to = 'ユーザー名@yahoo.co.jp'; # あて先メールアドレス
#$cc = '
[email protected] '; # Ccのあて先メールアドレス
$subject = 'test'; # メールの件名
$msg = <<"_TEXT_"; # メールの本文(ヒアドキュメントで変数に代入)
message line 1
message line 2
_TEXT_
# sendmail コマンド起動
open(SDML,"| $sendmail -t ") || die 'sendmail error';
# メールヘッダ出力
print SDML "From: $from\n";
print SDML "To: $to\n";
#print SDML "Cc: $cc\n";
print SDML "Subject: $subject\n";
print SDML "Content-Transfer-Encoding: 7bit\n";
print SDML "Content-Type: text/plain;\n\n";
# メール本文出力
print SDML "$msg";
# sendmail コマンド閉じる
close(SDML);
まずperl使わないでsendmailちゃんと動くか確認してから来いよ。
346 :
340 :2011/04/03(日) 15:48:41.69 ID:E3gmxmel
コマンド調べました で、再び、cpanに、入って、いろいろしようと思ったら、 Permission deniedと、出ます。 調べると、権限が、ないということらしい。 権限を、あるにかえたいのですが、どうしたらよいでしょうか?
347 :
326 :2011/04/03(日) 19:25:01.54 ID:???
>>338-339 レスありがとうございます
多分perl4です
日本語ファイル名を付けるのはやはり難しそうなので
自動でファイル名を付ける式に妥協することにします。
>>346 その色々がわからんとどこでpermissionのエラーが出たかわからん。何やったか書いてくれ
>>346 chmod +x cpanm
として、実行権限を与えたらOK。
ダウンロードした状態の cpanm は読み書きしかできない状態なので
上記コマンドで、これに「実行」の権限を与えてください。
# 紹介された日経のページにも「パーミッションを変更する」と
# あるので、そこを読んだり google 調べて理解してください。
取り敢えず、unix の知識に関してはこれ以上は必要とされないはず。
# ただ、おそらく次は $PERL5LIB が問題となるであろう。
あとは、plagger を使いたいだけならば
cpanm --self-upgrade
rm cpanm
cpanm Plagger
とするだけでいいはず。途中で XML::Feed::RSS あたりでエラーが出たら
cpanm -f XML::Feed::RSS
cpanm Plagger
としてください。
正直、IRC にでも参加して聞いたほうが効率いいと思われ。
350 :
340 :2011/04/04(月) 11:18:17.13 ID:+hWch3tX
>348 ありがとうございます ありがとうございます すいません 私のまちがいです 昨日は、cpanに、はいれなかったのです いろいろ試しながら、perl -MCPAN -e shellとしたら、はいれました 今は、大丈夫です
351 :
340 :2011/04/04(月) 11:46:37.89 ID:+hWch3tX
>349 詳しい説明をありがとうございます すみません Permission deniedの件ですが、私の間違いです cpanに、入るためのコマンドを、間違えていました 今は、大丈夫です この説明は、 cpanm、Plaggerを、使う時の参考にします また、IRCを、調べてみます 親切な対応をありがとうございます。
352 :
nobodyさん :2011/04/04(月) 14:51:26.01 ID:KBrQ7hfQ
use strict; use KCatch qw(source); で、strictの方のエラーが出ると500しか表示されないんですが、 エラーをちゃんと表示させる方法か、何か思い当たる問題点はありませんか? Undefined subroutineとか普通のエラーはちゃんと表示されます。 コマンドラインならstrictの方のエラーもちゃんと出ます。 fatalstobrowserを使っても同じ結果でした。
354 :
nobodyさん :2011/04/04(月) 17:06:42.94 ID:KBrQ7hfQ
>>353 見落としてました
ありがとうございます
shtmlのフォームからcgi(perl)に変数を送り、別途置いてあるcsvデータから 該当する物をhtml出力するものを作っているのですが その際のURLの拡張子は「.cgi?name=いろは」みたいになっています。 ところがSSIで表示しているサイトメニュー等も一緒に出力したいのですが 拡張子がshtmlで無いとダメなレンタルサーバーなので、結果表示がhtml形式で出力されても 拡張子がcgiだとSSIが無効になってしまいます。 検索結果出力の際の拡張子をshtmlにするにはどうしたら良いでしょうか?
357 :
237 :2011/04/06(水) 18:20:11.46 ID:???
そもそもCGIの出力にSSIって有効だっけ?
サイトメニューをCGIで読み込む
363 :
はげくん :2011/04/10(日) 13:46:14.77 ID:???
>amachang 今粛々と民事刑事の方面で進めています。一応、すべて証拠として保存しなければいけないので、冗談でも今はこのスレに変なこと書き込まないでください。
>2011/01/28
http://hibari.2ch.net/test/read.cgi/prog/1291518728/ >1 :amachang撲滅振興協議会:2010/12/05(日) 12:12:08
> amachangが憎い・・・・amachangが許せない・・・・
> ククク・・・・クククククク・・・・・
> クックックックックックックッ・・・・・
> クー、クー、クー、クー、クー、クー・・・・・
>
> もう許せない。
> もはや沸き上がる滅意を抑えることが出来ない!!!
364 :
nobodyさん :2011/04/10(日) 19:36:38.36 ID:/p/S0mfT
>>355 @shtmlのページからフォームでデータを送信
Aデータ処理
BHEADなどのページ表示に必要なものとデータを並び替えてHTMLデータを作る。
C適切なパーミッションに変更にしてからファイル名を.shtmlで生成。
○に数字文字使うとかカスすぎる
>>361 その辺は機転じゃないか?
例えば、本文か名前など項目の何処かに日本語コードが含まれて無ければ海外からの投稿
とか
認証画像付けて、かな文字打たせる
とか
ホスト逆引きするとか
頭の回転鈍いならこの先苦労するだけじゃね?
367 :
361 :2011/04/10(日) 23:53:19.29 ID:???
>>362 ありがとうございます。
試してみます。
>>364 .cgi で生成したhtmlのページの拡張子を指定するなんてこと、できるんでしょうか?
>>368 後ろでcgiは走らすだけで実際吐くのは.shtmlで、それを見せるって事なんじゃね?
cgiの表示結果をSSIでhtml文書の中に表示するのがshtmlなわけで。
ちなみにオイラは
>>355 の第二段落が意味不明だったりする。
今のところ、cgiで生成した文書の拡張子を変更したり指定することはできない、かと。
1 .shtmlから.cgiで出来たページへリンク 2 .cgiのページでいろいろ処理する 3 結果をファイルに書き出す その時ファイル名は〜.shtmlで保存 4 その新しく作ったファイルにリダイレクト とかで無理矢理できないかな
>>371 あの、shtmlを全くわかっていないんじゃないかい?
自身では理解できていると認識してるの?
3番がわからないんだけど、それはできた経験はあるの?
今までファイル保存した経験がcsv形式のデータファイルだけなもんで。
できるの?
もしできるのであればやってみたいです。
初めての試みになります。
横レスだけど3番の処理の何が問題になるの? ファイルに書き出してファイル名をshtmlにするだけだと思うのだけど。
>>374 今までshtmlでファイル書き出しをしたことがないので、
それもできるんだ?!とちょっと驚いただけのことです。
>>371 スマソ。理屈で考えると出来そうな気がする。
近日、やってみまつ。m(_ _)m
>>371 できました。
私の方が無知でした。
申し訳ない。汗
cgiからshtmlページの出力をするとは初めて考えました。
一人でやってると世界が狭まりますね。他人の発想の大切さを再確認しました。
これができるとなると、htmlページの自動生成ができることになりますね。
現時点ではまだどんな役立て方ができるかアイディアが無いのですが、将来使える日が来るのかな。
まだ初心者の域は出ていない私ですが、今後何かこちらからも良い話ができたらいいなと考えています。
>>377 おまいは一体…
どんな見えない敵と戦ってたんだw
ここの住民さんはどのくらいの技術もってるのか気になってきた…
>>378 私は、
・メールマガジン発行CGI
・掲示板CGI
・メールフォームCGI
・ショッピングカートCGI
が作ったことがあります。
どれもファイル作成はデータファイルなのでshtml形式で作るといった感覚は新鮮。
ウソくせえ 拾ったスクリプト弄っただけだろ
>>380 カートCGIなどは今も現役で動いてるよ?
いい情報を話し合う仲間欲しいけど、 2ちゃんねるでやってもどうも駄目なんだよね。何度かやったけど。 人間不信っぽくて。 出会いって 場 って重要だよね。 で、2ちゃんはそぐわないと。
なにいってんのこいつ?
他の場所が2chみたいにカジュアルだとおもってんの?
>>383 は?
かじゅあるwwwwwwwwwwwwwwww
387 :
383 :2011/04/15(金) 20:44:02.36 ID:???
ってことはお前・・・
だな?
ここの住民さんはどのくらいの技術もってるのか気になってきた…
と↑質問した378です。
>>379 大体のことはできるんですね。
外部ファイルのデータを取得しての処理とかはやらないの?
文字エンコード系の作業のストレスMAX感は味わってみた?
メルマガの発行はケータイかな?
8年ほど前だったかな…自分も作ったことありますよ。
たしかドコモだと31通目から同一のメ−ルを送ると弾かれるんだよね。
量が多いと時間がかるとクレームがきたときには苦労したな…
>どれもファイル作成はデータファイルなのでshtml形式で作るといった感覚は新鮮。
アクセスが多くて頻繁に動的な処理を行わない場合、
ページを生成したほうがperlにとっては都合良いから便利だぜ。
ちなみに自分は、完全自作で↓
お問い合わせフォーム(エラー表示・メール通知式)
掲示板(スレ式)
画像掲示板(スレ式・サムネイル・ロゴ埋め込み)
perl開発ツーツとしてエスケープ処理とタブ埋め込み処理「¥」
メルマガ発行(PC/ケータイ)
キーワード検索順位(大手検索エンジンの結果を取得して処理)
ショッピングカード(サムネイル・自働ページ生成・セッション方式・非セッション方式)
情報処理(グラフ表示式)
他…
個人的にはperlは大好きなんだけどね。
多くの人が2003年頃にPHPに移って過疎ったよね…
よろしくお願いいたします。
touroku.listファイルに次のように登録するようにしています。
user<>1<>passwdA<>
[email protected] <>172.0.0.1
それでこのuser自身が登録解除出来るようなスクリプトを作成しましたが
うまく動作しません。登録したパスワードと同じpasswdAを打ち込んでも
パスワードが違うとなります。又、違うパスワードを打っても
同様です。この場合は正常な動作ですが、、、
尚、打ち込んだパスワードと登録しているパスワードが変数に正常に
格納されているか、エラーメッセージ部に変数を入れてみましたところ
違うパスワードは$in{'pass'}に正常に表示され
$pasには登録済みのパスワードが表示されます。
しかし正常なパスワードを打ち込むと何故か$in{'pass'}は空白となり表示されません。
$pasだけ表示されます。
多分これが原因とは思いますが、
正常に$in{'pass'}には打ち込んだパスワードは格納されていることは
間違いありませんのでどうして正しいパスワードを打ち込んだときのみ
空白になるかわかりません。
<続く>
<続き>
まだ、スクリプト初心者ですがよろしくお願いいたします。
作成したスクリプトは下記です。
-----------------------------------------------------------
open (IN,$set{'touroku_list'})|| &error("touroku.listが読み込めません");
flock(IN,2);
while(<IN>){
my (@existfilepass) = split(/<>/);
my $existfilepass = $existfilepass[2];
$pas = $existfilepass;
if ($pas ne $in{'pass'}){&error2("<center><h3>パスワードが違います。$in{'pass'},$pas/h3></center>");}
}
close(IN);
-----------------------------------------------------------
追伸、それから、これでは最初の1行しか検索できないですが、
user<>1<>passwdA<>
[email protected] <>172.0.0.1
use2<>2<?passwdB<>
[email protected] <>171.0.0.2
のようにユーザが次第に増えてもそれぞれのパスワードを検索すにはどのようにすればいいのでしょうか。
出来ましたら、これもよろしくお願いいたします。
正常なパスを打ち込んだ場合 if ($pas ne $in{'pass'}){&error2("<center><h3>パスワードが違います。$in{'pass'},$pas/h3></center>");} この部分の$pas と $in{'pass'}が同じになるためerror2は実行されてないはずである 別の部分のエラールーチンで$in{'pass'}が表示されずに$pasが表示しているのではないだろうか 追伸の部分 user名とpassの組み合わせでチェックする
395 :
392 :2011/04/16(土) 18:14:51.69 ID:???
>>394 一部ミスのため訂正使用としたところ、
早速のレス有難う御座います。
正しいパスワードを打ち込んだ場合もerror2は実行されています。
尚、書き込みミスは同じパスワードの時空白の変数は$pasの方でした。
パスワードが違います。$in{'pass'},$pasのところで
違うパスワードの場合、
パスワードが違います。wrongpasswd,passwdAと表示され、
正しいパスワードの時は
パスワードが違います。passwdA, とコンマの次($pas)が表示されません。
正しい時のパスワードが何故空白になるかがわかりません。
378です。
>>391 すまん自重する。
>>393 foreachを使って格納させるのが手っ取り早い。
パスが一致してそのレコードに修正を加えたいなら↓の方法でどうだ?
#----------------
# $kakikomi の部分に変更を加えればパスが一致したものを修正が可能。
# ただしIDも一致させるためにif($data_b[2] eq $in{'pass'}){文に修正を加える必要がある。
# TAB消したので読みにくいが参考になればどうぞ。
続く↓
397 :
378 :2011/04/16(土) 18:26:55.25 ID:???
>>396 からの続き↓
# user<>1<>passwdA<>
[email protected] <>172.0.0.1
$data_f = "./filedata.pl";
$lock_f = "./flock";
open(LOCK,">> $lock_f");
flock(LOCK, 2);
open(DATA,"< $data_f");
@data_y = <DATA>;
close(DATA);
foreach $data_r(@data_y){
@data_b = split(/<>/,$data_r);
if($data_b[2] eq $in{'pass'}){
@data_k = @data_b;
$z1_no = $z1;
}
$z1++;
}
if($z1_no eq ""){
$kakikomi = "user<>1<>passwdA<>
[email protected] <>172.0.0.1";
splice(@data_y,$z1_no,1,$kakikomi);
open(DATA,"> $data_f");
print DATA @data_y;
close(DATA);
}
close(LOCK);
398 :
378 :2011/04/16(土) 18:29:23.07 ID:???
>>397 に文法エラーがあったので訂正する。387を参考にしてくれ。
>>396 からの続き↓
# user<>1<>passwdA<>
[email protected] <>172.0.0.1
$data_f = "./filedata.pl";
$lock_f = "./flock";
open(LOCK,">> $lock_f");
flock(LOCK, 2);
open(DATA,"< $data_f");
@data_y = <DATA>;
close(DATA);
foreach $data_r(@data_y){
@data_b = split(/<>/,$data_r);
if($data_b[2] eq $in{'pass'}){
@data_k = @data_b;
$z1_no = $z1;
}
$z1++;
}
if($z1_no ne ""){
$kakikomi = "user<>1<>passwdA<>
[email protected] <>172.0.0.1";
splice(@data_y,$z1_no,1,$kakikomi);
open(DATA,"> $data_f");
print DATA @data_y;
close(DATA);
}
close(LOCK);
399 :
392 :2011/04/16(土) 18:41:33.55 ID:???
>>378 複数ユーザーの場合foreachの方がいいのですね。
何故、$pasの中身が消えるか意味不明ですが、
もしかしたら、これで不具合も直るかもしれません。
明日ゆっくりこれを参考にして作成してみます。
有難う御座いました。
又、途中で解からなくなることがあるかもしれませんが
その時はよろしくお願いいたします。
先になぜ消えてるか追求したほうが為になると思うけど。
401 :
378 :2011/04/16(土) 18:55:32.36 ID:???
>>399 やりたい内容を詳しく書き込めば作ってここに載せてやるよ。
ログインや何かの登録解除程度のスクリプトなら10〜15分程度で完全オリジナルで作れるぞ。
おまいの疑問がよくわからんのでその方が手っ取り早いな。
それにロックの使い方があまい。
君の方法だと稀にデータが消えるかもしれないな。
393ので試してみたけど、空白にならないっていう touroku.listの1行目を改行してるって事はないよな
ずいぶんとレガシーなコードだな 10年前のコードをメンテしなくちゃいけなくてソース開いたときと同じ驚き
>>390 キーワード検索順位CGIはどうやったらいいのかわからないなあ。
そうそう。PHPが流行りだした時は私などはまだPerl初めて翌年くらいだったか。
これからやろうとしてた矢先のことで、進路変更するわけにもいかずそのままperl
けど、当初はまさかこれでショッピングカート作ることになり、物品販売することになるとは思っていなかったんで、
進みは非常に遅れてしまった。
これから遅れた時間を取り戻したいと思っています。
ケント大王が治めてた時代ですよ タイムスリップしてきたんですか? ようこそ
時空を超えてきたPerl使いよ ふぉふぉおふぉふぉふぉ
Perl業界の恥さらしPerl忍者君を笑うスレはこちらでよかったでしょうか
408 :
378 :2011/04/17(日) 00:47:14.31 ID:???
この板って…
lenで制限してるのかな?
>>404 キーワード検索順位は外部ファイルの取得をPHPにする方が色々と都合がいいよ。
取得したデータはperlを使って正規表現使って処理だね。
>>398 ユーザの一致チェックはどこでやってるんだこれ…
411 :
392 :2011/04/17(日) 12:14:05.34 ID:???
>>378 401のヒントで#pasの表示が消える理由が解かりました。
close<IN>;をif文の手前に置けば解決しました。
只、理由はわかったのですが原因がわかりません。
closeする前にデーターをいじっているので壊れたのだろうな
という漠然とした感じはあるのですが、理論だった理由は解かりません。
4,5年前に初めて作成したスクリプトが会員登録用で、それ以来perlは触っていません。
スクリプトもネット上で検索して見よう見まねで作成した付け焼刃です。
最近、このスクリプトを見て全く理解できず、
又、解除用スクリプトでも作成して勉強してみようかなと思ったわけです。
まだ時間が掛かりそうですが頑張ってみます。
有難う御座いました。
while文とかもう古いのでしょうか。
perl自体が古いだろ
適材適所だろ。 新しいとか古いとかじゃなく、目的に合わせて言語を選択すべきだろ。
414 :
392 :2011/04/17(日) 20:40:21.47 ID:???
古いでしょうが、完成しました。 これで、複数の登録者でも解除できるようになりました。 while文しかまだやっていないのでこれにしました。 すみませんがもしよかったら最近のかっこいいスクリプトでお願いします。 <続く>
415 :
392 :2011/04/17(日) 20:46:03.79 ID:???
<続き> open (IN,$set{'touroku_list'})|| &error("touroku.listが読み込めません"); flock(IN,2); while(<IN>){ (@existfileuser) = split(/<>/); $existfileuser = $existfileuser[0]; $userpas = $existfileuser[2]; last if ($in{'name'} eq $existfileuser); <続く>
416 :
392 :2011/04/17(日) 20:48:41.90 ID:???
<続き> } close(IN); if ($in{'name'} ne $existfileuser){&error2("登録ユーザでは有りません。");} if ($in{'pass'} ne $userpas){&error2("パスワードが違います。");\ } 以上です。
かっこよさとか言語はどうあれ、パスワードを平文で保存してるようなサイトは利用したくないなあと思うのでした
418 :
378 :2011/04/17(日) 21:21:56.81 ID:???
419 :
392 :2011/04/17(日) 21:28:14.54 ID:???
>>417 root下に置いても駄目でしょうか。
root盗られたら、もはや平文とかの問題ではないと思うし。
420 :
378 :2011/04/17(日) 21:29:27.26 ID:???
>>411 小さいなスクリプトなら、やりやすい方で良いと思うぞ。
whileでもforeachでもおk
421 :
378 :2011/04/17(日) 21:34:05.58 ID:???
>>417 自分の場合は、ID・パス・メアドの保存は特殊な処理をかけて保存してますよ。
当然ルーチン化させています。
その処理を通さないと元の英数字らりません。
若干処理は重くなるけれども、数百万単位のID管理が必要でなければ、セキュリーティー重視の方が安全ですよね。
422 :
392 :2011/04/17(日) 21:35:30.94 ID:???
>>378 有難う御座いました。
多分、ここで聞いていなかったら、投げやっていたと思います。
感謝します。
423 :
417 :2011/04/17(日) 21:42:31.96 ID:???
>>421 IDメアドは置いといて、まさかパスワードも復号可能なの?
それだと平文で保存してるのと大差ないと思うけど。
424 :
378 :2011/04/17(日) 21:45:33.63 ID:???
>>422 ここは2ちゃんだぞ。
一々そんなこと気にするなよw
所詮は便所の落書きだからなw
俺が糞して踏ん張ってる間に書いたスクリプト(実際に12分前後トイレで書いたし)で役に立つならそれはそれで結構。
425 :
392 :2011/04/17(日) 21:51:05.06 ID:???
>>378 例え便所の落書きでも役に立てば感謝します。
426 :
378 :2011/04/17(日) 21:54:46.67 ID:???
>>423 個人情報系のデータは、基本暗号保存させるのが常識。
DB使うまでもない場合でも、このご時世だから徹底しないとダメだな。
でなければ、情弱PGと言われてしまうぞ。
続き↓
427 :
378 :2011/04/17(日) 21:59:47.60 ID:???
続き↓
>>423 簡単に解析されなければ、どんな方法でも良いので行うべき。
パスはプログラムで暗号化させて暗号化されているパスのファイルが一致すればFALSE
その過程は、PGにしか理解できないものでOK
続き↓
428 :
417 :2011/04/17(日) 22:39:27.43 ID:???
俺が言いたかったのは、どんなパスワードであれ暗号化ではなくcryptなりshaなりでハッシュ化したものだけを保存するのが普通だよねという話。 暗号化というと鍵を持つ人物(管理者)には復号が可能である風に聞こえるけど、 利用者のパスワードを管理者が知り得る状態である必要性はどこにもないわけで。
429 :
378 :2011/04/17(日) 22:49:43.63 ID:???
続き↓
>>423 自分の場合は、1つのファイルにIDとパスをある複雑な法則で保存させ、
秘密の処理を行わなければ解読不能にしている。
暗号化復号はルーチン化させているので、処理が必要なときにかますだけ。
続き↓
何だろう、昨日から何か流れ的にスレ違いな気がするんだけどそう思ってるの俺だけなの?
リストの項目がわからないからどんなスクリプト作りたいのか深いとこまでわからないけど、
>>392 程度ならこんな程度でもいいんじゃないの?
use strict;
use warnings;
use Carp;
my($target_user, $target_pass) = @ARGV;
my $list = 'touroku.list';
open my $rfh, '<', $list or Carp::croak("$listが読み込めません");
my %pass_of;
while (my $line = <$rfh>) {
my($user, undef, $pass) = split /<>/, $line;
$pass_of{$user} = $pass;
}
close $rfh;
warn "ok"
if (exists $pass_of{$target_user}) && ($pass_of{$target_user} eq $target_pass);
少なくとも今から作るならmyは付けた方がいいと思うし、
テストしやすいように単体で動かせるレベルで一旦作るべきだと思う。
431 :
378 :2011/04/17(日) 23:02:42.22 ID:???
続き↓
>>423 かなり複雑にしているので、そのルーチン自体を読まないと解析不能だと自信を持っている。
>>425 そかそかw
432 :
417 :2011/04/17(日) 23:18:32.01 ID:???
>>430 久しぶりにこのスレでレガシーでないまともなコードを見た気がする。
>>431 聞いてもないことを丁寧に答えてくれて痛み入るが、
つまり管理者は(実際に復号をするかはともかく)利用者のパスワードを知り得るってことだよね?
だったら俺はそんなサービスを利用するのはできれば遠慮したいかなあ。
433 :
378 :2011/04/17(日) 23:22:31.56 ID:???
>>428 個人で利用する分にはcryptみたいな簡易的な方法で処理しても問題ないと思うが、
第三者が個人情報を入力するサイトなら話は別。
一度、暗号化の技術的な問題を調べると良いかも。
perlをある程度経験しているなら、好き好んでcryptを使うPGはいませんよ。
434 :
417 :2011/04/17(日) 23:32:38.86 ID:???
>>433 そりゃ crypt($pass) なんてド直球はありえないが、最低限saltはつけるだろうし、
さらに現実的には Digest::SHA::sha512_hex($pass, $salt) とかするでしょうよ。
それでも足りなきゃ適当に他のハッシュ関数を重ねがけするなりなんなり。
復号可能な状態で保存してるってのはまた別の問題で、それはそれで crypt($pass) とは違う意味でありえないって言ってるの。
435 :
378 :2011/04/17(日) 23:39:30.14 ID:???
>>434 $pass = crypt($pass,$salt); これで十分だとおもってるわけ?
話にならんわ…
436 :
417 :2011/04/17(日) 23:44:14.73 ID:???
1行しか読めないのか 話にならんわ…
お前ら平文パスで漏らした2chに喧嘩売ってるのか?
438 :
378 :2011/04/17(日) 23:45:01.05 ID:???
>>428 >俺が言いたかったのは、どんなパスワードであれ暗号化ではなくcryptなりshaなりでハッシュ化したものだけを保存するのが普通だよねという話。
w
439 :
417 :2011/04/17(日) 23:50:38.83 ID:???
双方向の暗号化・一方向のハッシュ化という対立軸の話をしてるのにcryptの部分だけ拾われましても
>>434 >さらに現実的には Digest::SHA::sha512_hex($pass, $salt) とかするでしょうよ。
Digest::SHA::sha512_hex($pass, $salt)は「cryptなりsha」に毛の生えたようなものだろ。
本気で言ってるのか?
いや、だからこの流れはスレ違いじゃね?板違いか。どっかにセキュリティのスレあるだろうからそこでやればいい
>>417 が言いたいのは手法の話じゃなくて
>>432 で言ってる
「サービス運営してる側がパスワードを生で持てる状態が嫌だ」
ってことだけでしょ。そのくらい読み取りなさいよ。
>>378 がいくら真面目な人だとしてもそのシステムをサポートする別の人が悪意を持って復号したら漏れるでしょ。
いくら注意しても1つのパスワードで複数のサービスを使い回してる人がいるんだからその危険性を指摘しただけだと思うよ。
変に煽り合ってスレ違いの方向に行かないでください。
目くそ鼻くそ状態。 脆弱な暗号化は好ましくない。 復号できる状態は好ましくない。 不毛だからやめよう。
444 :
392 :2011/04/19(火) 22:45:51.58 ID:???
ところでオラには
>>392 の%inがどっから湧いてきたかいまいち分からんのだが、ハンドルのINを
そのまま%inで扱えるという言語仕様じゃないよね?
CGI.pmでパラメータを突っ込んでるんじゃないかな
>>392 cgi-lib.plだったりして。
require 'cgi-lib.pl';
&ReadParse;
こんな風に呼ぶと%inにフォームデータが入るのを見たことがある。
s1 = "A123B" s2 = "A111B" s3 = "A321B" と文字列があった場合にs1以外を拾いたいです。 正規表現で "A[^(123)]B" としましたが、[]内は1文字で認識されるようでNGでした。 "A〜123ではない〜B"という正規表現はどのように書くのでしょうか?
そんな単純なものは eq で比較でえぇんとちゃうのん?
>>448 A と B の間が3文字固定なら
/A(...)B/ and $1 ne "123"
A と B の間が3文字固定でさらに数字固定なら
/A(\d{3})B/ and $1 != 123
でどうでしょう
正規表現一発じゃないけどね
test
$abc = 'dog'; $xyz = 'cat'; $str = $abc_$xyz; 以上だと、$strにcatだけが入っています。 dog_catというように入れたかったので、調べて以下のようにしたら、なんとかdog_catが出てきるようになりました。 $str = ${abc}_$xyz; ただこれの意味というかなぜこうなるのかの理由がわかりません。 なんで変数展開してんの?っていうかんじです。 どなたかこれの意味を教えて下さい。お願いします。
>>453 すいません。自レスで補足です。
上の例ですが、$str = "${abc}_$xyz"でした。
ダブルクオートなければ変数展開するものもしないですね。
すいませんでした。
_ が変数名に使える文字である以上、$str = "$abc_$xyz"; の最初の部分は、 perl にしてみれば $abc でなく $abc_ と解釈するしかない。 ${abc} とするなどして _ が変数名の一部でないというヒントを与えない限りは。 use strict; use warnings; を有効にしてさえいればつまずかない問題。
>>455 ありがとうございます!
use strict;とuse warnings;を書いたら
Global symbol "$str_" requires explict package name
って出ました。
それで{}を使ってstrと_を切り離すんですね!
勉強になりました!
>>456 すいませんでした。また自レスです。
出たの$str_じゃなくて、$abc_でした。
なんで$strって書いたんだろう。。。
458 :
448 :2011/04/25(月) 15:12:06.14 ID:???
Exporterって @EXPORTを省略したら パッケージ内の全てのメソッドが使われるんですか?
つかわれねえよ低レベルすぎる
462 :
nobodyさん :2011/04/25(月) 18:47:08.03 ID:dKWy1zZl
Activeperlで動いてと通常のperで動かないプログラムってありますか? またどちらの方がシェアが多いのでしょうか?
PerlはUNIX文化のものだからActivePerlはなんだかんだいって 茨の道ではある。覚悟して使え。
Windows用Perlを使ってる人は自分のホームページを少しいじくるぐらいの日曜プログラマーじゃないかな?(自分です) Linuxマシンまでいかない人でも最低、仮想環境を構築しているのでは?
CGIでフォームデータを取り込むときの話で、最後%FORMに値を入れるとき $FORM{$key}.="\0"if(defined($FORM{$key})); $FORM{$key}.= $val; これの最初で未定義値判定して、真なら\0を代入する理由と\0がそもそもなんなのかわかりません。 これを「""」に置き換えても何も問題はなかったので。 まあデータを送ってるから、そもそも未定義値にならないので、ifにひっかかるわけないので当たり前なんですが。 というか未定義値が入ることってあるんですか? あと最後に値を連結代入してますけど、これなんで、連結なんですか? 普通に代入じゃだめなんですか? 実際試したら連結じゃなくてもできたんですが、どんな意味があるんですか? 本買って勉強してるんですが、このあたりの説明がなくてモヤモヤしてます。 どなたか教えて下さい!
$FORM{$key} に $val を追記する前に区切り子として \0 を付加してるんじゃないの? つか、このスクリプトは行儀悪いな。
>>465 WEBフォームのチェックボックス等で同じname属性で複数の値が送られたとき、
>>466 が
言うように"\0"を区切り文字として付加しているんでしょう。
CGI.pmだと配列に入れてるけど、昔のcgi-lib.plとかでは、このように"\0"区切りで
格納してたみたい。
ありがとうございます! なるほど、name属性が同じなら区切り文字をいれないとですね。 本見たら、2002年初版って書いてますけど、やっぱり古いんですね? CGI.pmって何?って状態なんでその辺りも調べてみます!
今はもう2011年だし、、、 古く無いと言えるほうがおかしいだろ、
>>469 いやあ、古いからどうしようかな?とは思ってたんですけど
中古で100円で売ってていろんなスクリプト載ってたんで、、、
まあ一応使えそうだったんで買ってしまいましたww
まさか、そんな新しい技があったとか、さっきからググりまくりで軽く後悔してますorz
それ古いってことを差し引いても多分あんまりいい本じゃない それ読むくらいならネットの情報をあさって勉強汁
473 :
nobodyさん :2011/04/28(木) 16:08:40.29 ID:ToxFyCxg
perlってなんでswitchねーんだよ、死ねよクソ言語
正直、switch 無くても困らないなぁ
mod_perl での実行を考慮するなら、 my $abc = ''; じゃなくて、 my $abc; $abc = ''; と言う風にしたほうが良い。 ってゆう解釈で OK ?
478 :
477 :2011/04/28(木) 18:42:53.82 ID:???
>>477 これは忘れてくださいwwwww
どこか、mod_perl で動作する綺麗なサンプルないかしら。。。
479 :
477 :2011/04/28(木) 19:00:08.37 ID:???
色々ググってみたけど、mod_perl ってめんどくせぇな・・・
481 :
477 :2011/04/28(木) 20:36:46.56 ID:???
fatalsToBrowserが場合によってはエラーメッセージを表示してくれないんだけど、 コンソールで実行すれば見えるとかじゃなくて、ブラウザでfatalsToBrowserよりも確実に エラーメッセージを表示してくれるモジュールは無いのかしらん?
それmod_perlいれてるからだろはげ use libでパスかえろよはげ カスだなあカスカス mod_perlだとルートディレクトリがかわるんだよあhげ
use libと use Cwdつかおうなはげ^^
自分が分からない言葉とか使われるとそういっちゃうんだろうなお前みたいなやつ
うぷぷっぷぷ ううぇへへげろげおろげろきめぇwwww こいつきめぇwww早くしぬがいい
低レベルのお前よりまともだから安心してね雑魚^^
死ねまで入れるとは相当くやしかったようだね^^低レベル
バカvsバカワロス
Perl忍者>>>越えられない壁>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>
>>477
493 :
477 :2011/04/28(木) 22:07:46.83 ID:???
>>482 mod_perl なんてめんどくせーもんは入れてないよん
Perl忍者さんはヒマなんですか? 至るとこでどうでもいいことよく書いてますけど。
495 :
nobodyさん :2011/04/30(土) 16:42:10.13 ID:+DlTxLck
質問です。 $file="test.txt"; open (OUT, ">$file "); これでtest.txtが存在しなければtest.txtが作成されますが、この場合パーミッションはどのようになっているのでしょうか?
497 :
nobodyさん :2011/04/30(土) 17:14:22.86 ID:+DlTxLck
>>496 実行ユーザーで決まるんですね。わかりました。ありがとうございました。
どこを読めばそういう結論になるんだ? はっきり書いてあるのに。 > ファイルは 0666 をプロセスの umask 値で修正したパーミッションで 作成されます。
print $_->attr('action') if $_->attr('action'); って二回かくの大変なんですが 1回で済ますやりかたありませんか?
>>499 attr メソッドが副作用のない単なるアクセサなら
print $_->attr('action') || '';
>>499 ちょっとばっちいけど
{my $temp; $temp = $_->attr('action') and print $temp;}
とか?
502 :
nobodyさん :2011/05/02(月) 02:42:13.10 ID:fV7VGj7j
「文字列A 文字列B」 という 2 つの文字列の間に複数の空白がある行において /\s*/ でマッチさせると、変数 $` (=$PREMATCH) には何も入りませんでした なぜでしょうか? 入門書は「パターンマッチが複数解釈出来る場合には一番長い解釈にマッチする」とあります。 よって自分は \s* という「0 回以上のホワイトスペースの繰り返し」は 最も長い解釈では複数の空白にマッチし $` には文字列A が代入されるはずだと考えたのですが
503 :
1/2 :2011/05/02(月) 03:50:24.42 ID:???
504 :
2/2 :2011/05/02(月) 03:51:10.81 ID:???
> perl -Mre=debug -e "qq/abc def/ =~ /\s*/" Compiling REx "\s*" Final program: 1: STAR (3) 2: SPACE (0) 3: END (0) minlen 0 Matching REx "\s*" against "abc def" 0 <> <abc def> | 1:STAR(3) SPACE can match 0 times out of 2147483647... 0 <> <abc def> | 3: END(0) Match successful! Freeing REx: "\s*" > perl -Mre=debug -e "qq/abc def/ =~ /\s+/" Compiling REx "\s+" Final program: 1: PLUS (3) 2: SPACE (0) 3: END (0) stclass SPACE plus minlen 1 Matching REx "\s+" against "abc def" Matching stclass SPACE against "abc def" (7 chars) 3 <abc> < def> | 1:PLUS(3) SPACE can match 1 times out of 2147483647... 4 <abc > <def> | 3: END(0) Match successful! Freeing REx: "\s+"
505 :
nobodyさん :2011/05/02(月) 03:59:30.75 ID:fV7VGj7j
本題とは関係ないけど、p修飾子(/\s+/p)を付けて、${^PREMATCH}、${^MATCH}、${^POSTMATCH} で参照したほうがいいね。
507 :
nobodyさん :2011/05/05(木) 01:03:03.69 ID:TLWaU9+s
質問させてください〜 自宅サーバを立てて、アップローダーを作っているのですが、 ファイルサイズ制限をつけるために、apacheのLimitRequestBodyに値を設定しています。 一応、正常に機能して指定サイズ以上の物はストップしているようなのですが・・・ なぜか、エラーメッセージを画面に出力する時としない時があります。 (異常に大きいファイルをアップロードしたりするとメッセージが出力されない事が多いような・・・) そこで、Perlスクリプト側でエラーをキャッチして、 独自でエラーメッセージを出力したいと思うのですが・・・ なにか、エラーをうまくキャッチする方法はあるでしょうか・・・? Googleでいろいろ調べてもみたのですが、さっぱりです よろしくお願いします。
半角カナ、全角カナ → 全角ひらがなへ 全角の英数字、半角英数字の大文字 → 半角小文字の英数字 ※要するに全てひらがなと半角小文字英数字のみにしたい という処理を行いたいのですが、perl標準ライブラリで変換するにはどのようにすればよいでしょうか? Encodeだとカナ→ひら変換が無さそうでしたので。。 もし明らかに外部モジュールを使ったほうが良いならそれも検討してみますが、まずは標準モジュールでお願いします。 perl5.8を使用しています。
標準ライブラリにはなかったと思うが、ライブラリ使う までもなくtrすりゃいいんじゃねーの? ただし半角カタカナだと濁点半濁点が別の文字なのを 1文字にしたいとかいいだすとちと面倒なのでモジュール 使う方が楽だよ。
511 :
nobodyさん :2011/05/08(日) 00:12:04.38 ID:jiiJimq5
名前 treeboa
Web
http://d.hatena.ne.jp/treeboa/ 自己紹介 現在19歳学生です。
☆Perl団体 TreeBox代表取締役☆ お気楽チャットの開発スタッフ
Mac歴7年 OS9-OSX PPC perl,SQL
↓
150 名前:ハマティー(・´ω`・) ◆G5mpn6hSoY1y [sage] 投稿日:2010/11/02(火) 01:35:44 ID:RlQq7G3l0 (PC)
お気楽チャットにスタッフがツイッターで暴言はいてるってメール送ったら返事帰ってきた
ご連絡ありがとうございます。
お気楽チャットの管理をしております、ホッシーと申します。
そのユーザーがお気楽チャットに出没していることは
知っておりますが、うちのスタッフではありませんし
当サイトにとっても、マナーの悪いユーザーです。
当初、スタッフを希望していましたが、却下しています。
チャット上での暴言や自ら公認の開発スタッフを名乗ることが多いのですが、
相手にするのも大変なので、放置状態になっていたところです。
今後状況によっては、こちらでも対応してまいります。
どうぞ、よろしくお願い申し上げます。
513 :
509 :2011/05/10(火) 12:01:54.25 ID:???
>>510 ご意見ありがとうございます。
どのモジュールでどんな感じにコーディングすればよいでしょうか?
Zen2Han とかをキーワードにしググッてみ
今なら Unicode::Japanese を引っ張り出さずに
Lingua::JA::Regular::Unicode あたりで片付けるもんなのかな。
>>509 の要件どおりだとこんな感じ?なんか地雷踏んでそう。
use utf8;
use Encode qw/encode decode/;
use Encode::JP::H2Z;
my $str = "ヘンカンしたい文字列\nヴァイオリン\nバパビピブプベペボポ\n123AbcAaBbCc";
$str = encode('euc-jp', $str);
Encode::JP::H2Z::h2z(\$str);
$str = decode('euc-jp', $str);
$str =~ tr/ァ-ンa-zA-Z0-9/ぁ-んa-zA-Z0-9/;
$str =~ s/ヴ/う゛/g;
$str = lc $str;
my @list = "aaa 123", "bbb", "ccc 234 567");
foreach( @list ){
if( /^(\S+)\s+(.+)$/ ){
$name = $1;
$name_IGAI = $2 ? $2 : "none";
printf "name=%s name IGAI=%s",$1,$2;
}
上記でforeachで回す$_の最初の空白までは名前で、残りをその他の値として正規表現で拾いたいですが
2個目の要素"bbb"の後ろに何もない場合の書き方がわかりません。
※2つに分ければいいのですが、勉強のために一つの正規表現で表したいです。
http://www.din.or.jp/~ohzaki/regex.htm#Without の(?:(?!foo).)*あたりを参考にどうにかして書けそうな気がするのですが、
わかりませんでした。
どのようにしたら実現できるか教えていただけないでしょうか。
/^(\S+)(?:\s+(.+))?$/
>>516 my @list = "aaa 123", "bbb", "ccc 234 567");
は
my %list = ('aaa' => [123], 'bbb' => [qw/ccc 234 567/);
って書き直して、
foreach $key (keys(%list)){
〜
}
ってやればいいかと。
(あめ、あまやどり、あまみず、あめりか)を五十音順で、 (あまやどり、あまみず、あめ、あめりか)に並び替えたいのですが、 発想すら浮かびません。 何かスマートなやりかたはありませんでしょうか。
join '、', sort split /、/, 'あめ、あまやどり、あまみず、あめりか'
523 :
520 :2011/05/15(日) 14:22:10.48 ID:???
返信ありがとうございます たった1文でできるとは・・・Perl恐るべし 惚れました
>>520 >(あめ、あまやどり、あまみず、あめりか)を五十音順で、
>(あまやどり、あまみず、あめ、あめりか)に並び替えたいのですが、
それ五十音順と違う。
525 :
520 :2011/05/16(月) 10:07:15.86 ID:???
実行結果みて気付きました スルーしていただけると思ってたら・・・ ご指摘ありがとです
526 :
516 :2011/05/19(木) 09:02:31.06 ID:???
>>517-519 ご回答ありがとうございます。
今立て込んできてなかなか時間が取れないので
時間が出来たらゆっくり吟味したいと思います。
お返事遅くなりすみませんでした。
誘導されてきました。 utf8での記述やURLデコード、エンコード、文字コード全般に関しての取り扱いです。 とりあえず、utf8とperlの関係が分かってないです。 いろいろ困ってるのですが、今一番困ってるのはエンコードとデコードです。 簡単に書くとこうなります。 #-------------------------------------------- use strict; use utf8; binmode STDIN,":utf8"; binmode STDOUT,":utf8"; use URI::Escape; sub receipt () { my ($post, $get); read(STDIN, $post, $ENV{'CONTENT_LENGTH'}); $get = $ENV{'QUERY_STRING'}; return($post, $get); } sub my_decode (@){ my @decode = @_; foreach my $decode (@decode){ $decode = uri_unescape($decode); } return(@decode); } print my_decode receipt; #※HTMLにしてブラウザに出力
出力結果は、例えばブラウザから %E6%97%A5%E6%9C%AC%E8%AA%9E が送られてきた場合、上記でエンコードすると、 æ?¥æ?¬èª? こうなります。(完全に文字化けです)。 日本語 って表示されれば成功です。 どうゆうふうにデコードがおかしいのでしょうか? すみませんがお願いします。 もしかしたら、あとで別の文字コード関連の質問もするかもしれません。
>>527-528 URLはUTF-8でなくASCIIなので、以下は不要では?
#binmode STDIN,":utf8";
それから、URLデコードした文字列がUTF-8になるので、
use Encode;
$decode = decode_utf8 uri_unescape($decode);
とすべきと思うのですが。
>>529 そう言われると全くその通りでございます。
と言うかperlでutf8がどう扱われてるのか全く分かってませんでした。
ぐぐってるウチに扱い方が分かり、
入出力関係の関数を全部書き直して解決しました。
今までEUCとsjisしか使ってなかったんで助かりました。
ありがとうございます。
HTTP引数(POSTとかGETとか)でデータに多重構造を持たせたいのですが、決まった書式はありますか? それとも勝手に書式を定義してもどっかの誰かにナニコレ?とか言われませんか?
どっかの誰かがナニコレ?と言う可能性はいかなる場合でも常に存在する。 ところで多重構造って何です?具体的にはどーしたいの?
特に変わりのない普通の多重構造です。 例えばperlだと、 $post = { hogehoge1 => { hugahuga1 => data1, hugahuga2 => data2}, hogehoge2 => data3; hogegoge3 => { hugahuga3 => (data4, data5, data6,)}, }; と言うように収納できる形式ならそれでいいです。 一応名前付きと違う物を混ぜた形式にしましたが、実際にはどうでもいいです。 慣例化した物がないならこちらで定義するし、あるなら従おうと思っての質問です。
その構造を持ったデータをPOSTやGETで受け渡ししたい理由がよくわからない。 ていうかPOSTやGETってことはブラウザ側からサーバ側へ渡すってことだよねえ。 普通はFORMを使う訳で、その場合は受け渡しデータのフォーマットは決め打ちだから 自分で決める必要もないし、というか自分で決められないし。 セッション張りたいならサーバからブラウザのcookie等にセッションIDを持たせて、 データ自体はサーバ側で保持管理するのが一般的なやり方ではないだろうか。
>POSTやGETで受け渡ししたい理由がよくわからない。
いや、すみませんがよく分からないならいいんです。
それと、質問の内容と答えが違いますし…。
別に書く必要はないと思ってたし、こっちもその話は必要ないので書きませんでしたが、
クッキーはゲートウェイが通らない仕組みなんです。あと無理にやっても仕様が一本化されないし。
それと、行いたいのは保存や管理ではなく通信なんです。
とりあえず、質問に質問されても話がこじれるだけになってしまいますので、
>>532-535 の書き込みは忘れてください。
>>531 の質問が全てです。
一応答えはNOと頂いたと受け取っておきます。
整合性がとれてれば俺形式でもなんでも好きなのでいいと思うよ。 めんどくさいからjsonとかStorableとか世の中にあるものを 使っといた方がいいと思うけど。あるいはデータを丸ごと やりとりするんじゃなくてサーバ側に保存してidだけやりとりって のも考えられる。データ量が多いときはそういう方法も考えた方が いいね。
xml でも json でも、好きなの使えば良いかと
ありがとうございます。 特にキーワードを与えてくれて助かりました。 既存のほうが 何このフォーマット?勝手に作ったの?とか言われにくいんで。 ちなみにID管理はすでにしてますw。 一回の通信がちょっと多めなんです。 それが並列データで送られてくると、イチイチ個々のデータに対応しなきゃならなくてえらいめんどくさいんです。
xml はめんどくさいし、なんか仰々しいので JSON の方がおすすめかも
perlでcgiをコーディングし始めたものです。 xhtmlにて一旦ページをつくりそれを元に動的なページを作るために試行錯誤しています。 しかし問題が発生して困っております。 それは、表示の問題で、IE9では正常に表示されてるものがFireFoxでは表示が崩れるというものです。 ただ、一度xhtmlのページを作った段階では表示の差異はなくしてるのですが、これをperlに取り込む実行させると 同じ値を渡したページがFireFoxでは正常に表示されたり、崩れたりします。 ソースを調べてもxhtmlで作ったページとcgiで生成したページに違いはなく、cgiのほうだけ崩れたりそうじゃなかったりと原因が特定できません・・・ 何が原因と考えられるでしょうか?
541 :
540 :2011/05/31(火) 18:21:43.15 ID:???
追記です。 ちょこちょこ検証していて、おそらく print "Content-type: text/html\n\n"; の出力するタイミングでxhtmlのスタイルシートの読み込みが遅れると出力出来ないんじゃないかと疑っております。 ただ、現状でテストしていかないと原因が切り分けられそうにないので、 有用な情報があればいただければ幸いです。 原因が特定でき次第報告させていただきます。
543 :
540 :2011/05/31(火) 23:16:45.83 ID:???
>>542 お返事ありがとうございます。
識者の方に検証いただくのは願ったり叶ったりなんですがperlのコード自体が1000行以上あり
cssとイメージが連動してるんですが、大丈夫なものでしょうか?また、どうやって検証していただくかたちがいいでしょうか?
perl で出力してるページと、HTML を表示してる URL をプリーズ あと内部のばれたら不味いような部分を消してソースもくれ。 見なきゃ分からん
cgiからのヘッダーがごく微妙におかしい場合、無理くり読み込むブラウザや、表示を多少崩しても実行するブラウザや、 ちょっとでもおかしいと即座に実行を停止するブラウザとかあります。 ちなみに必要な改行数とかが、私の中では間違いやすく気付きにくいポイントです。改行コードの違いとか。 あとは文字コードの指定とか。 元HTMLとCGIからの出力に「本当に差異がない」場合は、ヘッダーのミスしか差異が起きる発生箇所がないかと思います。 あと、本当に差異がないのかどうか、目視ではなく、プログラムで検査したほうがいいです。 自分で作るか、適当にどっかからファイル比較ソフトをダウンロードしてくるか。
546 :
540 :2011/06/01(水) 02:05:39.47 ID:???
>>541 > print "Content-type: text/html\n\n";
> の出力するタイミングで
出力するタイミングって…
真っ先に出力されてるもんじゃないの?
もしかして $|=1; が入ってないからとか?
>>538 > 特にキーワードを与えてくれて助かりました。
「構造化 データ 交換 フォーマット」あたりでググればJSONやXMLくらいすぐ出てくるけどね。
でも既存のフォーマットを採用しても「なんでこれを採用したの?」と説明を求められたりして。
CGI の挙動おかしくない? レスポンスが HTTP/0.9 とか返ってくるんだけど・・・ 設定の労力は AnHTTPd も Apache もさほど変わらないから、 Apache で HTTPD を立て直したほうがいいと思う
551 :
540 :2011/06/02(木) 00:36:34.95 ID:???
got 403 Forbidden
553 :
540 :2011/06/02(木) 00:47:55.45 ID:???
見た感じ、プログラム自体は経験者なんですね。 で、 if ($int_nm_nm == "1") { は文字列として比較したいのか、数字として比較させたいのかはっきりと。 数字 → ==、!= 文字列 → eq、ne しかし SQL 文はさっぱりわかんねぇや(理解するつもりもそんなに無いけど・・・)
昨日の朝(AnWebのとき)
/contents/category/c01b.html → 200 Document Follows。やさいたべたい。
/contents/category/test001.cgi →
>>549 の言うように HTTP/0.9 で返って来てた。
今朝(Apache)
/contents/category/c01b.html → 200 OK。やさいたべたい。
/test.cgi → 404 Not Found
/contents/category/test001.cgi → 200 OK。でも text/plain でコードがでてくる。
403食らうって言われてごにょごにょしてるうちに AddHandler cgi-script .cgi 辺り殺したのかな?
XHTML の Content-Type は何にしとくのが無難かで地雷踏んでたわけでもなさそうだし
web鯖がおかしな動きしてただけかもしれない。
shebang の話はCGIが動く設定にすれば #!/usr/bin/perl にしてもコケるかも。windows だし。
うーん今時グローバル変数を使ってるのは見る気がしないぞ… それと、if文がでかすぎ。htmlをすべてhereドキュメントでコードの中に書くのはできればやめた方がよい。 今回のようにデバッグしにくくなるから。スカラー変数の多用もよくない。スカラーは限られたブロック内の 一時変数として使う程度にしておく。それ以外はハッシュを効率よく使うとよい。まあ好き好きだけれど。 $html = <<"HTML" のようなのだと、変数は展開してしまうから、意図しない置き換えが起きているとか。 単純に意図しているのとは違う書き出しをしているとか。 本来表示されるべきhtmlとのdiffを取るとか、firefoxならHTML validatorでおかしなところを拾うとか、 部分ごとにhtmlを作っているものをところどころにチェックポイントを入れて、少しずつチェックしていくとか すれば、「崩れる」原因は当たりがつけられそうだけれど。
いちおう〜エスパーしてみる ScriptAlias → コメントアウト DocumentRoot の内の Options に ExecCGI をプラス AddHandler cgi-script .cgi を有効に。
559 :
540 :2011/06/02(木) 23:24:27.30 ID:???
数々の方のお知恵、ダメだしをいただきありがとうございますm(__)m
うれしいです
>>554 あとあと use strict は通る道と思いつつ、あとまわしにしてしまいましたがエラーの切り分けには大切だと思います
修正してみたのですがどうでしょうか
>>555 全くのトーシローです
よくみると、ラクダ本からほとんど足を出してないほどだとおもいます
数字と文字によって変えたほうがいいのですね、勉強になります
560 :
621 :2011/06/02(木) 23:26:54.63 ID:???
>>556 はい、AddHandlerあたりをいじりました
windows環境でしたので#!/usr/bin/perl は#!C:/perl/bin/perlに変更しました。
コードの不具合で起きたのではないならそれでそれで骨が折れます・・・
>>557 アドバイスありがとうございます。
そうですね・・・ifの中にヒアドキュメントででかいhtmlは見栄えなども悪いと思います・・・ごりごり書いてたらこうなってました・・・
あとあと別ファイルとして分けるつもりではいますがいつになるかわかりません^^;
ハッシュは理解はしてるのですが実践的な使いようが良く分かっておりません・・・
IE9、Crhome、safari、FireFoxとテストしていますがいかんせんFireFoxだけこういう挙動になってしましました・・・
561 :
540 :2011/06/02(木) 23:28:32.26 ID:???
名前欄ミスってしまいました・・・
>>558 ScriptAliasを無効にした場合、ルート外のディレクトリのcgi-binのcgiも動くのでしょうか?
ExecCGI を書けばね
もし自分がデバッグするとしたら… ・元のXHTMLとCGIが出力したXHTMLの構造に不一致がないかチェック。 (これはもうやってるんだっけ?でもその後CGIいじったんだよね) ・上記を、IE9とFirefox(4?)の両者でそれぞれソース保存して違いがないかチェック。 ・HTTP ServerやSQLのログにヒントがないか見てみる。 ・ローカルプロキシ等でHTTPパケットをモニタして、IE9とFirefoxとで (また、Firefoxで表示の崩れる症状が出た時と出なかった時とで) パケットのやりとりに違いがないか見てみる。 あたりかな。
564 :
540 :2011/06/06(月) 00:45:44.08 ID:???
ちょっと忙しくレスが遅れて申し訳ありません・・・
>>562 もうすこし理解を深めたいですね・・・
設定ファイルは英語で丁寧に書かれていて英語をネイティブに読めたらどんなに楽か考えつつ翻訳してました・・・
やっぱり英語圏の方がソフトウェアに強いと言われる所為は英語で書かれている書籍やそもそもプログラミング言語自体が英語ベースだからでしょうか・・・
>>563 元のHTMLとCGIで生成されたHTMLを付きあわせてはやってみました
なるほど・・・別のブラウザ同士のソースを見てみるんですね
HTTPのパケットはどのようにしてモニターするのかわからない状况なのでまだまだ修業が必要ですね
ピンが通ったかどうか調べるだけでも骨が折れるレベルなので・・・
スパゲッティなperl cgiにアクセスログなどを保存するコードを簡単に追加できる方法を緊急で探しています
もうじき成立する法律で、自前サイトもってる人がログ保存してないと3年の懲役らしいのです
http://tanakaryusaku.jp/2011/06/0002432 半分以上がネットで拾ったコードの切り貼りなので中身把握をしてないので非常に困ってます
(貼りつけたときは入出力だけは把握してたけど今は憶えてない)
何か良い知恵はありませんでしょうか
ありません
マルチ野郎に示す事など御座いません
簡単にコードを追加できるものをスパゲッティとは呼ばん つまりスパゲッティと形容している時点で簡単にコードを追加できる方法などない ということだ あとそのリンク先のジャーナリストの書くことを鵜呑みにしない方がいいぞ 原発事故関連でもいい加減な記事書き飛ばしてるような奴だ
569 :
tokuhirom :2011/06/08(水) 16:54:43.75 ID:hreP7cYm
さいきんiphone晩モンスターハンターにはまってます それで僕もモンスターハンター作りたいと思いました JRPGの意思をついでCUI版モンスターハンターをつくりました みてください tokuhirom で検索すればモンスターハーター とくひろむ改が出てきますよろしくお願いします
570 :
tokuhirom :2011/06/08(水) 16:56:31.93 ID:hreP7cYm
クソシテネロム お得なヒロム モンスターハンターのアカムトルムっていう敵がいるんですが そのモンスターの名前が不満足だったので トクヒロムに変更しました 今後ともtokuhiromをよろしくおねがいします
3年の懲役w
メモ書き失礼します (後々に他の人のためにもなるかなと・・・) use AAA とした場合、package 名も同じにする必要があり、ファイル名とパッケージ名が異なる場合、 例えば AAA.pm に package ABC と記述があった場合は import ABC としなければならない。 1時間ぐらいずっと試行錯誤しててハマった。
あっ、関数を Export する場合のお話です。
そういう変なことはやめとけ
やっぱりぼくじゃ盛り上がりませんねな
あ
フォームから日本語を送信したときの動作に納得できない点があるので、教えてください。 (メモ:binmode STDIN, ":utf8"; で UTF8 フラグが付き、binmode STDOUT, ":utf8"; は UTF8 フラグが外される) ◆ TEST1 use utf8; binmode STDIN, ":utf8"; print $form->param('string'); -> utf8::is_utf8($form->param('string')) : flag on -> Apache Log : no Error ◆ TEST2 #use utf8; binmode STDIN, ":utf8"; print $form->param('string'); -> utf8::is_utf8($form->param('string')) : flag on -> Apache Log : no Error ◆ TEST3 use utf8; binmode STDIN, ":utf8"; $str = decode('utf-8', $form->param('string')) print $str; -> utf8::is_utf8($form->param('string')) : flag on -> Apache Log : Wide character in print 2回の投稿に分けます。
578 :
nobodyさん :2011/06/11(土) 02:49:03.81 ID:/YP2SwiA
TEST1 と TEST2 は何故 Wide character in print のエラーが出ないのでしょうか? テストのため binmode STDOUT, ":utf8"; は意図的に外してあります。 TEST3 で意図的に decode でフラグ立てたらちゃんとエラーが出ました。 ためしにソースに書かれた日本語を出力してみた ◆ TEST4 use utf8; binmode STDIN, ":utf8"; print "あいうえお"; -> utf8::is_utf8("あいうえお") : flag on -> Apache Log : Wide character in print ちゃんとエラーになる。
use utf8 は文字列リテラル(TEST4でいう「ソースに書かれた日本語」)をフラグ付きutf-8にする binmode STDIN, ":utf8" は標準入力から入ってきた文字列を以下同文 $form->param('string') がそのどちらでもないなら勝手にフラグは立たないと思うが、 TEST1〜4 の flag on ってのは実際に is_utf8 で確認したって意味?
580 :
nobodyさん :2011/06/11(土) 05:28:18.69 ID:/YP2SwiA
enctype の指定で application/x-www-form-urlencoded と multipart/form-data との違いも見てましたが、
multipart/form-data だと希望通りフラグが立ってると Wide character in print が出てくれますが、
application/x-www-form-urlencoded だとフラグが立ってても Wide character in print が出てくれません。
テストスクリプトです。
http://w3.podzone.net/charcode/ HTML、Perl スクリプト共に UTF-8 (BOM無し) です。
>>580 そんなに詳しくはないですが、、、
multipart/form-dataだと生データが来るので、UTF-8オクテット文字列を受け取ることになります。
(UTF-8文字列が来るという
>>580 の想定通り)
application/x-www-form-urlencodedだとURLエンコードされたデータが来るので、(URLで許さ
れる)ASCII文字列を受け取ることになります。
ASCII文字列が来るのに、
binmode STDIN, ":utf8";
として、utf8でdecodeするのは、URLデコードするときに害が出るのでやめたほうがいいでしょう。
(場合によっては意図してASCII文字列をUTF8フラグONにしたいときもあるかもしれませんが)
このフォームデータがUTF-8になるのはURLデコードした後なので、URLデコードした後にdecodeし
ましょう。
今回のように、Latin-1(0x00FF以下)の出力では、UTF8フラグONの文字列でも「Wide character
in print」の警告は出ないです。
どう見てもutf8フラグなんて立っていません。本当にありがとうございました。
僕はたちません 童貞ですから
それはEnd of Danseiki
小飼・男性器
こういう質問する人はたぶん文字コードと言えばSJISだと思ってる(というか 文字コードっていう概念を知らない)気がする
587 :
nobodyさん :2011/06/11(土) 20:52:26.82 ID:wROrwK/J
utfのフラグの質問なのに、なんでsjisを出すんだ? それにソースを見る限りはそこまで初心者って思えないけどな。 きみは良く「周りを見ろ」とか「憶測だけで物を語るな」とか言われるでしょ?
んでも、ネットに書いてあるからとりあえずそうしてみた程度で何も考えずコードコピペしてるようだし 文字コードの概念知ってても知らなくても大して変わらんとは俺も思う
590 :
580 :2011/06/11(土) 23:20:29.37 ID:9qKz+aFc
フラグが立ってるマルチバイト文字を出力すれば Wide character in print が出るんですよね?
>>581 ちょっとずつちょっとずつ理解してきたつもりだけど、application/x-www-form-urlencoded の時がまだ腑に落ちない。
例えば
use utf8;
binmode STDIN, ":utf8";
として application/x-www-form-urlencoded で日本語を POST したとき、
「%C3%A8%C2%B7%C2%AF%C3%A5%C2%9C%C2%B0%C3%A8%C2%A3%C2%8F%C3%A3%C2%81%C2%AF%C3%A3%C2%82%C2%B9%C3%A3%C2%83%C2%86%C3%A3%C2%83%C2%BC%C3%A3%C2%82%C2%B8%C3%A3%C2%81%C2%AB」
ってゆう文字列がくるんだけど、この文字列にフラグが立ってようが %C3%A8%C2%B7%C2%AF は 路 なので
「路地裏はステージに」
って文字列が CGI->param で得られるんだけど、CGI->param で得た文字列に対して utf8::is_utf8 で調べるとフラグが立ってると言われる。
でも CGI->param で得た文字列を print しても Wide character in print ってゆう warning が出てくれない。
変数は勃っててもデータは勃ってないから
>>590 %C3%A8%C2%B7%C2%AFは長いので、%C3%A8で説明します。
binmode STDIN, ":utf8";によって、%C3%A8というASCII文字がutf8としてdecodeされると、
%、C、3、%、A、8というutf8の6文字と認識されます(UTF8フラグがONされる)。
次に、CGI.pmでこれがURLデコードされると、"\x{00C3}\x{00A8}"というU+00C3、U+00A8の
2文字になります。
"\x{00C3}\x{00A8}"は両文字とも0x00FF以下(Latin-1)なので、printをしても
「Wide character in print」の警告は出ません。
Perl側から見ればprintによって、0xC3、0xA8というLatin-1の2文字を出力しますが、
ユーザー側がこれをUTF-8としてみれば、UTF-8の1文字として見えるでしょう。
594 :
nobodyさん :2011/06/12(日) 19:27:32.04 ID:+q+sCwIP
ファイルアップロードされた場合の容量チェックなんですが 受け取った後にチェックし容量オーバーの物は弾いているんですが 故意に大きなファイルを送られた場合サイト全体が重くなってしまいます。 受け取る前にチェックして弾けないでしょうか? デコード処理の先頭に if ($ENV{'CONTENT_LENGTH'} > 307200) {exit;};#300KB以上は弾く また、apacheのLimitRequestBodyは試したんですがどうも全部送りきってるようです
その議論はどっかでやったわ
597 :
580 :2011/06/13(月) 02:43:22.69 ID:DSl6uHf1
CGI 配下で動くものはサーバーが全て受け取ってからプログラムに渡すので無理 PHP は順次処理できたような気がするけど忘れた javascript で事前に弾くか、actionscript 使うかだと思うよ。
598 :
80 :2011/06/13(月) 16:28:06.18 ID:DSl6uHf1
>>592 なるほど。
だからフラグが立ってても Wide Character 〜 のエラーは無かったのか。。。
ありがとうございました。
599 :
580 :2011/06/13(月) 17:01:03.50 ID:DSl6uHf1
url エンコードで送られてきたデータは CGI->param で受け取った後、 utf8::downgrade でフラグを外すようにしてみた。
600 :
nobodyさん :2011/06/13(月) 17:30:07.28 ID:xEY/VF1J
自身のperlスクリプトで、自身が呼び出されたときのHTTPヘッダはどうやって見ることができますか? よろしくお願いします。
>>599 そんな回りくどいことをしなくても、単にbinmode STDIN, ":utf8"を外せばいいような。。
602 :
nobodyさん :2011/06/13(月) 17:41:40.00 ID:J8VXPdgR
$in->content_type
1から20ぐらい教えてもらわないと何も出来ない馬鹿なのさ
マニュアルを読(よ)みましょう
よよみましょう
(よ) がふりがなであることも理解できないとはPerlコーディング以前の問題か
607 :
nobodyさん :2011/06/14(火) 13:20:21.17 ID:z7HOILli
マジレスw
Hero セレクト画面 ジャスティス側の軍勢 Tokuhirom Yappo Yusukebe まつもとひろゆき カオティック側の軍勢 Mala ssig33 Mizuti otsune はまちちゃん
$string = 'まやら'; #'あいうわやえお'
$seach = '[わワワゎヮ][やヤヤゃャャ]'
$flag = 0;
if( $string =~ /$seach/ ){
$flag = 1;
}
SJISでひらがなを正規表現でマッチさせるとき、上記だと$flagが1になるようです。
文字コードの問題だと思い、
ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Match のサイトを参考に下記のように修正してみましたが、これであっていますでしょうか?
一応いくつかの文字列でテストしてみましたが、全てチェックできないので、助言をお願いします。
$string = 'まやら'; #'あいうわやえお'
$seach = '[わワワゎヮ][やヤヤゃャャ]'
$flag = 0;
$oneByte_sjis = '[\x00-\x7F\xA1-\xDF]'; # 1バイト SJIS文字
$twoBytes_sjis = '(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; # 2バイト SJIS文字
$character_sjis = "(?:$oneByte_sjis|$twoBytes_sjis)"; # SJIS文字
$seach = "^${character_sjis}*?(?:$seach)";
if( $string =~ /$seach/ ){
$flag = 1;
}
>>611 Shift JISのままパターンマッチングさせずに
文字コードを適宜変換して行なうが吉。
613 :
611 :2011/06/16(木) 13:11:47.01 ID:???
>>612 ありがとうございました。
検討してみます。
UTF8を使えば、こんなに簡単なのにな。 \p{InHiragana} ひらがな \p{InKatakana} カタカナ \p{Han} 漢字
>>611 マルチバイト文字はperlの内部文字コードにdecodeしてから処理しましょう。
大昔ならjperlの出番だったところだな jperlとかjgawkとかよくお世話になった
619 :
nobodyさん :2011/06/19(日) 18:59:58.29 ID:HRt28/QV
Perl忍者
名前 treeboa
Web
http://d.hatena.ne.jp/treeboa/ 自己紹介 現在19歳学生です。
☆Perl団体 TreeBox代表取締役☆ お気楽チャットの開発スタッフ
Mac歴7年 OS9-OSX PPC perl,SQL
↓
150 名前:ハマティー(・´ω`・) ◆G5mpn6hSoY1y [sage] 投稿日:2010/11/02(火) 01:35:44 ID:RlQq7G3l0 (PC)
お気楽チャットにスタッフがツイッターで暴言はいてるってメール送ったら返事帰ってきた
ご連絡ありがとうございます。
お気楽チャットの管理をしております、ホッシーと申します。
そのユーザーがお気楽チャットに出没していることは
知っておりますが、うちのスタッフではありませんし
当サイトにとっても、マナーの悪いユーザーです。
当初、スタッフを希望していましたが、却下しています。
チャット上での暴言や自ら公認の開発スタッフを名乗ることが多いのですが、
相手にするのも大変なので、放置状態になっていたところです。
今後状況によっては、こちらでも対応してまいります。
どうぞ、よろしくお願い申し上げます。
>>619 ご指定のページが見つかりません。
URLをもう一度お確かめ下さい。
遁走済
Perl忍者って確か犬板や雲丹板に糞スレ立ててた奴と同一人物かな? Perl忍者だか黒真珠だかなんかそんな単語見た記憶がある
624 :
nobodyさん :2011/06/26(日) 08:27:44.02 ID:RwbRFJ3B
ブログのエントリー ID を time() で付けて管理してますが、 SQL で何ページ分と言った感じで取り出してる場合、 指定したエントリー ID が何ページ目にあるのかを知る SQL なんてのはあるんでしょか? やりたい事の例) 1000 〜 10999 で1刻みで合計1000個の発言をして、 1ページあたり10件の表示 (合計で100ページ) そして例えば 10525 という ID を指定した場合に、その ID が含まれるページ番号 (この例なら 53 ページ目) を知りたい。
文字化けの修復について聞くのはスレ違いかな? 自作のクローラで utf8 のサイトを euc-jpで decode → utf8 に encode してしまい 豪快に文字化けしてしまったんですが、逆の操作をしても元に戻せません。 何かヒントでもいいので修復方法について案はないでしょうか。
連投すみません。 バイナリエディタで見たら大半の文字がREPLACEMENT CHARACTER(0xEF 0xBF 0xBD)に 置換されてました。修復不可能ですね。諦めます。
#!/usr/bin/perl use strict; use warnings; use TEST; my $oTEST = TEST->new() my $hoge = $oTEST->encode('utf8','ほげ'); ※1 print <<EOF; <!DOCTYPE html> <html> <head> <meta charset="utf8"> <title>$hoge</title> </head> <body>$hoge</body> </html> EOF exit; #---------------------------------------- package TEST; use strict; use warnings; use Encode; sub new{ my ( $oTEST ) = @_; bless{},$oTEST; } 1; オブジェクトの勉強中で、上記のcgi本体とパッケージがあった場合に質問です。 →次レスに続く
→続き @本体、パッケージ両方にuse strict; use warnings;は両方書かないと それぞれで効力がないという認識でよろしいでしょうか? ATESTパッケージでuse Encode;することで、cgi本体からは、オブジェクト$oTESTを使い $oTEST->encode()などでEncodeモジュールは使えないのでしょうか? Bperl5.8.8から内部文字コードはutf8になったとのことですが、 ※1の行は必要ないのでしょうか?
1.はい(現在のスコープ(ファイル末尾)まで有効) 2.$oTESTはTESTをblessしてる(print ref $oTEST)からEncodeとは無関係(Exportもpackage TESTにされる) それをしたいならour @TEST::ISA = qw/Encode/ 3.ソースに書くならuse utf8した(internal form)上で Encode::encode(q/utf8/, qq/日本語/)
>>630 継承させようがさせまいが
Package->encode(charset => 'string') は
Encode::encode('Package', 'charset', 'string') になるので
sub encode { shift; Encode::encode(@_) } のようなラッパーを書くか
Package::encode(charset => 'string') と呼ぶ必要があるように思うけど?
632 :
nobodyさん :2011/07/07(木) 15:51:40.27 ID:cTS/XVoB
久々にビシっと決まってる回答を見た気がするw
my $a = [ ['0', 'ぜろ' ], ['5', 'ご'], ['1', 'いち'], ['3', 'さん'], ['7', 'なな'] ]; 上記リファレンスの$a->[*]->[0]でソートするにはどのように書けばよいでしょうか?
まず $a って変数名をそこに使うのはよくないので $ref だとして、 my $sorted_ref = [ sort { $a->[0] <=> $b->[0] } @$ref ];
635 :
nobodyさん :2011/07/11(月) 17:13:15.62 ID:yD3+Z2kH
'' なので cmp または int 使って <=>
イランだろ…
>>635 int 付けるなんて何処の初心者サイトで覚えたんだ?
それっだけならまだしもcmp?!
% perl -MData::Dumper -le 'print Dump { $a <=> $b } qw( 2 12 )]'
$VAR1 = [
'2',
'12'
];
% perl -MData::Dumper -le 'print Dump { $a cmp $b } qw( 2 12 )]'
$VAR1 = [
'12',
'2'
];
コピペみすった。正しくは以下。 % perl -MData::Dumper -le 'print Dumper [ sort { $a <=> $b } qw( 2 12 )]' % perl -MData::Dumper -le 'print Dumper [ sort { $a cmp $b } qw( 2 12 )]'
639 :
nobodyさん :2011/07/12(火) 01:22:03.73 ID:wRYQ1jhA
>>637 cmp も <=> は結果同じになったよ@v5.10.0 built for MSWin32-x86-multi-thread
This is perl, v5.10.0 built for MSWin32-x86-multi-thread Binary build 1003 [285500] これでやったけど637が試したとおり <=> と cmp で順番変わったよ。
>>638 の2と12の間が全スペになってるせいではなくて?
642 :
nobodyさん :2011/07/12(火) 03:29:13.00 ID:wRYQ1jhA
コピペだから気が付かなかった
643 :
637 :2011/07/12(火) 05:13:11.16 ID:???
…重ね重ねスマン。
my $hostname = hostname(); $hostname =~ s/.jp//; のような処理をしているのですが、 これを my $hostname = s/hostname()/.jp//; みたいな記述で1行にまとめることはできませんか?
(my $hostname = hostname()) =~ s/\.jp//;
646 :
644 :2011/07/16(土) 08:40:37.68 ID:???
>>645 (ID変わってしまいましたが)
ありがとうございますm(_ _)m
648 :
nobodyさん :2011/07/24(日) 00:51:53.40 ID:dd4HTR7O
ブログを作ってるんですが、そのブログの中で頻繁に使う関数を別のファイルに追い出したのですが、 その追い出した関数郡を見直したときにオブジェクトにした方が楽になるのが幾つかありまして、 1つのファイルの中に3つほどのパッケージが存在すると言う状況になっています。 また、それらパッケージはそのファイルの中からしか呼ばれないものです。 で聞きたいことは、1つのファイルに複数のパッケージが存在して運用するのはイレギュラーなのかどうか。 です。 ちなみに package MyFunc; use base 'Exporter'; our @EXOPRTER = qw(testtest); sub testtest{ my $conf = CONFIG->new(); $conf->aaaa(); } package CONFIG; sub new{ my $self = shift; bless {}, $self; } sub aaaa{ } このような感じで使っています。
>>648 複数パッケージを1つのファイルにまとめる人もいるし、必ず分ける人もいる。
こんなところでアンケートを取るより、
手元の環境にインストールされてるモジュール群でも一通り調べてみたら?
class感覚で使うなら分けたほうがわかりやすい気もするが イレギュラーではないはず
ゴミみたいだな
C#使いの俺から見たら
>>648 の汚い忍者Perl文法がゴミのように見える
まあ、あながち間違ってはいない。 クラスというものがないから、無理やり作ってる。 C言語でオブジェクト指向をする規約みたいなもんだ。
653 :
nobodyさん :2011/08/02(火) 00:42:25.14 ID:??? BE:799668162-2BP(1450)
654 :
nobodyさん :2011/08/02(火) 22:39:54.28 ID:GJET7PYj
すみません、パターンマッチの質問です。
環境変数を参照してロボット排除したいのですが、うまく動作しません。
if($ENV{'HTTP_USER_AGENT'} = ~ /www¥.baidu¥.com/){
print "Location:
http://www.baidu.jp/¥n¥n ";
exit;}
ってすると、普通にアクセスしてもbaiduに飛んでしまいます。
何がいけないのでしょうか?
=~
あ〜〜、空けちゃいけないんですね、今の今まで知らなかった
レンタルサーバの場合、コマンドラインからモジュールのインストールが出来ないサーバがほとんどだと思うのですが、 cgiを置きモジュールを使いたい場合、どのようにインストールするのがスマートでしょうか。 (例)Email::MIMEやHTML::Templateのインストールなど 自分が思いつくのは、 自分のPCに使いたいレンタルサーバと同じ環境を作りそこでインストール → /usr/local/lib/*** をftpでアップロード ですが、これだと使うレンサバが複数だと管理がかなり大変だと思っています。 みなさんが運用されている方法や参考サイトなどありましたら教えていただけますでしょうか。
use lib
659 :
nobodyさん :2011/08/06(土) 15:05:39.24 ID:8kKKWIjR
use lib 'DIR' もし use lib が使えなくても、自身のディレクトリに PATH は通ってるので、 CGI が置いてあるディレクトリに置けばなんとかなる
660 :
657 :2011/08/06(土) 15:50:35.78 ID:???
>>658-659 ありがとうございます。
ちょっと質問の意図がうまく伝わっていないようですみません。
インストールしたモジュールの運用方法ではなく、
レンサバにどうやってインストールしているのか、の方法についての質問です。
sshログイン(コマンドライン)が使えるサーバであれば下記コマンドで簡単にインストールできますが、
ssh、telnetが用意されていない(コマンドラインが使えない)サーバで、モジュールをインストールするのに
なるべく簡単な方法を探しています。
cpan2rpm
yum
perl -MCPAN -e shell
質問の内容がわかりづらくてすみません。
ローカルにインストールしてzipなりtgzなりで固めてftpで転送して展開する コンパイルが必要なモジュールを含む場合は使えない手かもだが スマートな方法ってのはよくわからないけど たびたびアップデートする必要とかあるならスクリプトなりバッチなり書けばいいんでは
makeするCGIを書く
663 :
nobodyさん :2011/08/06(土) 21:03:23.04 ID:8kKKWIjR
pureperl なモジュールなら FTP でアップするだけ。 ssh とか入れない鯖が make 出来るとは思えないんで、pureperl なモジュールを探せばよいかと。
鯖缶に頼む
つか、1000円/月以下でレンタルできる VPSをなんで使わないの? 使えばインストールなんて簡単なのに。
>>665 500円/月以下でレンタルできる
ホスティングサービスが好きだからさ。
DTIのVPSは490円だお
DTIはアダルトコンテンツ禁止なんだよなあ(適法でも)
月500円程度で、無駄な努力 アホすぎるw
CGIからデータを吸い取ってこちらで加工したいと考えています lwpでアクセスを試みましたが401エラーで弾かれてしまいました どうやらIIS/5.0を使っている模様ですがどういう方法で接続するのか どなたでもかまいません、助けていただけませんか
>>669 よく理解できないまま参加してくるなよカス
>>672 てっきりこれが原因かと思い込んでました
認証がうまく言ってない事は間違えなさそうですね・・・
さてどうしたものやら・・・
URLどうもです!
>>673 どううまくいかないのか情報少なすぎ
とりあえず「lwp 認証」でググれ
>>674 ローカルで.htaccessを設定した自分のサイトへのアクセスができるかの確認⇒自動ログイン成功
そのまま自動ログインしたいサイトに接続を試すとやっぱり401.3で弾かれる・・・
↓エラー
HTTP 401.3 - リソース上の ACL によってアクセスを拒否されました。
インターネット インフォメーション サービス
具体的に
ソース張ればいいかな?
670です 二つの違いが少し分かりました Authorization: Basic eW***********************== となっているところが Authorization: NTLM TlRM****************************== cookie: __utma=******************** となっています これが原因でしょうか?
とりあえずその cookie を食えるように cookie_jar を用意しよう。
NTLM認証って分かったんだろ、それでcpanあたれよ
my $ret = system( "ssh host command" ); としたとき、私の環境では、hostへの接続自体が失敗したときには 65280 を commandの実行で失敗(存在しないコマンドの指定など)では 32512 が返されます。 しかしこの戻り値について言及された資料が見当たらず困っています。 65280 -> 1111 1111 0000 0000 -> (8ビットシフト) -> 255 32512 -> 0111 1111 0000 0000 -> (8ビットシフト) -> 127 のように何かルールがあるのかなぁ、とも思っているのですがお手あげ状態です。 環境は OSはRHEL 5.5、Perlは5.8.6です。 アドバイス願いします。
682 :
681 :2011/08/08(月) 03:45:28.40 ID:4gZkXztU
失礼しました。ageます。 my $ret = system( "ssh host command" ); としたとき、私の環境では、hostへの接続自体が失敗したときには 65280 を commandの実行で失敗(存在しないコマンドの指定など)では 32512 が返されます。 しかしこの戻り値について言及された資料が見当たらず困っています。 65280 -> 1111 1111 0000 0000 -> (8ビットシフト) -> 255 32512 -> 0111 1111 0000 0000 -> (8ビットシフト) -> 127 のように何かルールがあるのかなぁ、とも思っているのですがお手あげ状態です。 環境は OSはRHEL 5.5、Perlは5.8.6です。 アドバイス願いします。
ねえなんで資料がないとかぬかすわけ? perlfuncにしっかりと書いてあるんですけど
>>679 やってみます
>>680 ,684
ありがとうございます私のほうでも何回か試しましたが、It didn't work!と出ていました
Mydomain\\ユーザー ←ドメイン・・・とはどれを指すのでしょうか
686 :
657 :2011/08/08(月) 11:20:55.90 ID:???
>>661 ,662,663,664,665
ありがとうございます。
pureperlであれば<<663さんの方法でいけますが、問題はバイナリを使う場合ですね。
pureperlで代替できる場合は問題ないですが、代替が無い場合は
ローカルで同じOS環境を作ってインストール(コンパイル)→インストールしたディレクトリ一式をftpでアップロード
しか方法はないのでしょうか。
※
>>662 を見て思ったのですが、これはcgiからsystem("make〜")などを使いインストールするということでしょうか?
具体的にどういう意味か教えていただけないでしょうか。参考サイト情報でも構いません。
>>686 うちで借りてるのは安い共用ホスティングサーバだけど
sshでログインもmakeでコンパイルもできるよ。
まずは今どきmake(コンパイル)も使えないサーバはやめて
makeできるサーバに変更をおすすめします。その方が早い。
$HTMLの中身に <DIV class="list"> <a href="1.ここがほしい"> <IMG onload=function(){}; src="2.ここもほしい"> </A> </DIV> <DIV class="list"> <a href="1.ここがほしい" target="_blank"> <IMG onload=function(){}; src="2.ここもほしい" height=100> </A> </DIV> こんなソースがあるとして<DIV>~</DIV>までを拾おうとしても何も拾えません・・・ $html =~ m#<DIV class="list">(.*?)</DIV>#g これじゃだめなんですか?
とっとと死ねよクソガリども
++ hoge.pl ++ my $html = <<EOF ; <DIV class="list"> <a href="1.ここがほしい"> <IMG onload=function(){}; src="2.ここもほしい"> </A> </DIV> <DIV class="list"> <a href="1.ここがほしい" target="_blank"> <IMG onload=function(){}; src="2.ここもほしい" height=100> </A> </DIV> EOF print $1 . "\n" if $html =~ m#<DIV class="list">(.*?)</DIV>#gs ; ++++++ % perl hoge.pl <a href="1.ここがほしい"> <IMG onload=function(){}; src="2.ここもほしい"> </A>
>>690 >>691 sをつければいいんですね 正規表現難しい・・・
ありがとうございます解決しました
>>688 Web::Scraper 使うとラクだよ
694 :
nobodyさん :2011/08/10(水) 11:33:10.14 ID:YwW/JKz0
bashで array=( xx{01,02,03} ) とすると、arrayの中には xx01,xx02,xx03 という要素が生成されるのですが、 perlでも同じようなことはできないでしょうか?
my @array = glob 'xx{01,02,03}';
696 :
nobodyさん :2011/08/10(水) 13:44:32.98 ID:0CKj4BCr
glob ってそんなのにも使えるのか。。。
>>694 @array = map { 'xx' . $_ } '01'..'03';
>>694 @array = map "xx0$_", 1..3;
@array = map sprintf 'xx%02d', 1..3;
698 :
697 :2011/08/10(水) 14:43:20.48 ID:???
ごめん、下は @array = map sprintf('xx%02d', $_), 1..3;
1つめは10以上が010となるから駄目じゃね?
半角カタカナで質問です。 @アカアカをuriエンコードすると%B1%B6%B1%B6 A%B1%B6%B1%B6をuriデコードすると蔚蔚 となり文字が変わってしまいます。 カタカナの文字コードが%一つで表せられるためだと思うのですが、正常に変換させるにはどのようにしたら良いのでしょうか?
URIに半角カナを使うな。以上。
>>700 "\xB1\xB6" は Shift_JIS なら "アカ" だし EUC-JP なら "蔚"。
変換自体は正常に行われている。
703 :
700 :2011/08/10(水) 15:14:33.62 ID:???
>>701 助言ありがとうございます。
htmlの<form><input name=TEXT></form>でカタカナテキストを拾う場合、
どのようにすればよいのでしょうか?
ググったらPOSTもGETもURIエンコードされたものが送られてくるとありました。
ちなみにURIデコードは下記を使っています。
$str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack( 'H2', $1 )/gxmse;
704 :
700 :2011/08/10(水) 15:42:30.56 ID:???
>>702 うまく変換できました。
エンコードサイトでも"蔚"になることを確認してたんですが、その時にも文字コードがごっちゃになってたようです。
ありがとうございました。
受信したメールからタイトルと本文を取得しようとしています。 テストでタイトルに半角カタカナを入れたのですが、 下記を実行すると全角カタカナで表示されます。 半角は半角のまま取得したいのですが、どのようにすればよいのでしょうか? use Net::POP3; use Email::MIME qw(); use Encode; my $pop3 = Net::POP3->new( 'server' ); my $count = $pop3->login(’user', 'pass'); my $messages = $pop3->list(); print "Content-type: text/html\n\n"; print "<html>\n"; foreach my $id (sort (keys %{$messages})) { my $mail = join q(), @{ $pop3->get($id) }; my $parsed = Email::MIME->new($mail); printf "%s<br>\n",encode( 'sjis', $parsed->header('Subject') ); } print "</html>\n";
>>705 メールのSubjectに半角カナを使うな。以上。
URL(serch.cgi?key=検索文字)こんな感じで全角文字列をいれたら全角文字でもから始まる数字でもなく???c??O??のような文字化けしてしまった 検索結果を直接そこに入れたら結果を返すようなプログラムを作りたいのですがどうやったら回避できるのでしょうか
文章読み返したら色々ひどい 日本語勉強しなおしたほうがいいんじゃないか俺・・・
utf8 にエンコードされて送られてるよ
>>705 そのメールを他のメールソフトで受信した場合は半角カタカナで表示されるのでしょうか?
他のメールソフトで受信した場合のそのメールの生ヘッダーを見せてください。
XSS対策について質問です。 タグの中にユーザーの入力文字列を含む場合、 どの文字をエスケープしておけば安全なんでしょうか? ググったものの「<」、「>」、「&」、「"」、「'」の5種類としてあるサイトばかりなのですが、 <a href="「ここに入力文字列」">hoge</a> こういうケースだとjavascriptを実行されてしまうのではないかと思うのですが。 できることには制限がありそうですが、こういうのも一括して完全に防ぎたいです。
713 :
705 :2011/08/12(金) 12:57:25.68 ID:???
>>710 返信ありがとうございます。
とりあえず全角になる現状のヘッダ部分を貼り付けます。
タイトルも本文も全角になっています。
半角まる(。)も全角まる(。)になっています。
Return-Path: <
[email protected] >
Delivered-To: xxx@xxx
Received: (qmail 24465 invoked by uid 610); 12 Aug 2011 12:44:11 +0900
Received: from unknown (HELO docomo.ne.jp) (203.138.203.xxx)
by xxx_server_xxx with SMTP; 12 Aug 2011 12:44:11 +0900
Received-SPF: pass (xxx_server_xxx: SPF record at docomo.ne.jp designates 203.138.203.xxx as permitted sender)
Date: Fri, 12 Aug 2011 12:44:09 +0900 (JST)
From:
[email protected] To: xxx@xxx
Subject: aaaaa=?iso-2022-jp?B?GyRCSD4zUSUrJT8lKyVKGyhC?=
=?iso-2022-jp?B?GyRCISMhIyEjISMhIxsoQg==?=
Message-ID: <
[email protected] >
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="STMsgeYV"
Content-Transfer-Encoding: 7bit
--STMsgeYV
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
さはやわ
半角カタカナ。。。。。
です
>>712 ありがとうございます。
あれは例に出しただけで、URI等関係なく一括して防ぐ方法は無いものかと思った次第です。
正直なところjavascriptの埋め込み方が多彩で把握し切れてないです。
hrefだけが例外なんですかね?
自己解決。 これはページ内で実行してるのとは別物っぽいですね。 他にも似たようなタグがあったら怖いなーと思ってましたw
>>713 ふつーに全角の「半角カタカナ。。。。。」をエンコードしてあるように見える。
暇つぶしでDoCoMo端末からPC宛てに「半角カタカナ。。。。。」で送ってみたけど
これキャリアのほうで全角変換かかってない?絵文字→〓みたいな感じで。
>>713 >>716 ISO-2022-JP に半角カナ (JIS X 0201 片仮名) は存在しないので
他の文字コードで MIME エンコードしなければ
半角カナを含む Subject を正しく送れる保証はない。
718 :
716 :2011/08/12(金) 15:28:27.02 ID:???
>>717 やっぱりそこかなーと思うんよ。
キャリアが JIS X 0208 のカタカナに変えてくれてるみたい。
端末で UTF-8 + MIME-B とか選べるわけでもないしさ。
昔のMUAだと charset="ISO-2022-JP" を謳うボディに
JIS X 0201 カタカナ を混ぜられると色々崩壊したなあ。
>>713 docomoは携帯電話網からインターネットへ送る際に、半角カタカナ → 全角カタカナの変換を行っている
ようなので、インターネット経由でメールを受け取る場合はあきらめるしかないですね。
[status] file1 ... success file2 ... failed file3 ... success ファイル生成後の結果を ゲームなどのinit確認画面のように準に表示させたいのですが 通常すべてが終わってからバンとでますよね どうやったら perlでも少しずつ表示させる事ができるのでしょうか?
モダンなPerlでオブジェクト指向をするとしたら 何を使うのが普通なのでしょうか?
プチダノン
>>723 調べたがさっぱり・・・もう少しkwsk
perlvarを見て
低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ 低レベルスレ低レベルスレ低レベルスレ 低レベルスレ低レベルスレ低レベルスレ低レベルスレ 低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ
728 :
721 :2011/08/13(土) 21:44:54.73 ID:???
ですが、誰かレスお願いします。
731 :
nobodyさん :2011/08/13(土) 22:26:28.82 ID:tZoTBnu9
Moose
Perl5+オブジェクト指向であれば Mooseが本命なのでしょうか? での標準モジュールではないですよね・・・? Perlは標準モジュールとしてはモダンなオブジェクト指向を サポートしない方針なのでしょうか? それとも将来Mooseが標準モジュールとして 採用される可能性はありますか?
Mooseが標準モジュールになる事なんて有り得ない。 「モダン」ってーのは言葉づらだけで、「はやり」ってルビを振って読め。 つまり標準ってーのは流行廃りと無関係の立ち位置。 (誰が始めたんだ?このモダンって糞用語)
あ、「モダン」な物全てを否定してる訳では無いよ?
「モダン」になる前のPerlがあまりにもひどかったから、「モダン」とつけて線引きしたかったんだろうなぁ。 どこかに、PerlでObjectを作る際の例を何点か挙げて、比較検討してるところがあったと思うんだが、そういったとこを見て、場合によって使い分けるのが現実的ではあると思う。 が、面倒ならやっぱりMooseじゃね? Mouseとかもあって、更には他にMooseが使われてるならMoose、Mouseが使われているならMouseを使うようにするモジュールまであったと思うんだが、そもそもそれらの遷移が早くって、一昔前のモジュールを使ってみたらこっちで使えないとかいう。。。
> (誰が始めたんだ?このモダンって糞用語) Mozillaじゃね? モダンブラウザとか言ってさw
>>721 Perl5であれば素のままでオブジェクト指向プログラミングができる
モジュールに依存しないから、Perl5のバージョンを上げても大丈夫
>>733 ユニコード対応に失敗したのに気づいたときに「モダン〜」でごまか
そうとした
10年前の失敗につけた名前なのでもうモダンでも何でもない
>>733 >ユニコード対応に失敗したのに気づいたときに「モダン〜」でごまか
>そうとした
>10年前の失敗につけた名前なのでもうモダンでも何でもない
まるで「ラリーが言ってる」みたいな事、書くなよ。
perl5.6の時点で既にperl6 の構想自体はあったのに、
perl5.6をモダンなんて持ち上げる訳が無い。
モダンな実装とモダンなコーディングとモダンなモジュールとはそれぞれ別に考えたほうがよくないかな
>>739 それはいいアイディアだ。
つまり、
>>721 の求める「モダンなPerlのオブジェクト指向」というのが何を指しているのか?ってところだな。
テストが無いのがレガシーって考え(?)なんてのまであるらしいから、はっきり決めないと収束しないべ
モダンとかカジュアルとかまじやめてくれねえかな 死んでください
Perl忍者とか生きてんのまじやめてくれねえかな 死んでください
モダンがどうとかどうでもいいが、 少なくともnewかいてblessがどうとか そういう話をするのは見苦しい。 オブジェクト指向のやり方を使ってアプリを作りたいのであって オブジェクト指向の仕組みを作るのが目的じゃないんだから。
無理してperl使う必要無いよ?
他の人がPerlばっかり使っていて そう決まっているから仕方ないのです。
Moose万歳の人は、同数以上のMooseに批判的、否定的な人がいると 言う事に気付かないのか?
Mooseを批判している人は 何を使ってるの? 単にオブジェクト指向が理解出来ないだけ?
??意味不明 Moose はどうでもいいけど。 普通に new, bless 使ってコード書きゃいいだけだろ。
>>748 それを楽に書く書き方がMooseってだけなんだが、
なんでMooseを批判しているの?
面倒なことをやりたいだけ? ドM?
少し勉強するだけで、簡単にかけるのに
単に勉強嫌いか頭が硬くなっただけじゃない?
「標準モジュールに無いモジュールを使われて、それを 標準モジュールオンリーのスクリプトにリライトする」 仕事をした事があった上で、その意見を言えるなら尊敬するわ、俺。 個人的にMooseを弄らなくも無いが、怖くて仕事には使えん。
なんか暑くいや熱くなってるところ申し訳ないが質問があるます my $res = $ua->get( qq($url) ); これで取得した検索結果になぜかだぶりが出てしまって困っています。 実際のWEBで見るとそんな現象はおきないので 何かしらの設定不足があると思うのですが・・・
>>758 俺なら、標準モジュール以外を
使わないと決めたやつをぶん殴るわw
これがもしC++ならBoostは使わないってことだし。
JavaならSpring、SeasorなどのDIコンテナを使わないってことだし、
C言語だと、ネットワーク通信すらできないな。
「窓の手入れたら色々捗るよ!」 「会社のPCに、んなモン入れられるか、どアホウ!」
「窓の手入れたら色々捗るよ!」 「会社のPCに、んなモン入れられるか、どアホウ!」 「じゃあカスタマイズしたい時はどうするんだよ。」 「窓の手を自作すればいいじゃないか!」
そして車輪の再発明を 行い続けましたとさ。 おしまい
756 :
750 :2011/08/14(日) 16:04:20.31 ID:???
>>752 もちろん必要なら許可は出る。
Mooseみたいなwrapper+αには許可は出ない。
Inline::CでCコードが埋め込んであったスクリプトを
perlに書き換えた時は地獄だった。
あるあるw 他人が作ったライブラリを信用しないで 全部オレオレライブラリを自作する会社w でそういうのは大抵質が悪いし機能も少ないし、 会社専用の知識だから、外部での経験もいかせないし、 技術者も育たないし、どんどん腐れていくんだよな。
>>756 > 「標準モジュールに無いモジュールを使われて、それを
> 標準モジュールオンリーのスクリプトにリライトする」
あれ? そういう仕事じゃなかったのですかw
嘘だったんですか?
>>756 > Mooseみたいなwrapper+αには許可は出ない。
そこに正当な理由がないことに気づかないのか?
ま、お偉いさん(笑)決めたルール。 実は「俺が理解出来ないものは使わん」が 理由だとしても、それに逆らう勇気もなし。
761 :
751 :2011/08/14(日) 16:17:26.24 ID:???
だれか、ヒントでもいい!たのむ!
めんどくさいんで、
>>760 の言う通りと言う事で。
ちゅーかこっちは、科研費で生きてるからボスの言う事には
逆らえんし、先人のスクリプトを他のサーバに移すからと言われれば
ハイハイと言わざるを得ん。
うん。だろうねw ダメな上につく下っ端 の現実の話だったってことが わかって皆満足さw
つか、Perlの標準モジュール = cpanモジュールって知らないのかな? (Mooseもcpanモジュール) 他の言語に比べて標準である価値は低いし、 平気で互換性がない変更をしてくる。 仕事で使うのが怖いというのなら、 Perlそのものが怖いわw
>>764 何拡大解釈してんだアホウ。
煽りたいのは勝手だが、perldoc perlmodlib に standard module の項目は
きちんと書いてある。
煽りまくりで楽しいのは分るが、妄言を吐いてまで煽る意味があんの?
>>751 $uaってのがなんだかわからんのに答えられないと思うが
ダブりがあるってならその「ダブり」をキーにして、grepでハッシュに登録してけばいいんでね?
あぁ。変なレスですまなかったがgrepじゃなくてmapだったな。最初別の事考えたんで混乱した。
行き当たりばったりの適当な対応提案すんな。 それだといろいろやってたまたま動いたら、 それでOKみたいな学生レベルと一緒だろ。
$ua は LWP::UserAgent のインスタンスだろうと思うが、 $url の中身が示されてないし「これで取得した検索結果」と言われても不明なので誰も検証できません。
772 :
705 :2011/08/14(日) 22:52:43.69 ID:???
>>716-719 docomoが勝手に全角にしてるんですね。。
絵文字の〓と同じ対応か。
勉強になりましたありがとうございます。
773 :
751 :2011/08/14(日) 23:12:15.22 ID:???
レスありがとうございます。
>>768 把握
>>771 そこは教えられないんだすまない
同じ検索結果なのにブラウザで見るのとperlから見るので違うなんてありえるの?
だぶりって、なに?
実際におきてるんだからあるんだろ それか手前のスクリプトが糞なだけか
776 :
751 :2011/08/15(月) 00:16:40.34 ID:???
777 :
751 :2011/08/15(月) 00:28:29.15 ID:???
自己解決しました 調べて見たら俺の単純なミスだった事が分かった 変数の初期化を忘れて、予期せぬ値を読み込んでいたのが原因でした。
モダンってゆうのは結局「今」ってこった 「今」に縛られてると永く持つコードかどうかは怪しくなる だからオレとしてはモダンかどうかよりも長持ちするコード を優先する 自分で作る場合でも、他の人のを使う場合でも 流行りを煽る物書きもいるけど、そこは冷静に判断する目が 必要
>>738 perl5.6の時点で既にperl6 の構想自体はあったのに、
実在しないのにモダンとなw
>>778 > モダンってゆうのは結局「今」ってこった
いや、そんなの辞書引けば書いてるし・・・
> だからオレとしてはモダンかどうかよりも長持ちするコード
> を優先する
世の中に長持ちするコードなんて無いよ。
お前が長持ちすると思っているコードは、
全時代に「モダン」だったコードだ。
少し先の時代まで持ち越そうと思ったら
「今」のコードで書かないといけない。
>世の中に長持ちするコードなんて無いよ。 何の為にコーディング規約があると思ってんだ? それともコーディング規約が架空の物だと思ってる人?
あんた、それ、ニートに「社内規則ってあるでしょ?」って言ってる様なもん。 通じないよ。
忍者うぜえ
例えば子供がいっぱい集まってプログラミングをやってるスレがあったとする それは誰かに主導されるわけでもなく何となく集まって来て自然にルールも出来て適当にコード書いて見せ合うって言う社会の常識みたいなのがある そこに急に大人が介入してきてこれからこういう書き方にしよう コーディングはこう言うのが凄いからこれにしなさい。できたチームには入社させてあげるから 子供達は純粋に楽しいだろうか? 入社に釣られてムキになったり変な亀裂が生じたり色んな問題が出てくる 子供達からルールの設定とかを頼まれたならまだしも行きなり表れて仕切り始める しかもその仕切り始めた大人達は子供達にこう言う本を買ったらプログラミングが上手くなるよとかの宣伝をするのが真の目的だったと これが今からモダンPerlがやろうとしてる事
例えば子供がいっぱい集まってプログラミングをやってるスレがあったとする それは誰かに主導されるわけでもなく何となく集まって来て自然にルールも出来て適当にコード書いて見せ合うって言う社会の常識みたいなのがある そこに急に大人が介入してきてこれからこういう書き方にしよう コーディングはこう言うのが凄いからこれにしなさい。できたチームには入社させてあげるから 子供達は純粋に楽しいだろうか? 入社に釣られてムキになったり変な亀裂が生じたり色んな問題が出てくる 子供達からルールの設定とかを頼まれたならまだしも行きなり表れて仕切り始める しかもその仕切り始めた大人達は子供達にこう言う本を買ったらプログラミングが上手くなるよとかの宣伝をするのが真の目的だったと これが今からモダンPerlがやろうとしてる事
雑談でやれクソ共 (o^∀^o)
例えば子供がいっぱい集まってプログラミングをやってるスレがあったとする それは誰かに主導されるわけでもなく何となく集まって来て自然にルールも出来て適当にコード書いて見せ合うって言う社会の常識みたいなのがある そしてそれがMoose 以上で話は終わりだろ。 何をグダグダ言ってるんだ?
子供たちがボールを蹴って遊んでいる。 そこにプロがやってきてプロの業を披露する。 あとは、そのテクニックを自分も身につけようと どんどん成長していくか、 ボールけって遊んで終わりになるかの違い。
今使っているテンプレートエンジンはHTML::Templateなのですが、 みなさんテンプレートエンジンはどういったモジュールを使っていますか? 他のものに変えようか迷ったので参考にさせて下さい。
プログラミングを重視する ・書き捨てていくことで生計が成り立つ ・書き換えることが実入りになる →モダンに乗っかる必要がある プログラムを重視する ・永く使えるコードを書く ・書き換えることが出銭になる →モダンに乗ってはいけない 目指すところが正反対なら議論はかみ合わないんじゃ ま日雇いといっても、俺くらいの格にもなれば週払い なんでそんなこと気にとめなくなるがな
>>790 …そのURL、単に個人の主観が連ねてあるだけ。
Templateなんて、リリース時期で言えば HTML::Templateと
1年しか違わず、HTMLやらない人間にとっては昔から王道もいいとこ。
HTML::Templateと棲み分けが違ってただけだ。
あのー、初心者なんでひとつ質問していいですか? モダン、モダンって言ってるひとはどうしてモダンを流行らせたいんですか? 流行らせようとしているひとは何か得するんですか? エバンジェリストになりたいってことで合ってますか? どうせオメーラわかんねーだろーってことですか? そうですか、分かりました
>全時代に「モダン」だったコード これは長持ちしそうですね
>>793 一人で質問して納得しててきもちわるいよ
それ質問自分でして回答終わらせてるな
きも
早く死ね
>>793 モダンは流行らせたいんじゃなくて、
主に上級者の間で、流行っているやり方だよ。
ちぇー'з' やっぱり初心者おとこわりか.
×初心者おとこわり ○諦めた奴が初心者
>>799 CPANコミュニティ参加は、技術とは別の意味で敷居が高いとして、
DBIやCGI.pm使ってる程度でいいのなら簡単にレベル8行くんじゃない?
そこに書いてあるMethodMakerは古いけど、
今で言うならMooseの機能劣化版みたいなものだし。
自分は他の言語をやっていたけど、Perlは本格的に仕事でやり始めて一年半ぐらい。
シンボルテーブルの操作もやってるからレベル9に足突っ込んでるレベルなのかな。
もちろんPerlカンファレンスとかには参加してないけどw
他の言語(オブジェクト指向)をやっていたものからすると
モダンPerlレベルじゃないとPerlは実用レベルとは認められないな。
オールドPerlは単純にクラス作って真っ先に書かせられるnewとblessの関数が面倒。
そのレベルの全ての条件を満してから、そのレベルを名乗れ。
まさに >のレベル6クラスの連中だろ。自己評価はレベル8とかの。 を体現してみせたレス
いやw 別にこんなののレベル付けになんて興味はないからw どうせあとはPerlコミュニティに協力するという 技術とは関係ない部分だし。 ただ、MethodMakerやDBIがレベル8や9って バランスおかしくない? これぐらいは中級者レベルでしょ?
興味津々じゃねーか。その割には文章読解力が壊滅的だけど perlコミュに協力 = それだけの技術力の裏付けがある ×MethodMakerを使う -> ◯などの開発者向けモジュールを使い始める ×DBIを使う -> ◯複雑なアプリケーションモジュールを適宜使用 ×CGI.pmを使う -> ◯Web ベースのアプリケーションを作成する ググれば解説もどきが氾濫してるご時世なんだから 使うだけだったら、中級者どころか超初心者でも使うだろ
主眼では無いって意味で×書いた ×じゃなくて△の方が意味が通ったな
とりあえず、どっかのpmのIRCで会話出来てから出直してくるといいんでね?
multipart/form-dataで送られたデータを受け取るのにいい方法はないでしょうか CGI::Lite;を使おうと2日間試行錯誤したのですが、特定のデータを送られると if ($current_buffer =~ /(.*?)(?:\015?\012)?-*$boundary-*[\015\012]*(?=(.*))/os) { の辺りで固まってしまうようです。 CGI::Lite;くらいの小さいモジュールか、コピペできるコード無いでしょうか? 一括してハッシュ形式+ファイルは保存できるものが希望です。
Unicode::Japaneseでz2hを使いたいのですが、 文字コードは変換前sjis→変換後sjisにしたいです。 どのようにすればよいでしょうか?
前も後もsjisならJcodeを使ったほうがよくね?
amp;や&lt;&gt;の処理について詳しく書いてあるところなかったので、いろいろ何回も試してみたまとめですが おかしなところや違っているところはありますか?。 <INPUT TYPE="hidden" NAME="aaa" VALUE="&amp;gt;"> <SELECT NAME="bbb"> <option VALUE="&lt;&gt;"> </SELECT> ↑のようにhiddenやoptionみたいに最初からVALUEが設定されている場合は送信したとき &amp;が&に&lt;&gt;が<>に自動変換されるけど、 <INPUT TYPE="text" NAME="ccc">みたいに入力してから送信する場合は <>&lt;&gt;&amp;lt;と入力して送信しても変換されず><>&lt;&gt;&amp;lt;のまんまでした。
そして確認画面を作る場合は入力して送信したデータをhiddenに一時的に書き込んでおかなくてはならないので &amp;gt;が自動変換により&gt;に&lt;&gt;が<>になってしまうのを防ぐために $FORM_DATA{'aaa'} =~ s/&/&amp;/g; $FORM_DATA{'bbb'} =~ s/&/&amp;/g; $FORM_DATA{'ccc'} =~ s/&/&amp;/g; $FORM_DATA{'aaa'} =~ s/</&lt;/g; $FORM_DATA{'aaa'} =~ s/>/&gt;/g; $FORM_DATA{'bbb'} =~ s/</&lt;/g; $FORM_DATA{'bbb'} =~ s/>/&gt;/g; $FORM_DATA{'ccc'} =~ s/</&lt;/g; $FORM_DATA{'ccc'} =~ s/>/&gt;/g; を使ってaaaの&amp;gt;を&amp;amp;gt;にbbbの&lt;&gt;を&amp;lt;&amp;gt;に cccの<>&lt;&gt;&amp;lt;と入力したデータを&lt;&gt;&amp;lt;&amp;gt;&amp;amp;lt;に変換しました。 そして書き込むとhiddenに格納されているaaaの&amp;amp;gt;が&amp;gt;に bbbの&amp;lt;&amp;gt;が&lt;&gt;にcccの&lt;&gt;&amp;lt;&amp;gt;&amp;amp;lt;が &lt;&gt;&lt;&gt;&amp;lt;に自動変換されてファイルに書き込まれました。 これを読み込んでoptionのVALUEに戻す場合は読み込んだデータが&amp;gt;ならば<option VALUE="&amp;amp;gt;">&amp;gt;として amp;を増やせば上手くいきました。 どこか違っているところはありますか?
>>811 根本的なことだが、
<input type="hidden" name="aaa" value=">" />
ってのは、hidden だろうが text だろうが、input でなく select/option だろうが、
初期値が > のインプットフォーム aaa を描画(hidden なら見えないが)するという意味
つまりブラウザがレンダリングする時点ですでに > でなく > になってるってことだ
送信の時に何か特別な処理がされるわけじゃない
このへんがわからないなら Perl 関係ないから HTML の質問スレとかで聞け
変換処理についての話をするなら、
HTML に埋め込む時(普通に表示する時と input の値にする時)だけ > とかに変換することにして、
それ以外の時は変換しない(データの保存やらは > とかのまま)ということにするのが一番簡単かと思う
jcodeかnkfで日本語・英語以外に対応できますか?
>>811-812 根本的なことだが、テンプレートエンジン(Template Toolkit等)とFillInFormと
フレームワーク(CGI::Application、Catalyst等)を組み合わせて作るから
そんなつまらないコードは書いていない。
816 :
809 :2011/08/18(木) 23:29:42.23 ID:???
ネットにあるPerlの情報古いからね。 今時Jcodeとかアホみたい。 だからモダンPerlなんて用語ができるんだよ。 わざわざモダンと言わなければ、 ネットのPerlが古いとわからない。
モダン小飼
jisからsjisに変換するためにUTF-8に回り道する必要がない jcode.pl、あるいはモダンこだわるならjacode.plでもよし jacode.plならわずらわしい警告が表示されないので便利
でも今は、だいたい内部をUTF-8にするでしょ?
文字列として加工する必要がないんだったら 単にナマのコードとして扱えばいいだけだしょ。 JIS→UTF8→SJISだと2回、テーブルを引きながら変換する必要があるけど、 JIS→SJISだとテーブルを引くまでもなく1回計算するだけでコード変換できちゃう。 …あれ? テーブル引いた方が速いか?
JIS→UTF8→SJISだと問題の発生しうる箇所が2箇所 JIS→SJISだと1箇所 初心者スレなんで、とりあえず1箇所のほうを薦める
824 :
809 :2011/08/19(金) 10:00:23.02 ID:???
>>820-823 ありがとうございます。
>JIS→UTF8→SJISだと問題の発生しうる箇所が2箇所
>JIS→SJISだと1箇所
>初心者スレなんで、とりあえず1箇所のほうを薦める
この場合の一か所の方法はどのような方法になりますでしょうか?
ちゃんと jacode.pl を入手したか?
http://leagueoflegends.jpcommunity.com/ LoL JP Community オープンしました! #loljp via Janetter
LoL JP Community への登録はお済でしょうか?
まだの方は、できるだけ早めに登録をお願いします
現在200名以上の方が登録し、コミュニティーの一員となっております
国内でLoLを盛り上げるため、誠心誠意尽くす所存でございます
LoL JP Community では、大会やイベントの主催、動画配信、同人誌や攻略本の販売を予定しています
それに伴い、ボランティアスタッフの募集もしています
大会配信での運営スタッフ、解説者、実況者、サイトコンテツ製作のプログラマー(CGI、Perl、PHP,Ruby等)
書籍製作の絵師、小説家、自分の特技をLoL JP Communityで活かしてみませんか?
応募希望者はサイト内フォーラムまでご連絡ください
※仕事に応じて報酬もでます
------------------------------------------------------------
LoL JP Communityへの登録はとても簡単です
以下の4つ手順を踏んで頂くだけです
1.サイトにアクセスする (
http://leagueoflegends.jpcommunity.com/ )
2.左のフレームのログイン>新規登録のリンクをクリック
3.ユーザ登録画面に必要事項を記入する
4.送信ボタンを押す
------------------------------------------------------------
以上、よろしくお願い致します
文字列比較について質問です $name=","; $FORM{'name'}="&#8218;"; #入力された名前 if($name eq $FORM{'name'}){ print "その名前は既に使われています"; } else{ print "その名前は使われていません"; } &#8218;は,として表示されるので 実体は違う名前でも表示は同じ名前になってしまうので、その名前は既に使われていると表示させたいです。 でもその名前は使われていませんとなってしまいます。 ,の場合だけではなく全ての&#○○○○;を実体に変換して比較できればいいのですが、何かいい方法はないんでしょうか?
そりゃすべての&#xxxx; を変換してから比較するしかないべや。 便利なモジュールや注意点については自分でググれ。 「perl 実体 参照 変換 モジュール」あたりで。
数値文字参照(&#○○○○;)の他にも実体文字参照(&アルファベット文字列;)もあるから 名前の入力には半角の&と#は禁止するしかない
名前に記号が含まれる事は無いしな ハンネはともかく・・・
832 :
809 :2011/08/20(土) 11:07:15.93 ID:???
>JIS→SJISだと1箇所 の方法で require 'jacode.pl'; while (defined($s = <>)) { &jcode'convert(*s,'sjis','jis'); print $s; } でうまく変換できました!ありがとうございました!
833 :
809 :2011/08/20(土) 11:58:32.45 ID:???
(初心者なので h は今度教えてください)
ユニコード文字をフォームに入力してファイルに書き込むときの質問ですが if($ENV{'REQUEST_METHOD'} eq "POST"){ $syurui = $ENV{'CONTENT_TYPE'}; read(STDIN, $all_data, $ENV{'CONTENT_LENGTH'}); } else{ $all_data = $ENV{'QUERY_STRING'};} @groop = split(/&/,$all_data); foreach $ans(@groop){ ($name,$value) = split(/=/,$ans); $value =~ tr/+/ /; $value =~ s/%(..)/pack("c",hex($1))/ge; $FORM{$name} = $value; } use utf8とかいうの使わなくても一応上のやり方で フォームから送信したデータ取得して(&#形式になるが) 書き込んで表示できたんですがこれでは問題がありますか?
>>832 >&jcode'convert(*s,'sjis','jis');
perl4の記法を素で書く奴、久々に見た…
jacodeの方で、perl5記法サポートを謳ってるんだから、
perl5記法で書けよ。
jcode::convert \$s, 'sjis', 'jis';
…ちなみにperl4の最終リリースは1993年。
Encodeを使えは同意なんだけど、レスの流れがそうじゃなかったからねw
「jacode.plがモダン」って言うレスもあるし、そこは仕方ないかと思ったんだ
単なるコピペだったか。
それで思い出したが、はてなの「車輪の再発明」の項に
「Perlにおける「車輪の再発明」の実例」なる項目が…
ttp://d.hatena.ne.jp/keyword/%BC%D6%CE ?κ%C6?%CC%C0
jcode.pl->Jcode.pmは再発明と言うよりrewriteで、
Jcode.pm->Encode.pmって両方、同一人物関与だろ?
車輪の再発明って言うのか?
(今のJcode.pmはEncode.pmのラッパである事は置くにしても)
初心者はEncodeのドキュメントの洪水におぼれて終わる うまいことおぼれなかった場合は今度はutf8フラグの 餌食になって終わり jcode.plではそんなことはない Encodeはどうしたって中級者以上のスキルがないと使えない
Perlにおける「車輪の再帰的改良」の実例 jcode.pl→Jcode.pm→Encode.pm→Jcode.pm(2.0)→jacode.pl ※マジレスしない
> jcode.plではそんなことはない ただし、Unicode文字列を正規表現で扱いたくなったり バイトではなく文字数単位で計算したくなったら 面倒なことになる。
このさい条件を限定して考えてみよう。 初心者もいつかは成長する。 jcodeもEncodeもどちらも簡単に使えるようになる。 Perlはもはや保守だけ。JavaやRubyに移行中。新システムを作ることはない。 だから既存のjcodeコードをいじるだけでいい。 そういう人は答えが出てる。今使っているものだけを使えばいい。 初心者なら逆に0から作るって人もいるだろう。 だから何も無いところからアプリを作るとき jcodeもEncodeもどちらも楽々出来る人は どちらを選ぶのか、その理由を語りましょう。 俺の意見は、 標準モジュールかつ日本語以外も 対応しているからEncodeモジュール一択。どや?
>>838 > Encodeはどうしたって中級者以上のスキルがないと使えない
お前は中級者以上だからEncode使えるんだよな?w
初心者はお前以上のスキルを目指したらあかんの?w
どうもこんばんわ perl使ってHTMLを作ろうとした際にエラーが出て困っています print qq(<HTML><head><title>テスト用ページ</title></head><html>); print qq(<HTML><head><title>テスト用ペ\ージ</title></head><html>); としてもエラーで動いてくれないんですが回避する方法はありませんか
>>843 まず文字コードとしてUNICODEを使うようにしましょう。
それが現在の標準です。
その後にテンプレートエンジンについて勉強しましょう。
これも今の標準的なやり方です。
Content-Type 吐かないとエラー出るよとエスパーしとけばいいのかな。
die するとサーバーのエラーログに残りますが、 スクリプトを終了させずにエラーログに残す場合はどうやるんでしょう?
あっ、STDERR に出力したら出来た。 面汚し失礼←
その矢印は突っ込めという意味なのか
日本ではEncodeの資料が豊富にあるが、アメリカでは そうではなく、Encodeが使われることはまずない (それは需要がないせいかもしれない) 数年前、Larryの肩越しにディスプレイを覗いたとき、 あわてて両手で隠されたことがあったっけ どうやら覚えた漢字を表示させようとしていたらしい Encodeを使おうとしてたみたいだけどよく見えなかった その後、彼はEncodeについて多くを語ろうとしない
Larryカワユス
つまらんネタ
> アメリカでは > そうではなく、Encodeが使われることはまずない だが、アメリカにnkfもjcodeもないだろ? じゃあ何使ってるのさ? それいうのなら単に多言語化してない。 Unicodeも使ってない。の間違いじゃねーのかw
半角カタカナで送信すると文字化けするのが困っていましたが jcode.plのconvertを使わないだけで解決しました
854 :
809 :2011/08/21(日) 12:26:40.02 ID:???
jcode::convert \$s, 'sjis', 'jis'; を試したところ、エラーになったので原因を調べたら 学校のperlはperl4でした Unicode::Japaneseが使えない理由もこれでわかりました あとz2hは &jcode'convert(*s,'sjis','jis','h'); にしたらできました 自分で調べてもなかなか役に立つ資料がなくて、このスレの 助言がなかったら絶対できなかったと思います 本当にありがとうございました☆
>>834 ユニコード文字の送信書き込みは、書き込みファイルがANSIの場合
ブラウザが自動で&#にしてくれるから
perlでユニコードのデコードを考える必要はないよ
>>854 初心者スレだから、当たり前のことでもちゃんと教えてあげるよ。
perl4はすでにサポートも終了していて
世間で使っているところは皆無。
20年近く前に更新されていない。
現在標準のPerl5とは互換性もかなり失われて、
オブジェクト指向もサポートされていない。
学校でそれしか使えないのなら、ご愁傷さま。
だがそれが許されるのは高校までだろう。
現実に出ればPerl5ばかりなので、初心者が
今手を出すと逆に損をするバージョンだ。
10年以上更新もメンテもされてないサーバにログインして作業するしかないような 超貧乏学校だったらひょっとしたらあるかもしれんね。 でもそんなふざけた学校は嫌だな。
初心者に環境を聞くと 「近くに山があります。」 みたいなことになるので、オレは聞かない。 その代わり、どんなコンピュータ環境でも動作しそうな回答を した方が前に進む。 モダンは○○○だからとか、標準は□□□だとか、普通ユニ コードだとかをどや顔で語っても、今困ってて、何かを解決しよう としている初心者にとって何の役にも立たない。 誰だって、初心者だったときがあったのだから。
初心者スレで質問すると、
そこにいる初心者が答えるので、俺は聞かない。
また自称中級者(笑)が初心者ならこの程度まで
そこから出てくるなと、言わんばかりの書き方の
押し付けをしてくるので俺は聞かない。
>>859 のような奴なw
初心者に答えを聞いたところで
まともな答えが帰ってくるわけがない。
と、初心者が語っております。
ほらねw
>>858 perlなんてただで手に入るのに貧乏とか関係ないだろ
そういう馬鹿を装った釣りはおもしろくないです
865 :
nobodyさん :2011/08/21(日) 19:09:46.77 ID:VFxGIRsL
サブルーチンについてだけど &で呼び出すのと::で呼び出すのはどう違うのか教えてください
>>865 use strict;
use warnings;
sub bar { print "@_ main::bar\n"; }
sub Foo::bar { print "@_ Foo::bar\n"; }
bar(1);
&bar(2);
::bar(3);
{
package Foo;
bar(4);
&bar(5);
::bar(6);
}
>>865 &はまんま、サブルーチンの呼び出し法の一つ
::は名前空間へのアクセスの為の区切り文字(列)
あなたが普段使ってるpackageは、mainで、
mainのサブルーチン(SUB),変数(VAR)などに
名前空間明示的にアクセスするには、
main::SUB;, &main::SUB;, $main::VAR;
などの方法がある。同様にpackage名がHogeなら、
Hoge::SUB;, &Hoge::SUB;, $Hoge::VAR;
(package Hoge中なら明示せずにアクセス可能 SUB, &SUB, $VAR)
でpackage mainに関しては「mainを」省略可能なので
::SUB;, &::SUB;, $::VAR;
という記法が成り立つ(
>>866 氏の::bar(3); ,::bar(6); )
全然概念が違うので違いもへったくれも語れない。
アプリケーションとパスの違いを教えてくださいと言ってる様なもん。
全然概念が違うというが、 違う理由が書いてないなw
2, 3行目が読めないのか?
870 :
867 :2011/08/21(日) 21:48:23.45 ID:???
書き方が悪かった。 元のレスは、 ################### &はまんま、サブルーチンの呼び出し法の一つ ::は名前空間へのアクセスの為の区切り文字(列) 全然概念が違うので違いもへったくれも語れない。 アプリケーションとパスの違いを教えてくださいと言ってる様なもん。 ################### それだけでは不親切(つか866氏のレスをその時に見た)なんで、 具体例を真ん中に挟んじまった。 混乱させたか?
っつか、::なんてPHPでもC++でも見かけるから殊更説明つけるような事なかったんじゃね? PHPerならともかく、Perl一筋なんて奴は普通見かけないから
貴方の既知が他人の既知とは限らない 貴方の周辺が他人の周辺と同一構成とも限らない
ヒヤドキュメントの中でif文などの処理はできないんですか?
eval 使えば?
>>874 @{[do{ ここにPerl構文を書く }]}
my $is_male = 1;
print <<STRING;
I am a
@{[do{
if( $is_male ) {
"BOY!!";
} else {
"GIRL!!"
}
}]}
STRING
>>876 これを見難いと思うようになれば一人前。
半人前はなんでも一発でやろうとする。
TreeBuilderで、 <div class="onajinamae"> <div class="onajinamae"> </div> </div> 上記の内側のdivだけヒットさせたいんですが、イカすやり方ないですか? 配列入れて〜っていうならできるんですが。
TreeBuilder ってなに?
>>817 遅くなってすみません、ありがとうございました。
CGIモジュールと結構コード違うなーと思ってたんですが止まってたんですね。
仕方ないので自前で書いてみますー。
自前で書くとか馬鹿じゃね? 初心者は自前で書こうとするくせがあるよなw
余計なコードが邪魔なんらもん
へたくそなコード見ると使う気なくすもん
自分で使うだけなら自前コードでもいいだろ別に。 少なくともメンテ放棄されてるCGI::Liteを無理に使うよりはだいぶましだろう。
CGI::Simpleはダメ?
自分でサブルーチンを作っていく場合 packageして::で呼び出すよりもpakageしないで普通に&で呼び出したほうがいいんじゃないでしょうか? 例えばpakage test1;の中にsub www{}というサブルーチンを作った場合 やっぱりあとでpakage test2にwwwを移したい場合 &test::www;で呼び出した箇所を全部&test2::www;に修正しなければならないでしょ でもpakageしなければwwwをどのファイルに移動させても&www;の箇所を修正しなくてすむから
>>886 フツーはパッケージ名をコード中にバラまくような事はせず
use Foo qw(bar); を use Foo2 qw(bar); にするだけだし。
>>886 パッケージ名を抱合した変数を使って関数を呼ぶようにしたらいいと思うよ。
my $object = bless {}, "test1"; # パッケージ名を変更したらここをtest2にするだけ
$object->www(@arg); # = test1::www($object, @arg); 最初の引数に$objectが入っちゃうけど
配列 @array=("a00","a01","a02","a03","a04") があるときに 先頭から03を含む要素のインデックスを取得したいと考えています。 単純に記述すると my $pos = -1; for( my $i=0; $i<@array; $i++ ){ __if( $array[$i] =~ /03/ ){ ____$pos = $i; ____last; __} } のようになると思うのですが、 1行で記述できるような、もう少し簡単にする方法はないでしょうか?
@new_ind = grep { $array[$_] =~ /03/ } 0 .. $#array;
spliceでいいんじゃない?
893 :
890 :2011/08/24(水) 18:34:06.85 ID:???
>>891 ありがとうございます。
自分もgrepでどうにかならないか考えたのですが、
0 .. $#array
とする発想がありませんでした。
#1 my $pos = -1; for my $i (0..$#array) { next unless $array[$i] =~ /03/; $pos = $i; last; } #2 use List::Util qw(first); my $pos = first { $array[$_] =~ /03/ } 0..$#array; $pos = -1 unless defined $pos; #3 use List::MoreUtils qw(firstidx); my $pos = firstidx { /03/ } @array;
バージョンが新しいPerlなら、0 .. $#array を keys @array ともできるね。 でも互換性を考えると前者が無難なのかな。
>>889 それがコンストラクタを意味するんだったら、
パッケージ名直打ちするなんてバッドノウハウもいいとこ。
高林さんの提唱するところのバッドノウハウってのは、バッドだけどやむを得ない理由で普及してるノウハウ、みたいな感じでしょ。
>>889 はひたすらバッドなだけだと思うんだけど。
あと
>>886 は単にExporterか何か使って
>>888 しろ、で済む話だね。
書籍で載ってんだぜ?そのコード
書籍が正解とは限らないわけで
>>886 初心者に初心者がバットノウハウやジョークレベルの解答しているみたいでなんか可哀想だからちゃんとしたレスをしてあげるよ。
まずパッケージというのをよくわかってないみたいだね。パッケージは普通このパッケージは○○関連の
仕事をする人と決めて作るので、別のパッケージに移動したいと思うことはあまりない。
たぶん一つのパッケージでいろんな役割をもたせているから移動したくなるんだと思う。
関数一つ、二つだけのパッケージがあってもいい。役割が分かれてるのなら細かく分割したほうがいい。
パッケージを使うのはプロジェクトが大きくなってきたとき、この関数はどこで定義されたのかなどを
ぱっと見てすぐに分かるようにするためでもあるので、
>>888 のようなやり方は良くない。
ちゃんとパッケージ名で修飾しよう。
>>889 は、パッケージ名を抱合とか言ってるけど、単なるPerlでのオブジェクト指向(クラスを作る方法)の変則版。
それを書くぐらいならちゃんとしたオブジェクト指向用のコードを書いたほうがいい。せめてnewを作ること。
ちなみにそれやるぐらいならbless使わずに、my $object = "test1"; $object->www(@arg); これだけ十分。
そしてこのやり方は、パッケージ名が変わった場合には使えるけど、パッケージに含まれる関数を一つだけ
移動するときには役に立たない。
Exporterも今回の話とは関係ないものと考えたほうがいい。
で、結局どうするのが一番いいのかというと、この場合は素直にパッケージ名を変えたほうがいい。
これがJavaとかなら、リファクタリングツールを使って簡単に関数を移動できたりするんだが、
Perlはそうはいかない。だから多少冗長になっても関数名は長くしておいたほうがいい。
そうすれば検索で変更すべき箇所がすぐに見つかる。
変更する箇所が多くて一気に全部変えるのが怖いのなら、test::www()が呼ばれたら、test2::www()に転送するだけの
関数を作っておけばいい。そうすれば少しづつ変えられる。転送する前にwarnなんかで警告を表示するようにしておけば
すぐに気づくね。Carpとかを使えば、具体的にどこで呼び出されたかを知ることもできる。
あと&は基本的に使わない。test::www()で呼び出せるはず。パッケージ名の頭文字は大文字で
長文の解説するのは勝手だが、 パッケージ => 名前空間を提供する為の機構、お約束、コマンド。 モジュール => あんたがパッケージと連呼して解説してる物。 用語を区別も出来てないのに、他人を貶めるコメントまで 入れて回答すべきじゃない。 ケアレスミスって言い訳はすんなよ?
あ、本来の意味での「パッケージ」も当然使ってる。 モジュールの意味と混同使用してるのが問題。
パッケージもモジュールも同義でいいじゃない めんどくさい
mod_perlが使えないレン鯖で、100種類くらいのモジュールを使いたい場合は、その場その場で必要なものだけrequireする方が良いと言う認識で正しいですか? めんどくさいので、まとめてuseしたいところなんですが、パフォーマンス落ちますよね? 最近の事情教えてください。
必要なものだけ use すれば?
eval 'use ですか? 結局、何が必要になるのか判定するのがめんどくさいので…
うーん 100種類ものモジュールを使わにゃならん規模のしろものを mod_perlも使えずパフォーマンスを気にしながら運用しないといけないような レン鯖で動かそうとしていること自体 どこか間違ってないかい?
趣味でやってるんで、専鯖は高すぎるし、自鯖は管理が面倒なんです。 最近はuseするのが当たり前っぽいので、何か良い方法でもあるのかなと思ったのですが…。
@aaa = ("a\r\n","b\r\n,","c\r\n"); print join('', map{ ??? },@aaa); \r\nの改行がある配列を改行を削除して出力したいのですが、mapを使う場合どんな記述になりますか?
つ VPS PaaS
my @filtered = grep { s/\r\n// } @aaa;
「grepだと必ず$_返すから便利!」って主張を見たなあw printf "%s\n", join '', map{ ( /^(.*?)\r\n$/ms )[0] || $_ } @aaa; どうしてもmapじゃなきゃだめなんかね? printf "%s\n", join '', do{ local $/ = "\r\n" ; chomp @aaa ; @aaa} ; printf "%s\n", join '', do{ local $/ = "\r\n" ; chomp ( my @tmp = @aaa ) ; @tmp} ;
>>913 細かいことだけど最初のは "0\r\n" や "\r\n" に対して働かないよね
5.10 以上なら || じゃなくて // にすればいいけど
map{ /^(.*?)\r\n$/ms ? $1 : $_ } @aaa;
map /(.*(?=\r\n)|.*)/s, @aaa;
917 :
909 :2011/08/26(金) 16:10:21.89 ID:???
>>901 えと、結局言い返せるところはそこだけなの?
名称に文句つけてるだけだよね?
>>901 モジュールは言い換えるとファイル。.pm のmはモジュールのm
>
http://perldoc.jp/docs/perl/5.10.0/perlmod.pod > すべての Perl のモジュールは .pm という拡張子を持っていて、
一つのモジュールの中にパッケージは複数入れられる。
AAA.pmの中に、全く別の名前BBBというパッケージを書くこともできる。
その場合、BBB:funcという風に呼び出しを行う。
つまり、BBBの部分はパッケージ名。モジュールではない。
perl -MAAA -e {} とやった場合のAAAはモジュール。だからM。
同じく同様の動きをするuse AAA。これもAAAはモジュール。
AAAというモジュールの中に、BBBというパッケージがあれば、
プログラムの中からはBBB:funcやBBB->newとして扱う。
だからこのBBBはモジュールとは違うもの。つまりパッケージ。
そもそもpackage BBBと宣言する。
>900の話はすべてパッケージで間違いない。
斜め読んだが、まともに読む気にならん
>、
>>888 のようなやり方は良くない。
>ちゃんとパッケージ名で修飾しよう。
Foo::bar、Foo2::bar で全て呼べって?Exporterの存在全否定だぞ?
ま、せっかくperldoc.jpのURLを引っ張って来てんだから、
質問者さんは、そっちを読めばいいよ
>>911 は無名配列へコピーして条件を必ず真にすれば一応できるかな?
my @filtered = grep { s/\r\n$//; 1 } @{[@aaa]};
UTF8の文字列の表示上の長さを一定に切り詰める良い方法ありませんか? フォントなどに影響されるので完璧には難しいと思いますので、最悪半角1全角2程度の精度でもいいです。
923 :
nobodyさん :2011/08/30(火) 12:30:21.87 ID:OHE35/fc
現在見ているページのURLを取得するにはどうしたらいいんですか? ログイン画面からログインしたあとトップページに飛ばすのではなく 現在見ているページに飛ばすようにしたいので
924 :
nobodyさん :2011/08/30(火) 13:03:34.30 ID:OHE35/fc
$ENV{'SCRIPT_FILENAME'} と$ENV{'QUERY_STRING'}を使って何とかできました
返信の時に>などの引用部分をなくすにはどう変更すればよろしいでしょうか? 下の2行に#をつけても駄目みたいなんです $res{sub} =~ s/^Re://g; $res{sub} =~ s/\[\d+\]\s?//g; $res{sub} = "Re:[$in{res}] $res{sub}"; $res{com} = "> $res{com}"; $res{com} =~ s/<br>/\n> /ig;
926 :
925 :2011/08/30(火) 21:14:27.63 ID:???
すいません、自己解決しました。
927 :
925 :2011/08/30(火) 21:32:02.91 ID:3jBRaX0s
してねーよw なりすましすんなw
らって解決したんらもん!
>>925 みたいな不十分な内容の質問で答がもらえると思ったら大間違い、
という事実に自分で気づきましたので、
>>925 は無視してください。
のちほどあらためて質問しなおします。本当に申し訳ありませんでした。
しつこいよ。キチガイ
2つの整数の和を求めるdll(test.dll 正常動作確認済み)を作って、 #!/usr/bin/perl BEGIN{ $| = 1; print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT"); } use Win32::API; print "Content-type: text/html\n\n"; my $test = Win32::API->new("test", "sum", "NN", "N"); $sum=$test->Call(1,2); print $sum;
こんな感じのソース書いて、実行してみると Can't call method "Call" on an undefined value ... って言われる>< なぜ? ちなみに、test.dllはcgiと同じ階層に置いてて、環境はWin 7 64bit & ActivePerl 5.12.4 evalで囲っても肝心の値が取れないし、Dynaloderよく分からんし、詰んだorz 誰かお助けを〜 文字列制限に付き2回に分けて投稿
ttp://hirokawa.netflowers.jp/entry/26247/ ←このサイトを参考に下記PHPコードを
$offset=268435456;
$radius=$offset / pi();
$xy = array(
"x"=>((round(round($offset + $radius * $x * pi()/180)+($deltaX << (21-$z))) - $offset) / $radius) * 180 / pi(),
"y"=>(pi() / 2 - 2 * atan(exp((round(round($offset - $radius * log((1 + sin($y * pi() / 180))/(1 - sin($y * pi() / 180))) / 2)+($deltaY << (21-$z))) - $offset) / $radius))) * 180 / pi()
);return $xy;
下記perlコードに置き換えてみたのですが、$deltaX、$deltaYにマイナスが入るとうまく動きません。
正の数字だときちんと計算されるのですが、何か間違いがありますでしょうか?
use Math::Trig qw( pi atan );
use Math::Round;
my $offset=268435456;
my $radius=$offset / pi();
my $x = 34.819533;
my $y = 137.732836;
#my $deltaX = 0;
#my $deltaY = -100;
#my $deltaX = -100;
#my $deltaY = 0;
my $deltaX = 0;
my $deltaY = 100;
my $xy = {
x => ((round(round($offset + $radius * $x * pi()/180)+($deltaX << (21-$z))) - $offset) / $radius) * 180 / pi(),
y => (pi() / 2 - 2 * atan(exp((round(round($offset - $radius * log((1 + sin($y * pi() / 180))/(1 - sin($y * pi() / 180))) / 2)+($deltaY << (21-$z))) - $offset) / $radius))) * 180 / pi(),
};return $xy;
>>932 $testがundefinedなんだからnewに失敗してる、エラーチェックぐらいして
$GetTempPath = new Win32::API('kernel32', 'GetTempPath', 'NP', 'N');
if(not defined $GetTempPath) {
die "Can't import API GetTempPath: $!\n";
}
>>934 なるほど。
試してみたら
%1 は有効な Win32 アプリケーションではありません。
って出た。これって有効なdllでは無いってことかな?
>>933 $z はどっから出てきたんだよ
use strict; use warnings; つけろ
>>933 負数をビットシフトした時の演算結果がPHPとPerlで違う
$deltaX << (21-$z)
↓
($deltaX < 0 ? -1 : 1) * (abs($deltaX) << (21-$z))
他の箇所も同様に置換
これでとりあえずPHPと同じ結果にはなるんじゃないかな
検証はやってないんで自分でやってね
938 :
933 :2011/08/31(水) 09:44:14.97 ID:???
>>936 $zが抜けていましたすみません。
>>937 どう違うのかまで具体的に教えていただきありがとうございました。
昨日一日悩んだけど、同じ関数名で挙動が違うとか自分で考えていたら、しばらくハマってそうだ。
>>938 同じ演算なのに言語によって結果が違う(つまり言語によって仕様が違う)ことがたまにあるんだ
たとえば負数の剰余とかもPerlとPHPで違ったりする
Perl、Ruby、Python など:-5 % 3 → 1
PHP、C、JavaScript など:-5 % 3 → -2
あとPHPでは三項演算子 (? :) の優先順位がウンコってのも割と有名だったり
今後移植したコードがうまく動かなかった時はそのあたりを疑ってみるといいかも
端数を切り上げるのに一番スマートな書き方を教えてください 切り捨ては int($hoge/$fuge) で良いのですが、 切り上げだと端数が出るかどうかの判定をして+1になるかと思います。
942 :
938 :2011/08/31(水) 15:00:29.56 ID:???
>>940 結構違いがあるんですね。
勉強になりましたありがとうございます。
ついでにもう一つ質問。
下記の下2行をスマートに一行で書けますか?(;を一つにまとめるという意味です)
書いたらどんな感じになりますか?
2行に分けるとか、もしかしてどんくさいことやってるのかとふと思いました。
@a = ('x','y','z');
$count = scalar(@a) - 5;
$count = 0 if( $count < 0 );
これだと2回計算してるので無駄ですよね?↓
きれいに書けるようになりたい。。
$count = scalar(@a)-5 < 0 ? 0 : scalar(@a)-5;
>>942 (($count = scalar(@a) - 5) < 0) and $count = 0;
とかかなあ
でもたぶん演算速度的にはほとんどかわらないだろうし
わかりにくくなるから素直に2行にわけて書いておいた方がいいと思う
別に無駄でもないと思うが、単に見やすくするなら、 1. my $count = @a < 5 ? 0 : @a - 5; 2. #my $count = (sort @a - 5, 0)[1]; use List::Util qw(max); my $count = max(@a - 5, 0);
また
>>931 だが
Cの方で、
/* 配列のポインタと個数を渡して配列の合計を返す */
int sum(int *a,int k) {
int value=0,i;
for(i=0;i<k;i++) {
value+=*(a+i);
}
return value;
}
とかした場合って、perl側でどうやって渡せばいい?
@ar=(1,2,3,4,5,6,7,8,9,10);
my $test=new Win32::API('test','sum','PN','N');
$test->Call(\@ar,10);
とかやってみたけどdllにはメチャクチャな値が渡される
>>941 それでいいと思います
もしくは use POSIX; しておいて ceil() を使うとか
947 :
942 :2011/09/01(木) 10:13:06.91 ID:???
>>943-944 ありがとうございます。
2行でもそんなにおかしいコードではないんですね。
perlは色んな書き方できるのが長所であり短所なんで視認性がありつつ効率的なコード書きが出来たら
もっと楽しいんだろうな。
会社の経理さんに頼まれて perl でアプリ作ってたんだけど、 数学の四捨五入と銀行の四捨五入って違うのね。 ちょっとずつずれてて焦ったwwwww
>>949 どういう風に違うの?
後学のために教えてくんろ
5未満→切り捨て 5超→切り上げ ちょうど5→上の桁が偶数になる側へ丸める こんなのあったな。
五捨五入
銀行丸めで調べてみれ
>>949 浮動小数点誤差に気をつけろ。
Perlでは避けられない。
意外と丸めって深いよな 負数の丸め方とかもあるし
最近のメールフォームは多機能で余分な機能が多すぎるので難しいです。 なので 1. バリデーションはJqueryで行う 2. CGIはpostで送られたデータを送信して送信完了ページへリダイレクトするだけの機能 このような非常にシンプルなCGIはないでしょうか。 お願いします。
誘導されてきたことぐらいは書け。 じゃなきゃマルチポストは帰れ!で済まされちゃうよ。
<html> <body> <a href=***><strong>おやつ</strong></a> <a href=***>ぽてち</a> <a href=***>がむ</a> <a href=***>ばなな</a> </body> </html> 上記があった場合、scraperで下記のような結果にしたい場合、 どのように書けばよいでしょうか? リファレンスの階層は多少変わっても構いません。 my $scraper = scraper{ process '/html/body', 'aaa[]' => scraper{ process 'a', ???; }; }; #結果 $scraper->{aaa}->{item} = おやつ $scraper->{aaa}->[0] = ぽてち $scraper->{aaa}->[1] = がむ $scraper->{aaa}->[2] = ばなな
$scraper->{aaa}->{item} = 'おやつ' ってことは $scraper->{aaa} は {item => 'おやつ'} という無名ハッシュへのリファレンス。 一方 $scraper->{aaa}->[0] = 'ぽてち' …ってことは $scraper->{aaa} は ['ぽてち', 'がむ', 'ばなな'] という無名配列へのリファレンス。 これを両方同時に成り立たせるのは無理だんべ。
書き込むファイルがANSI形式の場合でフォームからunicode文字を送信して たば書き込むだけの場合、unicode.pmとか使わなくても特に問題ないんでしょうか? unicode.pmが必要なのって書き込むファイルがunicode形式の場合なんでしょうか?
962 :
959 :2011/09/07(水) 17:53:37.10 ID:???
>>960 そうですか。
違う方法を考えます。
ありがとうございます。
>>961 お前の環境はテストスクリプトを走らせると爆発でもするのか?
#!/usr/bin/perl -w
use strict; use CGI::Carp 'fatalsToBrowser'; use CGI ':all';
my $charset = 'UTF-8';
my $log = '/path/to/test.log';
charset($charset);
my $cgi = CGI->new;
if (my $str = $cgi->param('str')) {
open my $fh, '>>', $log or die $!;
print $fh '--- ' . localtime() . " ---\n$str\n";
close $fh;
}
open my $fh, '<', $log or die $!;
print(
header(),
start_html(-Title => $log, -lang => 'ja', -encoding => $charset),
startform(),
div(textarea('str'), submit('write')),
hr(),
div(join br(), map escapeHTML($_), <$fh>),
endform(),
end_html(),
);
>>962 たとえば
$scraper->{aaa}->{item} = "おやつ"
$scraper->{aaa}->{list}->[0] = "ぽてち"
$scraper->{aaa}->{list}->[1] = "がむ"
$scraper->{aaa}->{list}->[2] = "ばなな"
みたいな形だったら作れると思うが
$scraper->{aaa} = {item => "おやつ", list => ["ぽてち", "がむ", "ばなな"]}
ってことね
質問があります。 PerlとSendmailを使ってFromの内容を送る場合なんですが、ググっても肝心なFormにあるinputやtextareaのデータをどうやって変数?に送っているのかを解説している日本語サイトが見つかりません。 なのでここで質問させて頂きたいのですが。 例えば、VBやC#なら関数名のあとに引数で値を渡しますがPerlを使ってFormの各種コントロールからどやって値を渡しているのかメカニズムがとてもわかりにくく感じました。 こんなお馬鹿な私に簡単に説明して頂けないでしょうか。
試しに書いてみたが…。 my $scraper = scraper { process 'body', 'aaa[]' => scraper { process 'a > strong', item => 'TEXT'; process '/*/a/text()', 'list[]' => 'TEXT'; }; }->scrape($content); 言うまでもないけどHTMLの構造に依存なので。 最後だけXPath式なのは、 A要素の子要素にSTRONGがない構造をCSS式でどう書くかわからなかったんで。 誰か教えて。
967 :
966 :2011/09/07(水) 20:06:51.68 ID:???
早速だけど
>>966 これちょっと違うかもな…。
これだと $scraper->{aaa}->[0]->{item} = "おやつ" とかになっちゃうね。
そもそもなんで'aaa'じゃなくて'aaa[]'なんだろう?
単にベタなフラグ立ての文字列だよ。 >} elsif ($key =~ s!\[\]$!!) { >$stash->{$key} = [ map __get_value($_, $val, $uri), @nodes ];
>>969 素早い回答ありがとうございます。
クエリでググらないといけなかったんですね、すいません。
一応読んでみて私なりに理解することができました。
FormのデータがSTDINにFormの各種コントロールのname属性=入力された値&name属性=入力された値・・・と全て格納されるので、まず全ての文字列を変数に格納して&と=で分割して変数に格納していくんですね。
やっと理解できました、ありがとうございます。
ファイルロックするとき、ファイルオープンする直前にロックしたほうがいいのか、 それともスクリプトの序盤でロックしてしまうほうが安全か。。。迷う
>>970 最初「cgi perl form」とかでググって、
ヒットしたページをいくつか見てみて「クエリ」というキーワードを見つけて、
CGIで渡される文字列を調べるんだからperlは関係ないな、と
「cgi form クエリ」でググり直して、
みたいに新たに検索語も探しつつ何度か調べ直すのは結構有効。
以上ご参考まで。
973 :
nobodyさん :2011/09/08(木) 01:52:54.27 ID:lOPFQGVz
>>971 ファイルオープンの直前でおk
読み込みだけならロックはいらない
オープンしないとファイルハンドルなくね? ロック用のファイルでも作るの?
読み込みもロック必要では? 読み込み中にファイルが更新される可能性もあるわけだし。
ふと思ったんだけど、ロックファイルを用意するとか、flock を使用するとかの別のところ、 ファイルシステム上でデッドロックが起きてしまう可能性ってどれぐらい高いんだろう? flock だったり、ロックファイルを作ってのロックだったりが成功しても、 読み書きしようとするのにロックが掛かって処理できなかったらどうしようも出来ないよね? そもそも、そこまでの問題は一般ユーザーではどうしようも出来ないから、特別考慮しなくてもいいのかな?
デッドロックが起きるようなファイルシステムがあったら それはOSのバグかもしくはストレージの不具合か いずれにしても致命的なエラーなので そのまま使い続けられるような状態じゃないので そんなことがもし起きるようなら プログラム(アプリケーション)でなんとかするんじゃなく OSを正常なものに変えるなりストレージを修理・交換するなりの 根本的な手当が必要ってことだろう
>>972 どうもです。
WebProg全般に言えると思うんですけど、なぜC#やJAVAみたいにFormの各種コントロールのname属性から直接関数を指定して引数に代入できないでしょうね。
内部でどういう処理をしているのかがとてもわかりづらいです。
いちいち値を文字列関数で処理してから変数に格納するとか合理的とは言えないと思うんですが。
ブラウザはフォームの入力をHTTPの仕様に沿って foo=1&bar=2 のように変換してサーバーに送信。 サーバーはそれをperlに渡す。 perlは受け取ったデータを処理する。 実際にはもっと複雑だが、ともかくデータは色々なところを通ってようやくperlまで辿り着く。 リレーのバトンが重かったり妙な形だったり何本もあったりしたら大変だよねえ。
>>978 ブラウザ側とサーバ側で、HTTPプロトコルを使って値をやりとりする必要があるから、
全部ひとつの文字列にまとめて固めて送ってくる訳で。
Perlでの実処理ではデータを自分でいじらずにCGIモジュールあたりを使いましょう。
> いちいち値を文字列関数で処理してから変数に格納するとか
そんなことをしなくても、
> Formの各種コントロールのname属性から直接関数を指定して引数に代入
みたいな前処理をやってくれます。↑これは若干意味不明だけど
>>982 > 尤も、俺は
>>967 の
> >そもそもなんで'aaa'じゃなくて'aaa[]'なんだろう?
> が何を意図した「?」なのかが理解出来ん(上記の理由)から、
上記の理由ってどれだす?
> そもそもなんで'aaa'じゃなくて'aaa[]'なんだろう?
というのは元々の
>>959 の
> process '/html/body', 'aaa[]' => scraper{
がなんの目的で配列へのリファレンスになってるんだろう、という意図ですよ。
> #結果
> $scraper->{aaa}->{item} = おやつ
> $scraper->{aaa}->[0] = ぽてち
> $scraper->{aaa}->[1] = がむ
> $scraper->{aaa}->[2] = ばなな
を見ると、単に 959 はハッシュへのリファレンスと配列へのリファレンスの意味が
よくわかっていなかった(区別がついていなかった)ってだけのことなんですかね。
>を見ると、単に 959 はハッシュへのリファレンスと配列へのリファレンスの意味が >よくわかっていなかった(区別がついていなかった)ってだけのことなんですかね。 それだけの事
950ですが、スレ立てできない専ブラもどきで書き込みしてるんで、
ブラウザのレベルが足りなくてスレ立てられねっす。すんませんが誰かかわりにお願いします。
一応
>>1 、
>>2 の確認と修正したテキスト置いときます。
1 の内容:
Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは
>>2 以降
前スレ
http://hibari.2ch.net/test/read.cgi/php/1295170172/
988 :
nobodyさん :2011/09/09(金) 13:00:13.53 ID:YZzHj5h/
すいません、少々分からない事があるので教えていただきたいのですが use lib qw(/cgi-bin/mycpan/); use URI::Escape; use SHA::PurePerl qw(hmac_sha256_base64); なぜかこれが500エラー出て通りません Escape.pmは/cgi-bin/mycpan/URI/に PurePerl.pmは/cgi-bin/mycpan/SHA/に入っており、実行ファイル(test.cgi)は/にあります。 / test.cgi └cgi-bin−mycpan┬SHA−Escape.pm └URI−PurePerl.pm という感じになっています。 パーミッションは全て705です。 これだけでエラーの原因が分かる方いませんか?
use libは絶対パスで正しいのか あとだからログを見ろよ
990 :
nobodyさん :2011/09/09(金) 13:09:29.33 ID:YZzHj5h/
>>989 いや、レンタルサーバーなので鯖のログ見れないんですよ
・・・あれ、use libって絶対パスでしか使用できないんでしょうか?
URLのルート("/")とサーバのファイルシステム上のルートは別物だよ。 ごっちゃにしてないかい?
992 :
nobodyさん :2011/09/09(金) 13:54:14.52 ID:YZzHj5h/
頭に/をつけたらだめだったんですね・・・よくわかりました 失礼しました
>>986 4: WEBサーバーのエラーログにはこんな行がありました (URL や PATH はそのまま乗せないこと)
>>990 > いや、レンタルサーバーなので鯖のログ見れないんですよ
そんなレン鯖はやめなさい。
ちゃんとログの見られる鯖に替えた方がよろし。
>>996 乙っす。
乙
梅
松
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。