Perlコーディング初心者質問スレ Part 62

このエントリーをはてなブックマークに追加
1nobodyさん
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ http://hibari.2ch.net/test/read.cgi/php/1275739870/
2nobodyさん:2011/01/16(日) 18:29:52 ID:???
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/

[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://ascii.asciimw.jp/books/books/detail/4-7561-3057-7.shtml
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/

[オンラインマニュアル]
最新のドキュメント: ttp://perldoc.perl.org/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perldoc きまぐれ訳: ttp://fleur.hio.jp/perldoc/
perldoc.jp: ttp://www.perldoc.jp/

[モジュール]
CPAN: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/

[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl5.8Unicodeメモ]
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
3nobodyさん:2011/01/17(月) 14:48:06 ID:???
即死しそうだなおい
4nobodyさん:2011/01/17(月) 17:08:34 ID:???
ぱ☆る☆る
5nobodyさん: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が返ってきます。

何か指定の仕方が間違ってたりするのでしょうか・・・?
6nobodyさん:2011/01/17(月) 17:16:51 ID:???
そりゃウェブサーバがファイルのmime-type決めるのに普通は
拡張子使ってるからな。ファイルを取得して中身から判定しない
とだめじゃない?

7nobodyさん:2011/01/17(月) 17:32:56 ID:ux/cXg3g
>>6
レスありがとうございます
おぉ・・・一度ファイル取得してから判断するしかないですか・・・
大きなファイルうpして、許可してないタイプのファイルだった場合、
結構無駄なリソース食っちゃいますねぇ・・・
ネットでいろいろ調べたら、CGI.pmで拡張子間違ってても正常なmimeが取得できるとあったのですが・・・
8nobodyさん:2011/01/17(月) 17:44:36 ID:???
Apache で MagicType が有効なら、たぶん拡張子が違くても
ファイルの種類を判別できるのかも
9nobodyさん:2011/01/17(月) 17:47:25 ID:???
>>7
ねえ、ファイル見もしないで判定出来るって凄すぎませんか?
10nobodyさん:2011/01/17(月) 17:49:38 ID:???
11nobodyさん:2011/01/17(月) 19:56:50 ID:???
>>10
# File::MMagic->new()
# File::MMagic->new( $filename )

モジュールを初期化します。ファイル名が与えられなければ、
File::MMagicに格納されている秘技(=magic number)が使われます。

秘技!なんか凄そう
どういう仕組なんだろう…
12nobodyさん:2011/01/17(月) 20:01:56 ID:???
先頭何バイトが何に一致するかで探すだけ

秘技は翻訳ミスな気がしなくもない

秘技はリストと読み替えれば分かりやすい
13nobodyさん:2011/01/17(月) 20:17:53 ID:???
ただのfileやね
14nobodyさん:2011/01/18(火) 08:03:47 ID:???
実際のオープンは FILE とかで開いてるのに、スレのサンプルをそのままコピペしてるから何も表示されてない。

と予測してみる。
15nobodyさん:2011/01/18(火) 10:35:33 ID:???
誤爆?
16nobodyさん:2011/01/18(火) 11:22:05 ID:???
ですww
コピペしなおすのも面倒なので放置 ^-^;
17nobodyさん:2011/01/21(金) 23:22:48 ID:???
perl超ど素人の私に教えて下さい。

HTMLの整形プログラミングをしてるんですが、
フォームから入力されたテキストの改行を</p>\n<p>で置換されるまではできるようになったのですが
これを二回以上改行するときに</p><p style="margin-top:○(←改行した数)em;">ってできるようにしたいんですが、どうしたらいいですか?
18nobodyさん:2011/01/21(金) 23:31:02 ID:???
my $count = $str =~ s/元/後/g;
19nobodyさん:2011/01/21(金) 23:37:45 ID:???
あ、ちゃんと読んでなかった。こういうことか?
$str =~ s{(\n+)}{sprintf '</p><p style="margin-top: %dem;">', length($1)}ge;
20nobodyさん:2011/01/21(金) 23:55:13 ID:???
>>19
はい、要望どおりでございます。おかげさまで解決できました。
そして一瞬で解決してくれて軽く感激しています。ありがとうございました!
ちなみに私は$value =~ s/&/&/g;とかの置換しか知らないから一日中四苦八苦してました(汗
21nobodyさん:2011/01/22(土) 00:51:29 ID:???
ファイルハンドルをlocalする理由をおしえてください
22nobodyさん:2011/01/22(土) 01:35:31 ID:???
局所化しないと余計な問題が起こるからです。
というかそもそも今日びは open my $fh, '<', '/etc/passwd'; などとしてレキシカル変数をハンドルにするのが普通です。
23nobodyさん:2011/01/22(土) 09:50:40 ID:???
余計な問題ってなんですか?
あとなんでレキシカル変数を使うんですか?
24nobodyさん:2011/01/22(土) 13:36:28 ID:???
ファイルハンドルの重複
↑を避けるため
25Perl忍者 ◆M5ZWRnXOj6 :2011/01/22(土) 13:51:35 ID:Yp6l44nh
26nobodyさん:2011/01/26(水) 09:47:04 ID:???
Perlでパスワードをメール送信することがあるのですが、
平文でコード中に書いてしまってもいいのでしょうか。

パスワードは一種類だけで、CGIファイルのパーミッションも
700にしてあるのですが、この程度で良いのかどうにも不安です…。
27nobodyさん:2011/01/26(水) 11:20:26 ID:???
>>26
>>1
セキュリティースレッド
http://hibari.2ch.net/test/read.cgi/php/995032597/
△▲ WebProg 初心者の質問 Part23 ▼▽
http://hibari.2ch.net/test/read.cgi/php/1294318320/
28nobodyさん:2011/01/27(木) 23:16:11 ID:???
strftimeを使って、時刻を英文で表示したくて以下のように書きました。

use POSIX;
setlocale( LC_ALL, "English" );
print strftime("%a, %d %b %Y %H:%M:%S %Z", localtime);

曜日は英語になったのですが、タイムゾーン%Zが日本語のままになってしまいます。
%ZもJSTなどと表示させるようにするにはどうしたらいいですか?
日本以外でも実行したいのでJST直書きは避けたいです。
29nobodyさん:2011/01/28(金) 17:35:31 ID:???
$tag=許可するタグ。
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/<$tag>(.*?)<\/$tag>/<$1>$2<\/$3>/g;

として許可しておいたタグだけ使用できるようにしたいんですが、
<tag>文字</tag>は上手くいくようになったんですが
<tag><tag>文字</tag></tag>とやると上手くいかないです。
<tag>が重複しても大丈夫なようにするにはどうすればいいですか?
30nobodyさん:2011/01/28(金) 17:42:31 ID:???
~s/</&lt;
~s/>&gt;
って打たないといけないのか・・・。訂正します。
31nobodyさん:2011/01/28(金) 18:23:48 ID:???
正規表現で任意の深さのネストの対応をとるのは無理って習わなかったか?
間はそのままでいいんなら対応を気にせず<tag>と</tag>をそれぞれ独立に
置換すればいいと思う。

32nobodyさん:2011/01/28(金) 18:37:22 ID:dCs2TR10
>>29
先に&<>"'をescapeした上で許可するタグだけ戻したらいいんじゃないの?
$htmlがescapeし終わった後の文字列だとして、tagとtag1だけ許可したいなら
$html =~ s{&lt;(/?(?:tag|tag1))&gt;}{<$1>}g;
とか。
33nobodyさん:2011/01/29(土) 09:11:42 ID:???
>>29
><tag><tag>文字</tag></tag>
これ↑の意味がよく分からないのですが、同じタグがネストするケース(ネストさせて意味のあるタグ)ってありましたっけ?

<b><b>文字</b></b>
34nobodyさん:2011/01/29(土) 09:56:52 ID:???
<small><small>文字</small></small>
他にもあると思う。
35nobodyさん:2011/01/29(土) 21:13:48 ID:???
36nobodyさん:2011/01/30(日) 07:59:51 ID:???
>>28
うまくいくはずだけど。
なんか足りないんじゃねえの?
37nobodyさん:2011/01/30(日) 11:13:51 ID:???
手元環境ではそもそも%Zが日本語にならないのでなんとも。
環境さらした方がいいんじゃ? strftimeって普通はCの
ライブラリ呼んでるだけだろうし。
38nobodyさん:2011/01/31(月) 01:56:23 ID:???
>>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 東京 (標準時)
39nobodyさん:2011/01/31(月) 09:33:32 ID:???
utf8 フラグが立ってる時の decode って、url decode もされる?
40nobodyさん:2011/02/01(火) 08:10:09 ID:???
リファレンス先が同じものであるのかの比較演算子は何を使うのでしょうか?

==でしょうか?
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";
41nobodyさん:2011/02/01(火) 08:59:03 ID:???
>>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";
}
42nobodyさん:2011/02/01(火) 09:01:05 ID:???
すいません、少し語弊がありそうな気がしたので、以下に訂正します。

× リファレンス先が同じものであるのか
○ リファレンス(アドレス)が同じものであるのか
43nobodyさん:2011/02/01(火) 09:03:38 ID:???
>>41
ありがとうございます。
==で比較すればいいんですね!
44nobodyさん:2011/02/01(火) 09:05:37 ID:???
リファレンスはアドレスなんだから == でしょ?
45nobodyさん:2011/02/01(火) 10:21:58 ID:???
@ISAって何の略 教えて
46nobodyさん:2011/02/01(火) 10:40:36 ID:???
しらん

「ISA」って名前の配列変数ってのはわかる。
47nobodyさん:2011/02/01(火) 10:50:11 ID:???
どんな略か推測してみて

ISAの英語
48nobodyさん:2011/02/01(火) 11:02:01 ID:???
Included ShippingCharge Array

つまり、運送料の一覧の数字が配列されてる。
49nobodyさん:2011/02/01(火) 11:03:07 ID:???
is a
has a
50nobodyさん:2011/02/01(火) 12:30:43 ID:???
DA PUMPのイケメンの人でなく?
51nobodyさん:2011/02/01(火) 16:32:54 ID:???
うわっ。。。。つまんね〜

やっちまったなw
52nobodyさん:2011/02/02(水) 11:51:08 ID:QPEQ2Nwa
ハッシュの中から、特定のキーを持つペアだけ抽出し、ハッシュとして返す関数はないですか?
53nobodyさん:2011/02/02(水) 12:26:17 ID:???
map
54nobodyさん:2011/02/02(水) 13:02:30 ID:???
perlに関する質問です。

実現したいこと:
4枚程度の画像が実際の大きさの20%に縮小されて並んでいる。
その4枚の中からどれか1つを選ぶ。(チェックする)
そして「OK」のボタンを押す。
その結果、選んだ画像が実際の大きさで表示される。

CGIのファイルの中で、
その4枚の画像を<img src="$gazou.png" width="20%">のように設定しました。
その結果、画像はしっかり4枚並びました。
しかし「OK」を押してみると、実物の画像は表示されません。
CGIのファイルの中で、OKを押した後に表示されるものとして
<img src="$gazou.png"> と指定しましたが、これだとだめなんでしょうか。

「チェックをつけたもの」の画像を表示するため
何か+αとしてなんらかの記述を書き加える必要があるとは思っているのですが、
具体的にどんなことを書き加えれば良いのか、分かる方ご教授願います。
55nobodyさん:2011/02/02(水) 14:04:34 ID:???
それは Perl の質問じゃなく html の質問の様な気がする。
5654:2011/02/02(水) 14:09:30 ID:???
「変数をどう指定するか」
という話なのでPerlの質問のつもりでしました。
57nobodyさん:2011/02/02(水) 15:57:38 ID:???
多分ね。
jQuery 使ったほうが幸せになれると思うの



>>52
テストしてないけど
my %results = map { ($_, $test{$_}) } grep { 〜判定〜 } keys(%test);
多分動かないと思うけどw
58nobodyさん:2011/02/02(水) 16:17:36 ID:???
>>56
OK を押した後に何が出力されてるか
print すればいいじゃない
59nobodyさん:2011/02/02(水) 16:43:16 ID:???
keysって左辺値にもなるんだね。
知らなかった。

keys %hash = 64;
6056:2011/02/02(水) 16:52:02 ID:???
>>58
「選んだものの画像」を出すにはどうすればいいですか?
61nobodyさん:2011/02/02(水) 17:05:37 ID:???
<input type=radio name=baka value=aho>

CGI->new->param(baka)
6256:2011/02/02(水) 17:16:46 ID:???
そのvalueの値を関係付けさせるというのはなんとなくイメージがつくのですが
どう記述して表せば良いでしょうか。
63nobodyさん:2011/02/02(水) 19:55:21 ID:???
そもそも表示されたHTMLのソースはどうなってるのよ
><img src="$gazou.png"> と指定しましたが、
こうなってるの?
64nobodyさん:2011/02/02(水) 20:29:13 ID:???
メモ帳でざっくり書いてみた

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 も何もない環境なので動作確認できない

6556:2011/02/02(水) 20:59:38 ID:???
>>63
$gazou は変数なので、表示されたHTMLにはそれぞれの画像ごとに$gazouの部分が変わっています。

>>64
試してみます。
66nobodyさん:2011/02/02(水) 21:09:28 ID:???
>>65
本当にHTMLソースがそうなってるなら画像が表示されないってのはあり得なくね?
Perl部分は問題ないってことだよね
6756:2011/02/02(水) 21:28:40 ID:???
説明不足でしたが、全て1つのCGIで行うことを前提とすればどうでしょうか。

>>64
 HTMLの中身見ましたが、「OK」ボタンの記述が書かれていませんよ
>>66
選択肢となる画像はちゃんと表示されます。
OKを押したときに選んだ画像が表示されないのです。
68nobodyさん:2011/02/02(水) 21:36:24 ID:???
>>67
>OKを押したときに選んだ画像が表示されないのです。
>>63>>66もそのOK押したHTMLソースの話だろ
そのHTMLのソースにimgタグが書いてあるならPerlの話じゃないよね

つか、面倒だからPerlのコード晒せよ
69nobodyさん:2011/02/02(水) 21:38:33 ID:???
type=submitぐらい黙って書き足せよかす
7056:2011/02/02(水) 21:44:26 ID:???
・実行ページ:http://masao.kuronowish.com/town/bbs30.cgi
・bbs30.cgiのコード:http://masao.kuronowish.com/town/aiueo.txt
・配布元サイト:http://cgi-design.net/prog/bbs/bbs30/index.htm

不足している情報などもあるかもしれないので何かあったら聞いてください。
71nobodyさん:2011/02/02(水) 22:01:25 ID:???
>>70
正男は置いといて、一通り探してみたけどOKの処理部分がねーじゃねーか
7256:2011/02/02(水) 22:05:12 ID:???
その処理をどう作ればいいかわからないんです;;

スクリプト中の
#★★★★★★★★
と書いてあるところらへんにOKのボタンを入れたいと思っているのですが。
73nobodyさん:2011/02/02(水) 22:07:50 ID:???
>>72
>>54で書いたコード残ってないの?
74nobodyさん:2011/02/02(水) 22:11:10 ID:???
お客様の中にエスパーの方はいらっしゃいませんかー
7556:2011/02/02(水) 22:12:50 ID:???
いろいろと事情が残っていませんね。
7656:2011/02/02(水) 22:19:11 ID:???
↑  事情が 《あって》 残っていません
77nobodyさん:2011/02/02(水) 22:27:30 ID:???
★三 【 スクリプト改造工房 PART 9 】 ★三
http://hibari.2ch.net/test/read.cgi/php/1143834740/
【 スクリプト改造依頼スレ】(丸投げ) part7再々
http://hibari.2ch.net/test/read.cgi/php/1222645553/

こっちに行った方がいいんじゃない?
78Perl忍者 ◆M5ZWRnXOj6 :2011/02/02(水) 22:32:05 ID:YiKhMWVN
おめえらstrictオタクのPerlerは

他人が書いたコードで、use strict;やuse warnings;や
レキシカルスコープのmyとかつけてなかったら

みくだすんだろうなあぁwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwww
79Perl忍者 ◆M5ZWRnXOj6 :2011/02/02(水) 22:37:44 ID:YiKhMWVN
駆け出し君「ワールドオブクラフトのアイテムDBスクリプトかきました」

  ###strictオタク  「プっ なにその古い書き方・・・ないわー・・・

strictオタク「ほお すごいですねぇ use strictってしってます?」
80nobodyさん:2011/02/03(木) 00:13:42 ID:???
こんな感じ?
テスト http://utsu.ath.cx/test/
ソース http://utsu.ath.cx/test/index.txt

これぐらい読み解けなければ、とりあえず勉強しなおした方が良いかと思います。
8156:2011/02/03(木) 01:09:54 ID:???
開けませんね
82nobodyさん:2011/02/03(木) 01:28:10 ID:???
何がどう開けないのか書くべき
404が出るのかとか403なのかとか。
そもそもDNSの解決がされないのか。
index.txtが開けないのかとか。

端的に一言で済ますんじゃなくて、もっと詳しく。
83nobodyさん:2011/02/03(木) 01:55:37 ID:???
84Perl忍者 ◆M5ZWRnXOj6 :2011/02/03(木) 08:03:52 ID:ub8sTpkt
>>80

見やすい わかりやすい
85Perl忍者 ◆M5ZWRnXOj6 :2011/02/03(木) 08:05:52 ID:???
my $config = {
'cgi' => 'index.cgi',
'dir_img' => 'img/',

'per_line' => 3,

'file_template' => '_data/index.html'
};


ここが凄くかっこいい
86Perl忍者 ◆M5ZWRnXOj6 :2011/02/03(木) 08:12:39 ID:???
表示用テンプレートって言ってるのが









カッカッカw
87nobodyさん:2011/02/03(木) 16:04:26 ID:???
英語が苦手な自分としては助かるなー

あたらしい perldoc.jp できたよー - TokuLog 改メ tokuhirom’s blog
http://d.hatena.ne.jp/tokuhirom/20110203/1296712360
88そしえて:2011/02/03(木) 17:10:41 ID:49ky3Gl+
ttp://code.cside.com/3rdpage/jp/unicode/converter.html
↑のような変換をperlスクリプト内に実装するには
どうすれば良いですか?
89nobodyさん:2011/02/03(木) 17:43:02 ID:???
pack,unpack
90nobodyさん:2011/02/03(木) 17:54:21 ID:???
>>88
つHTML::Entities
91そしえて:2011/02/03(木) 18:35:35 ID:49ky3Gl+
>>89,90

出来ました、ヒントありがとうございます!
92Perl忍者 ◆M5ZWRnXOj6 :2011/02/03(木) 22:45:01 ID:???
新しくなったPerldoc カッカッカw
93nobodyさん:2011/02/04(金) 15:11:43 ID:???
改悪うじぇえ
94nobodyさん:2011/02/04(金) 15:58:49 ID:???
>>80
質問主さんフェードアウトのため、消しました。
95nobodyさん:2011/02/04(金) 17:28:24 ID:???
index.cgi から require した sub.cgi の中で、index.cgi で使われてるグローバル変数を使うのってどうやるんですか?
96nobodyさん:2011/02/04(金) 17:34:26 ID:???
パッケージを変えてなければそのまま使えるし、変えてたら
パッケージ名で修飾すればいい($PACKAGE::foo)。でもそういう
書き方は感心しないな。悪い癖がつく前にモジュールの勉強とか
した方がいいよ。
97Perl忍者 ◆M5ZWRnXOj6 :2011/02/04(金) 17:36:02 ID:???
ソウダヨ ベンキョウ シタホウガイイヨ
98nobodyさん:2011/02/04(金) 18:29:53 ID:???
$form->CGI->new(); したときに、これを使いまわすんだけど、
これをいちいち渡さなきゃならないのがね。
同じデータのコピーを作られるってのがなんかやだ。
99nobodyさん:2011/02/04(金) 19:05:17 ID:???
リファレンス
100nobodyさん:2011/02/04(金) 21:09:36 ID:???
デリファレンスがめんどくさい
101nobodyさん:2011/02/04(金) 21:22:40 ID:???
今日以前の、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);
}
102nobodyさん:2011/02/04(金) 21:25:48 ID:???
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()

こんな時はどう対処すればよいのでしょうか?
103Perl忍者 ◆M5ZWRnXOj6 :2011/02/04(金) 21:38:37 ID:???
またMechanize野郎かよwwwwwwwwwwwwwww
WWWWWWWWWWWWWWWWWWWWWWWWWWW
wwwwwwwWwwwwwwwwwwwwwwwwwwwwwww
104nobodyさん:2011/02/04(金) 22:54:07 ID:???
$mech->click('name2')
105102:2011/02/05(土) 00:30:07 ID:???
イメージのボタンはそもそもボタンとして認識されないようです。

$mech->click('name2') でも下記のようにエラーとなります。

No clickable input with name "name2"

同じように認識できない不具合が報告されており、下をみると、どうやら2年
近く前から報告されているにも関わらず、対応されていないようです。

http://code.google.com/p/www-mechanize/issues/detail?id=32&can=1&q=submit

Rubyのモジュールでは対応できているようなので、Perlはあきらめます。
106nobodyさん:2011/02/05(土) 00:32:08 ID:???
普通にポストすりゃいいじゃん
107nobodyさん:2011/02/08(火) 20:02:05 ID:Jq+d5fQU
独学でmacでパールを勉強してるのですが、
print命令でファイルハンドルに指示を出してるのですが、書き込めはできるのですが、
ファイルが無い場合、新規で自動でファイルが作成されるはずとの記載がありましたが、
一切自動でファイルが生成されません。
ググっても、設定が必要等言われてますが、
mac自体も初心者でほとんどわかりません。
どのような設定にすればいいのでしょうか?
お助けください。
 
108nobodyさん:2011/02/08(火) 20:16:08 ID:???
どう書いたかぐらい載せろや
109nobodyさん:2011/02/08(火) 20:17:09 ID:???
110nobodyさん: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__
ファイルがある場合の書き込みはできるのですが、
ファイルが無い場合の新規で自動ファイル作成が行われません。
どうしてでしょうか?
111nobodyさん:2011/02/08(火) 20:53:15 ID:???
if (open(FH, "count.txt")) { # ファイルないから false

  # ここ通らないからファイルも生成されない
  if (open(FH, ">count.txt")) { # 略 } else { print "書き込みでコケた\n" }

} else {
 print "書き込みでコケた\n"; # たぶん読み込み
}
112Perl忍者 ◆M5ZWRnXOj6 :2011/02/08(火) 23:53:41 ID:???
メルアド教えて>マック君
113nobodyさん:2011/02/09(水) 00:58:30 ID:???
アップロードされる画像を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");
114Perl評論家:2011/02/09(水) 01:02:11 ID:???
考えとくから待っとけカス
115Perl評論家:2011/02/09(水) 01:03:02 ID:???
寝る
116nobodyさん:2011/02/09(水) 01:17:16 ID:???
>>113
試してないけど $image->Read(file => $updata); はどう?
http://www.imagemagick.org/script/perl-magick.php
117nobodyさん:2011/02/09(水) 01:32:54 ID:???
GD なら LWP とかで取得したメモリの中のを使って new 出来る
拡大・縮小だけなら GD の resample でいいんじゃないの?
118nobodyさん:2011/02/09(水) 01:37:37 ID:???
$image->Read($ImageData);


これだとどう?
119nobodyさん:2011/02/09(水) 01:40:29 ID:???
間違えたw


$image->ReadImage($ImageData);
120113:2011/02/09(水) 17:04:08 ID:???
ありがとうございますー
>>116 さんの通り、file=>$updata でそのまま扱えました。
121Perl評論家:2011/02/10(木) 00:15:58 ID:???
検索なんてするな

ここで聞いたほうがいいよ

だから、皆検索しないでここで聞いたほうがいいよ
122nobodyさん:2011/02/13(日) 00:09:02 ID:???
みんなって、自分が作った関数とかパッケージとかのファイル名ってどうつけてるんですか?
123nobodyさん:2011/02/13(日) 01:42:49 ID:???
func0001 から連番。
124nobodyさん:2011/02/13(日) 02:40:55 ID:???
CPANとかぶらなくて一般的な短めの名前付けてる
My〜とかネームスペースは付けてない
125nobodyさん:2011/02/13(日) 03:46:28 ID:???
> CPANとかぶらなくて

どういうこと?
126nobodyさん:2011/02/13(日) 08:27:12 ID:???
>>125
自分で付けたパッケージ名がたまたまCPANにも存在してたらややこしいから避けるということ
127nobodyさん:2011/02/13(日) 12:46:46 ID:???
かぶらないようにしてても、
アップデートで被ったりするんだ罠
128nobodyさん:2011/02/13(日) 20:30:39 ID:???
Local::* を使うか Foo_Corp::* のように下線を使いましょう
129nobodyさん: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;
}
130nobodyさん:2011/02/14(月) 13:10:25 ID:???
>>129
@あくまで内部文字コードなので何であるかに依存したコードを書いては
いけまないし、普通は気にしないでかけるようになっています。内部的には
全く新規の文字コードを1から作ってるということはなくてutf8だったり
するかもしれないけど。

Aプログラム中に書くときはいちいちそんなめんどくさいことしなくても
ソースをutf8で記述してuse utf8プラグマを使えば直接書いていいよ

use utf8
if ($dec =~ /[あア]/) {

Bいちいち変換処理を書くのは面倒なので普通はI/Oレイヤを使います。

open(FH, "<:encoding(sjis)", "./sjis.txt");
while(<FH>){
# ここで$_はすでに内部文字コード
}

さらに言うとファイルを開いたりするたびに指定を書くのも面倒なので
openプラグマでまとめてデフォルトを指定したほうが楽です。



131nobodyさん: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)";
132Perl評論家:2011/02/14(月) 18:40:58 ID:???
133nobodyさん:2011/02/15(火) 00:38:57 ID:???
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;

を加えるなど

どうしたらよいか、教えていただけませんか。
134nobodyさん:2011/02/15(火) 01:00:58 ID:???
reverse
135nobodyさん:2011/02/15(火) 01:09:53 ID:???
map {$_->[1]}
sort {$a <=> $b}
map {[(split /,/)[0], $_]} @list

sort {$a <=> $b} 昇順
sort {$b <=> $a} 降順
136130: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を使ったほうがよさそうなので。
137131: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を使ったほうがよさそうなので。
138nobodyさん:2011/02/15(火) 12:21:13 ID:???
shiftjisとsjisは単なる別名なので同じ。

sjisとcp932は一部の文字のマッピングが違うので目的によって選べ。
JISとMSがそれぞれ違う変換表を定義しちゃったのですよ。ほんと不便
で迷惑な話だが恨むなら先人を恨んでくれ。
139137:2011/02/15(火) 12:31:16 ID:???
>>138
ありがとうございます。
それってもしかして"〜"とかのことですよね?
何て迷惑なことを…
140nobodyさん:2011/02/15(火) 14:09:51 ID:???
→ shiftjis じゃなくて cp932 で扱う。
〜 → 例のやつ。

いろいろめんどくさいのです。Encode::EUCJPMS を入れる用事ができてみたり。
141nobodyさん:2011/02/15(火) 14:28:43 ID:???
全角<->半角変換するのに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;
142nobodyさん:2011/02/15(火) 15:05:59 ID:???
bechmarkでもしてろよ
143nobodyさん:2011/02/15(火) 15:41:11 ID:???
他にも Lingua::JA::Regular::Unicode というモジュールもあります
144nobodyさん:2011/02/16(水) 19:12:02 ID:???
べっちまーくwww
145nobodyさん:2011/02/17(木) 01:14:23 ID:ql/X6pf8
perl初心者です。
os mac osx です。

ターミナルで、helloworldはできました。
次は、miでやりたいです。

設定に方法をわかりません。

どうやって設定すればよいでしょう?
146nobodyさん:2011/02/17(木) 01:23:59 ID:???
まるちでしね
147nobodyさん:2011/02/17(木) 02:02:09 ID:???
日本語不自由だな。
miって何だっけと思ってググったらエディタか
そのまま保存してperlコマンドに渡せばいいだけだと思うけど何がわからんのだろう
ターミナル操作までできてそこからわからないって珍しいな
148nobodyさん:2011/02/17(木) 05:25:01 ID:???
質問です
ニコニコの動画情報の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データだと上手くいき
外部サーバにアクセスするとサーバーエラー?になります。

色々わかってない所があるので変な事いってるかもですが
よろしくお願いします。
149nobodyさん:2011/02/17(木) 06:50:59 ID:???
そんなんで取得できたら苦労しません!

LWP::Simple で get してくださいな
150Perl忍者 ◆M5ZWRnXOj6 :2011/02/17(木) 12:16:14 ID:???
>>145
マカー初心者ならitoolsか@CHaTいけ
オサーンたちが教えてくれる
151nobodyさん:2011/02/17(木) 15:27:07 ID:???
>>149
> そんなんで取得できたら苦労しません!

フイタwww
152nobodyさん:2011/02/17(木) 16:07:46 ID:ql/X6pf8
>147 実は、ターミナルもよくわかってない ぐぐって、まねしただけ
>150 thx いってみる  
153nobodyさん:2011/02/17(木) 16:41:41 ID:???
>>148
糞ワロタ
せめてsocketを開けよ
154Perl忍者 ◆M5ZWRnXOj6 :2011/02/17(木) 16:51:10 ID:???
ニコニコっていうだけで書き込み見るきなかったごめん^−^;
155nobodyさん:2011/02/17(木) 17:07:36 ID:???
大丈夫だよ、もともと誰も期待してないから
156デフォルトの名無しさん:2011/02/17(木) 18:58:33 ID:???
155って誰にいってんの?
独り言きもいよ
157nobodyさん:2011/02/17(木) 19:03:11 ID:???
>>155 153に謝れよカス
158ぱるぱる:2011/02/17(木) 19:25:40 ID:???
>>153もっとあやまれカス
159ぱるぱる:2011/02/17(木) 19:26:56 ID:???
154に対する侮辱を撤退しろカス155
160nobodyさん:2011/02/18(金) 01:42:41 ID:???
sub func{
 my @array = ( 0 .. 5 );
 return \@array;
}

my $ref = &func( );

=====================

のようなプログラムだと、@arrayはfunc( )を抜けるときに破棄されるから、
$refが持っているアドレスは無効になると考えて良いでしょうか?
161nobodyさん:2011/02/18(金) 01:47:38 ID:???
無効にはならない
メモリからは破棄されない
162nobodyさん:2011/02/18(金) 01:58:06 ID:???
ぱーるはいちどかくほしためもりはおわるまでかいほうしなかったきがする
163160:2011/02/18(金) 01:58:12 ID:???
>>161
ありがとうございます。
$ref が @array を参照しているから、破棄されない、
ということでしょうか?
164160:2011/02/18(金) 02:03:03 ID:???
そもそも、関数を抜けても変数は破棄されない、ということでしょうか?
165nobodyさん:2011/02/18(金) 03:04:46 ID:???
リファレンスカウンタが0になったらガベージコレクトされる
166160:2011/02/18(金) 06:18:31 ID:???
>>165
ありがとうございます。
日頃C++やっていて、最近Perlの勉強を始めたばかりでした。
この変数の寿命は本当に大きな違いでした。
助かります。
167nobodyさん:2011/02/18(金) 11:00:06 ID:???
>>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..$#_] );
}
};
}
168Perl忍者 ◆M5ZWRnXOj6 :2011/02/18(金) 13:51:27 ID:zGuGrruR
>>167
0点 javascript板におかえり
169nobodyさん:2011/02/18(金) 21:35:35 ID:???
これはひどい。。。
170Perl忍者 ◆M5ZWRnXOj6 :2011/02/18(金) 22:17:05 ID:???
ひゅひゅだよ
171Perl忍者 ◆M5ZWRnXOj6 :2011/02/18(金) 22:29:51 ID:???
>>169
はやく死ね
172nobodyさん:2011/02/19(土) 00:38:24 ID:???
>>168
0点っていうの謝れ
173Name_Not_Found:2011/02/19(土) 00:43:24 ID:???
0点って言われるの嫌だろ?
お前たちと同じこととしてやったんだよ
174nobodyさん:2011/02/19(土) 00:47:23 ID:???
相当負けず嫌いな子供だな
175133:2011/02/21(月) 04:06:23.18 ID:???
>>135
遅くなりましたありがとうございます。
開いた時間でmapの使い方などを探して
いろいろな箇所に挿入し、なんども動かしてみましたが
動きませんでした。

理解が足りていないようです。もしよろしければ
ttp://takuo.main.jp/Cycling/weblib.htm
上記サイトの場合、どの部分にどの様な形で挿入すればよいか教えていただけませんか
176nobodyさん:2011/02/21(月) 05:52:35.82 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, "";
177nobodyさん:2011/02/21(月) 14:41:29.59 ID:???
do{ local $/; <FH> };
ってよく見かけるんですが
join "", <FH>;
は何かまずい所があるんでしょうか
手元のベンチだと join の方が早いんですが…
178nobodyさん:2011/02/21(月) 14:59:20.12 ID:???
>>177
ベンチをしたコードをさらしてもらえます?
あと、環境も(OS、Perlのバージョン等)
自分の環境でも試してみたいので。

自分が以前したときは、

read FH, my $buf, -s FH;

が速かった記憶が。
バイナリーモードでよかったら、バッファーを使わない

sysread FH, my $buf, -s FH;

もかなり速かったような。
179177: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
180nobodyさん:2011/02/21(月) 19:07:39.53 ID:???
>>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 $/;の元の$/をプッシュする作業のほうがコストがかかっているのかも。
181nobodyさん:2011/02/22(火) 09:32:48.27 ID:???
perlのcgiをサイトに設置するのはいいけどこれってソースコードぱくられたりしないの?
182nobodyさん:2011/02/22(火) 09:34:04.27 ID:???
これはなかなかいいギャグがきたなww
183佐々木優子 ◆M5ZWRnXOj6 :2011/02/22(火) 09:58:17.47 ID:???
181=182

自問自答乙wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
184nobodyさん:2011/02/22(火) 12:23:01.13 ID:???
181だけどなんで答えてくれないの?イジメ?
185nobodyさん:2011/02/22(火) 12:59:59.24 ID:???
>>183
ざんねんでした
181 と 182 は別人だぉ!
186nobodyさん:2011/02/22(火) 14:03:06.67 ID:???
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%      --
187nobodyさん:2011/02/22(火) 23:32:02.95 ID:???
教えてください。

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"として、エラーが出ないのを確認しています。

ソケット通信の許可関係で接続できないで終わってしまうのでしょうか?
もしそうであれば、どのように許可すればよいか参考になるヒントをいただければ幸いです。
よろしくお願いいたします。
188nobodyさん:2011/02/22(火) 23:45:00.64 ID:???
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";
189nobodyさん:2011/02/22(火) 23:53:03.49 ID:???
外と通信が禁止されてる共有鯖ってゆうオチは無いよね?
190187:2011/02/23(水) 00:15:00.37 ID:HlQuDHDG
>>189
cgiは、hoge.jp上で動作し、hoge.jpへ接続するのですが…
サーバはFreeBSDです。
ソケット通信の許可は、どのように行うのでしょうか?
共用サーバですが、ある程度の設定は自分でできるようです。
191nobodyさん:2011/02/23(水) 01:58:46.16 ID:???
怪しい匂いがしてきた!w

サーバーの利用規約とかに外に出ることを許可されてるか確認を。
192187:2011/02/23(水) 22:33:57.42 ID:???
個別のCGIについては、無料サポート対象外。
どうしてもっていうなら、金よこせ言われたorz

ソケット通信が許可されてるかどうか、確認するにはどうしたらよいでしょう?
193nobodyさん:2011/02/23(水) 23:52:17.39 ID:???
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;

かな。
194187:2011/02/24(木) 00:10:34.04 ID:???
>>193
ありがとうございます。
明日、仕事中にこっそり試してみます。
195nobodyさん:2011/02/24(木) 22:48:43.08 ID:???
おかげさまで、外部通信可能なことが判明しました。
cgiを叩いて、yahooページを表示させることができました。

次に、Net::POP3による接続ですが、'hoge.jp'へのアクセスではなく、
'localhost'へアクセスするようにしたところ、エラーが出なくなりました。
原因は、これから確認していこうと思います。
もし、思い当たる節がありましたら、お教え頂けると助かります。

アイディアを出していただいた方々には、重ねてお礼申し上げます。
196nobodyさん:2011/02/24(木) 22:53:35.45 ID:???
110、25、458が外にいけなかったりね

てか、いい加減サポートにメールしれw
197nobodyさん:2011/02/24(木) 23:20:40.43 ID:???
>>196
独自cgiのサポートは、有料だそうですorz
スレ住人の方々には、お手数をおかけして、申し訳ありません。

さて、アカウントへログインし(おかげさまで、ここまで順調です)
メール内容を、ファイルへ書き出すことができました

ところが、このcgiをエイリアスから呼び出して動作させたところ、
ファイルの書き出しを行えませんでした。
メールログを確認したところ、呼出し後のステータスが
stat=Can't create output
となっておりました。

エイリアスからの呼び出しは、パーミッションの関係で、
書き出しできないのでしょうか?
また、どのように設定すれば、書き出しできるようになるでしょうか?
198nobodyさん:2011/02/24(木) 23:34:37.88 ID:???
chmod a+w *でしね
199nobodyさん:2011/02/24(木) 23:36:36.76 ID:???
あのな、サポートと仕様を教えて貰う事は別問題だろw

そこのレン鯖はクソすぎるから解約しれw
200nobodyさん:2011/02/25(金) 00:01:20.93 ID:???
>>198
シェルから当該ディレクトリのパーミッションを、
ご提案のとおり変更してみましたがダメでしたorz
上書きではなく、受信ごとに新規ファイルを作るようになってるので、
個別のファイルでなく、ディレクトリを変更したのですが…

>>199
弟が、商売で使ってる鯖に寄生してる状況なので、なんとも;
ドメインはがして、逃げられるようにしたいと思ってはいますけどw
201nobodyさん:2011/02/25(金) 02:02:18.07 ID:???
年額4000円しないんだから、個人で契約しなよ
202nobodyさん:2011/02/25(金) 15:54:11.05 ID:gYvrY45z
http://sugiyama.pv.land.to/
ここの偽装画像ダウンローダみたいなのってどういう実装するの?
203nobodyさん:2011/02/25(金) 17:09:05.75 ID:???
LWP で GET して、GD で処理
204nobodyさん:2011/02/25(金) 17:52:34.19 ID:gYvrY45z
thx
ただGDを使う所がわからないしそもそも使ってない気が・・・
205nobodyさん:2011/02/25(金) 18:09:35.24 ID:???
携帯端末用にファイルを分割し

ってのを、大きな1枚の画像を表示するには携帯には荷が重いから、
たとえば9分割して表示またはダウンロード用のリンクを張るって意味で
捉えたから GD が必要って書いただけ。


あと携帯用に表示するなら縮小表示された方がいいから、GD なり ImageMagick なりが必要なのかなと
206nobodyさん:2011/02/25(金) 18:10:06.07 ID:???
binmodeで直接結合してるだけなのか・・・
スレ汚し失礼
207nobodyさん:2011/02/25(金) 18:16:12.52 ID:???
>>202のメールフォームは法的にまずくないか?
送信先が自由で、作者のメアドから好き勝手にメール送り放題になってる。
208nobodyさん:2011/02/25(金) 18:43:55.32 ID:???
みんな、どんなHTMLパーサーつかってる?

私は、HTML::TagParserだよ

HTML::Parserむずかしそうだったから使ってないよ

HTML::ParserのほかにTreeBuilderとかあるけど

みんな何使ってるの?教えて
209nobodyさん:2011/02/25(金) 19:36:12.85 ID:???
>>208
>>1
Perlについての質問箱 46箱目
http://hibari.2ch.net/test/read.cgi/tech/1297677532/
CGIに依存しないPerlの話題一般/Part2
http://hibari.2ch.net/test/read.cgi/php/1030548610/
どっちのPerlショー
http://hibari.2ch.net/test/read.cgi/php/1011352612/
210nobodyさん:2011/02/26(土) 01:14:43.79 ID:???
PerlでCGIを作成し、別のPerlスクリプトを実行して標準出力を受取っています
chomp($stdout = `$command`);

全く同じ条件でCGIを実行しても、
空文字列しか得られない場合と正常な結果が得られる場合があり、仕方なくこうしています
$stdout = '';
while (!$stdout) {
chomp($stdout = `$command`);
}

理由の分かる方、いらっしゃいますか?
211nobodyさん:2011/02/26(土) 04:28:19.55 ID:???
別のスクリプトは確実に結果を返すの?エラーとか全くない?
212nobodyさん:2011/02/26(土) 16:24:44.35 ID:???
>>210
そのwhileループは危険すぎる。機関銃のように子プロセスを作りまくる恐れあり。
$commandの中身と、$stdoutに入る値のペアを書き出すなどしてデバッグしてはいかが。
それから、空文字列しか得られないとき、エラーになっているなどということはないのか。
`$command 2>&1`などとしてエラー出力も見てみるなど。
213210:2011/02/26(土) 23:43:51.29 ID:???
>>211-212
スクリプトで何もせず、Hello Worldだけなら結果を受取ります
また、毎回同じテストデータを使って試している段階なので、エラーはありません

ただ、気になるのは、スクリプトがHello Worldだけなら一瞬で終わりますが、
本来の処理をCGIで呼出すと30秒くらい掛かります
(Windowsのmsysで実行すると1秒掛かりません)

タイムアウトで空文字列しか得られないしかような気がします
214210:2011/02/27(日) 01:29:32.88 ID:???
213の訂正です

テストデータは2種類あって、スクリプトを
A:msysで実行してもCGIから呼出しても、一瞬(毎回成功)
B:msysで実行してもCGIから呼出しても、30秒くらい(msysでは毎回成功、CGIでは空文字列が返ることあり)
215nobodyさん:2011/03/03(木) 12:34:41.67 ID:3YMYo08Y
携帯からTwitterへの投稿クライアントを作っています。
Net::Twitter::Lite モジュールを使ってます。

$twt->get_authorization_url(callback => 'コールバックURL');
↑のようにコールバックを指定してもアプリ登録で指定したURLへ
戻ってしまいます。動的にコールバックしたいのですが良い方法は
ないでしょうか。

216nobodyさん:2011/03/05(土) 23:16:47.11 ID:???
あ;い;e;e;e
う;え;e;e;e
お;か;e;e;e

と並んでいるデータがあるのですが、;e;e;eが重複しているデータを削除して
お;か;e;e;e
でまとめるにはどうすればいいですか?
217nobodyさん:2011/03/06(日) 00:03:45.34 ID:???
>>216
俺の読解力がないのか質問の意味がわからん。その3つの例はなんだ?その3つがあったら最後の1つになるってこと?
218nobodyさん:2011/03/06(日) 00:06:44.64 ID:???
;e;e;e が出現する行は 「お;か;e;e;e 」 にしちゃいたいってこと?

そんなん if(instr(〜)){} で十分だし、一番高速。
219216: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);

でできるようにはなったと思うんですが、この先が分からないです。
220nobodyさん:2011/03/06(日) 01:39:39.02 ID:???
>>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
221nobodyさん:2011/03/06(日) 02:11:18.99 ID:???
>>220
ありがとうございます。
何度もすみませんでした
222nobodyさん:2011/03/06(日) 13:39:55.32 ID:???
Perlって今から覚える意味はありますか?
あとPHPみたいにモジュールとして動かせますか?
<?perl echo "テスト";?>みたいに
223nobodyさん:2011/03/06(日) 14:03:12.61 ID:???
mod_perl
224nobodyさん:2011/03/06(日) 15:01:11.40 ID:???
embedperlだったっけ
225nobodyさん:2011/03/06(日) 16:13:00.23 ID:???
226nobodyさん:2011/03/06(日) 17:14:15.45 ID:???
>>222
今からPerlを覚えるのはやめたほうがいいでしょう。
復権するかどうかわからないけど、復権してから覚えればいいかと。

WEBならとりあえずPHPで、CやJavaをするのもいいかもしれない。
227デフォルトの名無しさん:2011/03/06(日) 20:32:59.27 ID:???
Perlやってるやつは凄いんだよ

悪魔の証明だから、証明される側だから

一生その証明される側でいられる PHPは証明する側

Perl使いはPHP使いより凄いってなってるから

凄いっていう特権えられるから

くやしそうだねPHP使いは
228nobodyさん:2011/03/06(日) 21:26:44.24 ID:???
CGIならSpeedyCGIとの相性がよかったな。Perlは。
導入の際のコード周りの小細工も最小限で済んだし。
コード修正してもCGI呼び出し時の都度新しいコードで走ってくれたし。
速度もmod_perlとあまり遜色なかったし。
229nobodyさん:2011/03/07(月) 08:30:44.61 ID:???
定期的にSpeedyCGIの話したい人が現れるね。
230nobodyさん: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に出力したいです。
どうぞよろしくお願いします。
231nobodyさん:2011/03/09(水) 18:27:24.06 ID:???
>>230
if文を使う
232nobodyさん:2011/03/09(水) 19:37:19.27 ID:???
if をネスト
233nobodyさん:2011/03/09(水) 20:51:45.95 ID:???
私みたいなバカに力を貸してください

文字列を16進に変換して、変換した16進文字の
上位ビットと下位ビットを入れ替えて出力したいです。

例 0xABCD → 0xCDAB

packで変換すると0xBADCと出力されてしまいましたorz

正しく出力させるやり方をご教授ください
234nobodyさん:2011/03/09(水) 21:00:42.82 ID:???
こんなこともわからないの?

答える気ないけどさ

見た瞬間考えればわかる問題ってわかるよ
235nobodyさん:2011/03/09(水) 22:32:42.56 ID:???
>>233
まあ力技で並び替えるしかないんじゃないか
236nobodyさん:2011/03/09(水) 22:34:07.73 ID:???
入れ替えるってあったハズだが?
237nobodyさん:2011/03/09(水) 23:53:03.93 ID:???
>>233
それ「上位ビット」と「下位ビット」ではなくて「上位バイト」と「下位バイト」だよね。
方法は何通りもあるだろうけど、16進文字列が必ず4文字(2バイト分)なら
$hex =~ s/([\da-f]{2})([\da-f]{2})/$1$1/i とか。
238237:2011/03/10(木) 00:11:19.74 ID:???
>>237
超間違えた。すまぬ。訂正。
$hex =~ s/([\da-f]{2})([\da-f]{2})/$2$1/i;
239nobodyさん:2011/03/10(木) 11:57:57.69 ID:???
>>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"に変換したいというのが質問の趣旨でしょうか?
240nobodyさん:2011/03/13(日) 21:32:07.32 ID:???
ム板にこんなスレがあった
フレームワークの話題ってむこうのほうがいいの?
http://hibari.2ch.net/test/read.cgi/tech/1299669611/
241nobodyさん:2011/03/13(日) 22:26:25.99 ID:???
どこでもいいよ
Catalystなら専用スレあるよ
242nobodyさん::2011/03/14(月) 00:18:58.12 ID:???
ここはコーディングスレだろぼけ?
なんでCatalystだけ専用にたててんだよバカ?
Perlフレームワークスレでいいだろ
243nobodyさん:2011/03/14(月) 00:24:36.67 ID:???
フレームワークによってはルールが異なる
フレームワークの比較なら>>242の提案でいいが・・・
244Perl忍者 ◆M5ZWRnXOj6 :2011/03/14(月) 19:19:00.26 ID:???
最強ハッカーチームPerlBlack「黒真珠」
http://hibari.2ch.net/test/read.cgi/linux/1300097049/
245nobodyさん:2011/03/14(月) 19:58:26.52 ID:???
ダサい名前wwwww
246nobodyさん:2011/03/14(月) 21:34:45.17 ID:???
linuxの中で、perlのsystemなどを使って、suになって
root権限の処理をすることって出来ますか?
247nobodyさん:2011/03/14(月) 21:44:38.29 ID:???
バイブみたいな名前だなww
248nobodyさん:2011/03/14(月) 21:47:05.47 ID:???
>>246
suidper
249246:2011/03/14(月) 22:17:39.42 ID:???
>>248
ありがとうございます。
250nobodyさん:2011/03/18(金) 14:36:27.08 ID:???
ここでこの質問大丈夫かな…

文字列の最初の数文字だけを表示させたいのですが、方法がわかりません。
よく見かける「あいうえおあいうえおあいうえお」ってのを「あいうえお...」とするやつです。
なんという語句で検索したらいいでしょうか?
251nobodyさん:2011/03/18(金) 15:00:01.17 ID:???
少なくとも専用の関数は無い
252nobodyさん:2011/03/18(金) 15:01:46.69 ID:???
>>250
先頭の文字だけ取得して..をお尻に足せばいいじゃん
253nobodyさん:2011/03/18(金) 15:18:24.76 ID:???
>>250
>>1-2

length $str > $max and substr($str, $max) = '...'; # $str が UTF-8 フラグ付き文字列の場合
254nobodyさん:2011/03/18(金) 17:44:35.31 ID:???
それだと$strの内容が変わっちゃうから印字だけ変えたい場合はあまりよくないネ
255nobodyさん:2011/03/18(金) 20:14:40.51 ID:???
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をするとエラーが出ます。

どなたか、解決策を教えていただけませんか?
256nobodyさん:2011/03/18(金) 20:38:01.99 ID:???
mysql_config でぐぐれ
257nobodyさん:2011/03/18(金) 23:07:08.90 ID:???
>>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"へ変更するように
指示がありそのように実行していますが、
この段階でも前述のエラーが発生してしまいます。

それ以上は検索しても対応方法が明記されておりません。
今後どのように対応すればよろしいですか?
258nobodyさん:2011/03/18(金) 23:43:47.41 ID:???
mysql_config が置いてあるところにパス通して実行しろってことだよ
当然その場所は環境による
259nobodyさん:2011/03/19(土) 00:56:04.94 ID:???
ありがとう御座います。

$ 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

とのエラーが出ました。

これについても詳しい解説のあるサイトがほとんどないので、
対応方法の指示を頂けませんでしょうか?お願いします。
260nobodyさん:2011/03/19(土) 09:09:53.42 ID:???
ppcのアセンブラがないエラーだけど10.6.6だからそもそもintelだよな?
ぐぐったらこんなの出ました〜

ttp://forums.mysql.com/read.php?51,412055,412325#msg-412325

Makefileから-arch ppcを削れってさ。

mac用がまともにメンテされてない感がw
261Perl忍者 ◆M5ZWRnXOj6 :2011/03/19(土) 22:36:13.51 ID:???
PPCは老害

消えろかす
262nobodyさん: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の内容は、つぎに書きます。



263nobodyさん: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の内容はつぎに書きます
264nobodyさん: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'};
}

続く
265nobodyさん: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;

以上、宜しくお願いします。
266nobodyさん: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で、何がおかしいのだろうか。
.続く

267nobodyさん: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;

宜しく、お願いします。
268nobodyさん: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)";
269nobodyさん:2011/03/21(月) 12:02:55.57 ID:???
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";
270nobodyさん:2011/03/21(月) 13:07:17.65 ID:75CcT3RP
早速の解答、有難うございます。
基本的には、binmodeは、関係無く何回でも使いたいんだけど。
その場合は、下記の様な書き方しか出来ないんだろうか。
そこを、教えてもらえないでしょうか。
{no utf8;
require '100-0.pl';
$a = decode('cp932',&print_test());
print "$a\n";
}


271nobodyさん:2011/03/21(月) 16:48:27.49 ID:???
レイヤーは新しいのを追加していくものなので、何回も使いたいという
方を何とかした方がいいと思う。それにそのめんどくさい書き方に意味が
あった訳じゃなくて、101.plのbinmodeをやる前に実行される部分に
書いたからそこは二重にならなくて済んだってだけだしな。

272nobodyさん:2011/03/21(月) 18:39:03.64 ID:75CcT3RP
有難うございます。
実は、下記の書き方と言うのは、テンプレートに入れている物だから。
これが、実装により影響をあまりされたくは無かったから。
しかし、これに関してはどうやら結論的には無理の様だ。

この件は諦めるべきなんだろうか。この辺は、良く分からん。

use utf8;
binmode STDIN, ":encoding(cp932)";
binmode STDERR, ":encoding(cp932)";
binmode STDOUT, ":encoding(cp932)";
273nobodyさん:2011/03/27(日) 22:13:43.07 ID:2LYCAGvP
今cpanを
インストールしている

これは、おわるまで、何時間かかるの?

もう1時間くらい続けたのだが。
274Perl忍者lvl2 ◆M5ZWRnXOj6 :2011/03/27(日) 22:22:12.27 ID:???
>>273
Linuxつかったほうがいいぜ^^b
275273:2011/03/27(日) 22:33:07.40 ID:2LYCAGvP
>274
linuxは、インストールを、はやいのですか?
276Perl忍者lvl2 ◆M5ZWRnXOj6 :2011/03/27(日) 22:38:55.69 ID:???
はい
277Perl忍者lvl2 ◆M5ZWRnXOj6 :2011/03/27(日) 22:41:58.00 ID:???
ActivePerlいれたら入ってこなかったっけ?
278nobodyさん:2011/03/28(月) 07:30:59.10 ID:???
macです。
perlは、始めから、はいってました
もしかしたら、cpanも、はいってる?
279nobodyさん:2011/03/28(月) 08:28:38.45 ID:???
あたりめーだろぼけ
280nobodyさん:2011/03/28(月) 13:22:01.97 ID:Zy8h0cnO
ありがとうございます。

今度は、cpanに、アップロードしようと思います。
で、アカウントをとるため、
The [Perl programming] Authors Upload Serverの、Request PAUSE accountを記入して、送信したのですが、
パスワードを、送られません。

どのくらいの時間を、おくられるまでにかかるでしょうか?
281nobodyさん:2011/03/28(月) 13:30:47.02 ID:???
てめえみたいな2chバカがCPANにモジュールアップするな
汚染される
282nobodyさん:2011/03/28(月) 13:34:59.12 ID:???
>>280
お前のAuthors nameなに?
283nobodyさん:2011/03/28(月) 14:02:46.29 ID:???
普通なら数時間から1週間ってとこだが、
I like a perl なんつーふざけた申請理由じゃさすがにハネられるだろ
万が一通ったとしてもおまえのモジュールはチラシの裏に書いてたほうが身のため皆のためだと思うが
284nobodyさん:2011/03/28(月) 14:16:16.40 ID:???
だなハゲ
285nobodyさん:2011/03/28(月) 15:01:11.26 ID:Zy8h0cnO
>数時間から1週間
ありがとうございます

286nobodyさん:2011/03/28(月) 22:49:50.77 ID:fdyYV56o
HTML::TreeBuilder::XPathは、active perlのppmからは、インストール
は出来ないのだろうか。

ppmからインストールする方法を教えてください。
287nobodyさん:2011/03/28(月) 23:11:01.48 ID:???
XPathとか本気でいってるのか?wwww
288nobodyさん:2011/03/28(月) 23:26:15.68 ID:???
xpathだけど
本気だけど。
出来ないの
289nobodyさん:2011/03/28(月) 23:48:51.22 ID:???
>>286
エラー出るの?active perlってもう使ってないけど昔インストールしてる人がいるくらいだから入りそうな気がするけど。
ttp://suto3.mo-blog.jp/nashita/2006/10/_activeperlplag_f46d.html
290nobodyさん:2011/03/28(月) 23:51:38.12 ID:???
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}みたいにできるやり方教えてください
291nobodyさん:2011/03/29(火) 00:10:08.59 ID:???
>>290
Web::Scraper内でHTML::TreeBuilder::XPath使ってるでしょ
292nobodyさん:2011/03/29(火) 00:18:54.97 ID:???
ばかか?使ってねえから俺が使う場合は
293nobodyさん:2011/03/29(火) 00:26:04.27 ID:???
ppm4のguiでは、見つからなかったけどppm-shellでsearch xpathで見つ
かっのでinstall xpathで出来ました。
有難う。
294nobodyさん:2011/03/29(火) 10:41:05.75 ID:???
このまえ昼寝をしたくなったので、マクラに”Perl/CGI大全600の極意”を使いました
僕はこれを使って数回寝ましたよ 固くて寝心地悪かったですけど
ん〜5回ほどですかね 天気がよかったので、マクラをほしちゃったときです
僕はマクラが無いので、どうしようか迷いました
本棚を探したらたまたまありました
マクラになるものがないか探したのです
自分「うがううあうあうあうああああ 固いですね」
頭の角にくる固さ、しょうがないので後頭部に当てて寝ました
自分「スヤスヤ・・・」

数時間後・・・

どうやら寝てたみたいです
ラクダ本で寝たときは寝起きには表面が汗でヘニョ!!ってなってました
ですがこの本はなりませんでした表紙の作りが凄いかったです
みなさん、Perl/CGI大全600の極意を使ってネタ人はいますか?
295nobodyさん:2011/03/29(火) 15:41:26.49 ID:EwTY2x/7
cpanで、Plaggerを、インストールしたいのだけど、できない。
コマンドラインの言葉のリンク。
http://akiba.geocities.jp/tr4583384/Pluggernotinstall.txt

どうしたら、できるようになりますか?
296nobodyさん:2011/03/29(火) 15:57:32.65 ID:???
YAMLがないって言ってるぽいから入れてみれば?

普通は依存関係があればそう書いとけば自動的にインストールされるように
なってるんだけどうまくいってない感じだな。

297nobodyさん: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/


298nobodyさん:2011/03/29(火) 16:54:56.93 ID:???
落ち着け。YMALってなんだよ(笑)
299nobodyさん:2011/03/29(火) 17:02:19.03 ID:EwTY2x/7
間違ったw

リトライする
300nobodyさん:2011/03/29(火) 17:06:09.58 ID:mvtY1ceF
YAMLってなんだよっていう時期は誰にでもあるよ

by Perl忍者
301nobodyさん:2011/03/29(火) 17:09:02.71 ID:EwTY2x/7
ダメだ。できない。

コマンドラインの言葉のリンク。
http://akiba.geocities.jp/tr4583384/YAML.txt

Plaggerと、YAMLのどちらもできないということは、
私のcpanの設定がおかしいのかしら?
302nobodyさん:2011/03/29(火) 17:33:02.65 ID:???
もしかしてレンタルサーバか何かでやってる?
testは全部通ってるし、rootでインストールせずユーザ権限でインストールしようとしてるように思えるんだけども。
303nobodyさん:2011/03/29(火) 18:31:34.98 ID:EwTY2x/7
ネットワークのことは、よくわからない

pcは、無線LANで、Bフレッツで、
サーバーは、plala

ホームページ作るときは、レンタルサーバーは,yahoo ジオシティーズを使ってる


これらは、関係ある?
304nobodyさん:2011/03/29(火) 19:25:54.82 ID:???

書き込み権限がないのでインストールに失敗してるから、rootになれるなら
rootになってから再挑戦。

レンサバでrootになれないとかだとデフォルトのインストール先になってる
共通ディレクトリには書けないから自分用の場所を指定しないとだめ。
「cpan インストール先」とかでぐぐれ。
305nobodyさん:2011/03/29(火) 19:35:55.26 ID:???
>>303
よくよく見たらmacじゃないかw
http://d.hatena.ne.jp/tokuhirom/20100716/perlenv
これ見ながら入れればrootになる必要ないから楽だよ。local::libは入れなくていいのでperlbrewとcpanm入れてください
306nobodyさん:2011/03/29(火) 20:42:03.12 ID:EwTY2x/7
>305
おお!
ありがとう
試す
307nobodyさん:2011/03/29(火) 22:13:38.76 ID:???
cpanm 最高だ。 miyagawa++
308303:2011/03/29(火) 23:55:00.00 ID:EwTY2x/7
>305
thx!
perlbrewと、 cpanmを、インストールできた!

で、cpanm plaggerと、うったら、

最後に,
46 distributions installedとでたから、成功したと思われる!

助かりました thx
309nobodyさん:2011/03/30(水) 02:10:40.24 ID:???
>>308
エラー出力のファイル非公開にしておいた方がいいよ
310nobodyさん:2011/03/30(水) 09:11:48.19 ID:T5eYN1F8
>309
そうですね
ありがとうございます
311nobodyさん:2011/03/30(水) 09:33:07.38 ID:KhKgJB+7
miyagawa--
312nobodyさん:2011/03/30(水) 10:13:24.93 ID:KhKgJB+7
miyagawa-=99999999999999999999999999999999999999999999999999;
313 忍法帖【Lv=15,xxxPT】 :2011/03/30(水) 18:10:37.08 ID:???
314nobodyさん:2011/03/30(水) 22:41:17.65 ID:???
miyagawa=伝説ポケモン

miyagawa++ するやつはポケモンでいうミュウツゥーとかホウオウ、ルギア
ミュウあたりばっかり使いそうだな

中2病発症してるのか?伝説ポケモンしか使わない奴
どうせパーティーは
miyagawa
miyagawa
miyagawa
miyagawa
miyagawa
dankogaiなんだろ?
315nobodyさん:2011/03/30(水) 22:42:12.61 ID:???
あ、フォロワーがmiyagawaでしたか
すみません^^

フォロワーがmiyagawaとか強すぎるやつフォローしてるやつは厨房
316nobodyさん:2011/04/01(金) 14:16:06.86 ID:W50lEp9D
すいません

以前cpanmを、インストールしたものですが、使い方を分からないです.

続?初めてのperlを、読みながらやっています。

ターミナルで、何のコマンドを使うとよいでしょう?

317237:2011/04/01(金) 14:49:09.32 ID:???
「cpan 使い方」でググってみたら?
318nobodyさん: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を、インストール出来ていないということでしょうか?





319nobodyさん:2011/04/01(金) 17:25:47.59 ID:W50lEp9D
間違えた。
?は、・です
320nobodyさん:2011/04/01(金) 18:58:35.87 ID:???
ここに名前書いたらあのエラーページ消した意味ないじゃないかw
cpanmはcpanm Web::Scraperみたいに打つとのあとのモジュールがインストールされるよ
cpanm --help

perldoc cpanm
でヘルプも確認できる
321nobodyさん:2011/04/01(金) 19:45:25.76 ID:???
>>318
インストールできてないね。

まず、wget が入ってないみたいですね。
# wget は http/https/ftp 経由でファイルをダウンロードするツールです。

Mac なら wget http://xrl.us/cpanm の代わりに、
curl -o cpanm http://xrl.us/cpanm
でどうでしょうか。

# ここを見る限りは、git を使ったほうがよさそうだけどね。
# cpanm - bayawiki
# http://wiki.bayashi.net/perl/cpanm


322nobodyさん:2011/04/01(金) 20:13:36.10 ID:???
あぁ、>>318を全然見てなかった
perlbrewがちゃんと入ってるなら>>321の言う通りcurlで落とした後に
perl cpanm --self-upgrade
ってすれば最新版がインストールされるよ
self-upgradeした後は最新版の方が自動的に使われるので、rm cpanmでそいつは削除しちゃっていい
323nobodyさん:2011/04/01(金) 20:17:49.97 ID:???
cpanってバックアップできるのしってた?

これ知るまで 全部手動でやってたぞくそが
324nobodyさん:2011/04/01(金) 20:23:01.25 ID:???
http://localhost/app
catalystだとこれでアクセスするとうつるんだけど
http://localhost/app/と違う表示になる

リダイレクトやっただけどループされる
.htaccessとかで
http://localhost/appにアクセスしたらhttp://localhost/app/になるようにしたらどうすればいい
おしえて
325nobodyさん:2011/04/01(金) 20:30:21.79 ID:???
どうやら
ttp://localhost/app だとapacheのパスになってる
ttp://localhost/app/だとcatalystのパス

<Location /app/>にすると
ttp://localhost/app/でアクセスしないとアクセスできない
ttp://localhost/appでアクセスすると404になる
<Location /app>にすると
http://localhost/app でもアクセスできる
http://localhost/app/ でも

でもどっちかのパスになるから /appだとapache

/app/だとcatalyst

どうすればいい教え手管才
326nobodyさん:2011/04/01(金) 20:43:42.14 ID:???
日本語のファイル名にするとファイル名が文字化けしてしまうんですが
どうすればいいですか?
327237:2011/04/01(金) 20:54:55.85 ID:???
>>326
文字コードを適切にする
328nobodyさん:2011/04/01(金) 20:56:22.44 ID:???
教え手管才237
329nobodyさん:2011/04/01(金) 21:30:19.91 ID:???
>>327
ありがとうございます。
サーバーだからEUCでやればいいかと思ってたけど
shift-jisにしたらできました。
330326:2011/04/01(金) 21:55:24.67 ID:???
出来たと思ったら出来てませんでした。
全角アルファベットは出来るけどひらがなとかにしたらファイルが作成されません。
331237:2011/04/01(金) 22:07:09.39 ID:???
>>330
環境の文字コードは本当にshift-jisなのか
perlスクリプト自体の文字コードは何なのか

確実な解決策として「ファイル名に日本語を使わない」のはどうか
332318: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権限が、ないため、インストールできないという状況です。
何か良い方法は、ないでしょうか?








333nobodyさん:2011/04/01(金) 22:53:21.33 ID:???
こだまでしょうか
334nobodyさん:2011/04/01(金) 23:03:37.25 ID:???
いいえ ケフィアです
335nobodyさん:2011/04/01(金) 23:27:03.40 ID:???
>>332
curl -o cpanm
ではなく
curl -o cpanm http://xrl.us/cpanm
336nobodyさん:2011/04/02(土) 00:17:31.30 ID:???
なんかlinuxの本を一冊買うとかサイト見るとかでコマンド並べてるサイト見た方がいいんじゃないかと思って来たわw
>>335で全部解決して終わりそうな気がするけど
337326:2011/04/02(土) 01:04:09.23 ID:???
>>331
レスありがとうございます。
http://www.ksknet.net/perl/post_26.html
具体的には↑のページのコードを実行しているんですが
日本語ファイルをアップロードした場合保存されなかったり
文字化けしたりします。
ソースの文字コードを変えてみたり
jcode'convert(*fileName,"sjis",'euc');
とかで変換してみたりしてるけどうまくいきません。
338nobodyさん:2011/04/02(土) 02:48:20.52 ID:???
>>337
> jcode'convert(*fileName,"sjis",'euc');
ってperl4?

「perl cgi 日本語ファイル名 アップロード」でググってみたら。
339nobodyさん:2011/04/02(土) 03:00:07.18 ID:???
そもそもアップロードする OS によって漢字コードが・・・

Linux でも途中からデフォルトの日本語が EUC-JP から UTF-8 になってたりするし。
FTP クライアントのファイルの漢字コード変換のとこも見直してみな



てか、日本語ファイル名を使うこと自体がクソだからなぁ。。。
340318: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 そうですね
自分で、理解出来るよう、行動します
341nobodyさん:2011/04/02(土) 09:24:14.92 ID:???
>>340
ls cpanm
ってやって表示されればダウンロードできてるから、あとは上で説明したようにcpanmが使えるはず

ファイルがあるかないかの確認でls使うとかファイル削除のためにrm使うとかスレ違いの話になるから
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060224/230579/
こういうの見てある程度のコマンド操作は覚えた方がいいよ
342318:2011/04/02(土) 10:04:02.14 ID:T9DATJpg
>341
ありがとうございます
ls cpanm と、うったら、cpanmとでたから、ダウンロードされてるようです
上の説明を、試してみます

コマンド操作覚えます
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060224/230579/は、分かりやすいですね

343nobodyさん: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 = パスワード

続く
344nobodyさん: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);

345nobodyさん:2011/04/03(日) 12:53:33.02 ID:???
まずperl使わないでsendmailちゃんと動くか確認してから来いよ。
346340:2011/04/03(日) 15:48:41.69 ID:E3gmxmel
コマンド調べました

で、再び、cpanに、入って、いろいろしようと思ったら、

Permission deniedと、出ます。

調べると、権限が、ないということらしい。

権限を、あるにかえたいのですが、どうしたらよいでしょうか?
347326:2011/04/03(日) 19:25:01.54 ID:???
>>338-339
レスありがとうございます
多分perl4です
日本語ファイル名を付けるのはやはり難しそうなので
自動でファイル名を付ける式に妥協することにします。
348nobodyさん:2011/04/03(日) 23:54:31.36 ID:???
>>346
その色々がわからんとどこでpermissionのエラーが出たかわからん。何やったか書いてくれ
349nobodyさん:2011/04/04(月) 01:41:35.69 ID:???
>>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 にでも参加して聞いたほうが効率いいと思われ。
350340:2011/04/04(月) 11:18:17.13 ID:+hWch3tX
>348
ありがとうございます
ありがとうございます
すいません
私のまちがいです
昨日は、cpanに、はいれなかったのです
いろいろ試しながら、perl -MCPAN -e shellとしたら、はいれました
今は、大丈夫です




351340:2011/04/04(月) 11:46:37.89 ID:+hWch3tX
>349
詳しい説明をありがとうございます
すみません
Permission deniedの件ですが、私の間違いです
cpanに、入るためのコマンドを、間違えていました
今は、大丈夫です

この説明は、
cpanm、Plaggerを、使う時の参考にします
また、IRCを、調べてみます
親切な対応をありがとうございます。






352nobodyさん:2011/04/04(月) 14:51:26.01 ID:KBrQ7hfQ
use strict;
use KCatch qw(source);
で、strictの方のエラーが出ると500しか表示されないんですが、
エラーをちゃんと表示させる方法か、何か思い当たる問題点はありませんか?

Undefined subroutineとか普通のエラーはちゃんと表示されます。
コマンドラインならstrictの方のエラーもちゃんと出ます。
fatalstobrowserを使っても同じ結果でした。
353nobodyさん:2011/04/04(月) 15:46:35.56 ID:???
>>352
strictのエラーは普通はコンパイル時に出るからKCatchが有効になる前に
出てしまうことになり間に合わない。なんとか問題のある部分のコンパイルを
遅らせればいいわけで、

http://www.kawa.net/works/perl/catch/news.html#easy

の「KCatch.pm のより適切な使い方【オススメ】」ってとこに
やり方が書いてあるぞ。日本語なんだし公式ぐらいちゃんと読もうな。
354nobodyさん:2011/04/04(月) 17:06:42.94 ID:KBrQ7hfQ
>>353
見落としてました
ありがとうございます
355nobodyさん:2011/04/06(水) 09:27:15.68 ID:???
shtmlのフォームからcgi(perl)に変数を送り、別途置いてあるcsvデータから
該当する物をhtml出力するものを作っているのですが
その際のURLの拡張子は「.cgi?name=いろは」みたいになっています。

ところがSSIで表示しているサイトメニュー等も一緒に出力したいのですが
拡張子がshtmlで無いとダメなレンタルサーバーなので、結果表示がhtml形式で出力されても
拡張子がcgiだとSSIが無効になってしまいます。

検索結果出力の際の拡張子をshtmlにするにはどうしたら良いでしょうか?
356nobodyさん:2011/04/06(水) 09:38:07.24 ID:???
>>355
>>1
△▲ WebProg 初心者の質問 Part23 ▼▽
http://hibari.2ch.net/test/read.cgi/php/1294318320/
357237:2011/04/06(水) 18:20:11.46 ID:???
そもそもCGIの出力にSSIって有効だっけ?
358nobodyさん:2011/04/06(水) 19:25:29.96 ID:???
サイトメニューをCGIで読み込む
359nobodyさん:2011/04/06(水) 21:38:35.56 ID:???
>>357
Apacheでの設定方法の話なら以下。

Apache〜嗜みとして〜 Part3
http://hibari.2ch.net/test/read.cgi/php/1043851302/
Apache2.x 【新鯖入荷しました】
http://hibari.2ch.net/test/read.cgi/php/1018333172/
360nobodyさん:2011/04/07(木) 13:55:41.78 ID:???
PERL使いの皆さん出番ですよ
ttp://biz.moongift.jp/2011/03/wano/
361nobodyさん:2011/04/10(日) 11:03:58.14 ID:???
最近掲示板に外国からの書き込みが大量にあって荒らされてしまいます。
なので日本からの書き込みと判断したいのですが
どうすればいいでしょうか。
http://fetus.k-hsu.net/document/network/ipv4assign/countries/jp.html
ここでIPアドレスを調べたら大量すぎて重くなりそうだし
新しくどんどんIPアドレスが追加されてるみたいなので対応がきつそうです。
IPアドレス以外の方法はあるんですか?
362nobodyさん:2011/04/10(日) 11:30:59.67 ID:???
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が許せない・・・・

> ククク・・・・クククククク・・・・・
> クックックックックックックッ・・・・・
> クー、クー、クー、クー、クー、クー・・・・・
>
> もう許せない。
> もはや沸き上がる滅意を抑えることが出来ない!!!
364nobodyさん:2011/04/10(日) 19:36:38.36 ID:/p/S0mfT
>>355
@shtmlのページからフォームでデータを送信
Aデータ処理
BHEADなどのページ表示に必要なものとデータを並び替えてHTMLデータを作る。
C適切なパーミッションに変更にしてからファイル名を.shtmlで生成。

365nobodyさん:2011/04/10(日) 20:31:02.04 ID:???
○に数字文字使うとかカスすぎる
366nobodyさん:2011/04/10(日) 22:06:10.13 ID:???
>>361
その辺は機転じゃないか?
例えば、本文か名前など項目の何処かに日本語コードが含まれて無ければ海外からの投稿
とか
認証画像付けて、かな文字打たせる
とか
ホスト逆引きするとか
頭の回転鈍いならこの先苦労するだけじゃね?
367361:2011/04/10(日) 23:53:19.29 ID:???
>>362
ありがとうございます。
試してみます。
368nobodyさん:2011/04/13(水) 17:26:47.74 ID:???
>>364
.cgi で生成したhtmlのページの拡張子を指定するなんてこと、できるんでしょうか?
369nobodyさん:2011/04/13(水) 17:46:00.55 ID:???
>>368
後ろでcgiは走らすだけで実際吐くのは.shtmlで、それを見せるって事なんじゃね?
370nobodyさん:2011/04/13(水) 17:55:32.05 ID:???
cgiの表示結果をSSIでhtml文書の中に表示するのがshtmlなわけで。
ちなみにオイラは>>355の第二段落が意味不明だったりする。
今のところ、cgiで生成した文書の拡張子を変更したり指定することはできない、かと。
371nobodyさん:2011/04/14(木) 02:13:11.93 ID:???
1 .shtmlから.cgiで出来たページへリンク
2 .cgiのページでいろいろ処理する
3 結果をファイルに書き出す その時ファイル名は〜.shtmlで保存
4 その新しく作ったファイルにリダイレクト

とかで無理矢理できないかな
372nobodyさん:2011/04/14(木) 02:28:19.05 ID:???
>>368-371

>>1
>>359
△▲ WebProg 初心者の質問 Part23 ▼▽
http://hibari.2ch.net/test/read.cgi/php/1294318320/
373nobodyさん:2011/04/14(木) 09:57:52.14 ID:???
>>371
あの、shtmlを全くわかっていないんじゃないかい?
自身では理解できていると認識してるの?

3番がわからないんだけど、それはできた経験はあるの?
今までファイル保存した経験がcsv形式のデータファイルだけなもんで。
できるの?

もしできるのであればやってみたいです。
初めての試みになります。
374nobodyさん:2011/04/14(木) 10:10:46.52 ID:???
横レスだけど3番の処理の何が問題になるの?
ファイルに書き出してファイル名をshtmlにするだけだと思うのだけど。
375nobodyさん:2011/04/14(木) 11:38:41.90 ID:???
>>374
今までshtmlでファイル書き出しをしたことがないので、
それもできるんだ?!とちょっと驚いただけのことです。
376nobodyさん:2011/04/14(木) 11:59:22.88 ID:???
>>371
スマソ。理屈で考えると出来そうな気がする。
近日、やってみまつ。m(_ _)m
377nobodyさん:2011/04/15(金) 00:41:23.75 ID:???
>>371
できました。
私の方が無知でした。
申し訳ない。汗

cgiからshtmlページの出力をするとは初めて考えました。
一人でやってると世界が狭まりますね。他人の発想の大切さを再確認しました。

これができるとなると、htmlページの自動生成ができることになりますね。
現時点ではまだどんな役立て方ができるかアイディアが無いのですが、将来使える日が来るのかな。

まだ初心者の域は出ていない私ですが、今後何かこちらからも良い話ができたらいいなと考えています。
378nobodyさん:2011/04/15(金) 05:18:02.18 ID:???
>>377
おまいは一体…
どんな見えない敵と戦ってたんだw

ここの住民さんはどのくらいの技術もってるのか気になってきた…
379nobodyさん:2011/04/15(金) 08:55:33.10 ID:???
>>378
私は、

・メールマガジン発行CGI
・掲示板CGI
・メールフォームCGI
・ショッピングカートCGI

が作ったことがあります。
どれもファイル作成はデータファイルなのでshtml形式で作るといった感覚は新鮮。

380nobodyさん:2011/04/15(金) 09:26:10.78 ID:???
ウソくせえ
拾ったスクリプト弄っただけだろ
381nobodyさん:2011/04/15(金) 10:36:10.72 ID:???
>>380
そんなに信じられないような話かい?
382nobodyさん:2011/04/15(金) 10:37:33.03 ID:???
>>380
カートCGIなどは今も現役で動いてるよ?
383nobodyさん:2011/04/15(金) 13:31:25.26 ID:???
いい情報を話し合う仲間欲しいけど、
2ちゃんねるでやってもどうも駄目なんだよね。何度かやったけど。
人間不信っぽくて。
出会いって 場 って重要だよね。
で、2ちゃんはそぐわないと。
384Perl忍者lvl4 ◆M5ZWRnXOj6 :2011/04/15(金) 15:00:43.98 ID:???
なにいってんのこいつ?
385Perl忍者lvl4 ◆M5ZWRnXOj6 :2011/04/15(金) 15:09:58.80 ID:???
他の場所が2chみたいにカジュアルだとおもってんの?>>383は?
386nobodyさん:2011/04/15(金) 16:29:27.82 ID:???
かじゅあるwwwwwwwwwwwwwwww
387383:2011/04/15(金) 20:44:02.36 ID:???
>>385
は?
388Perl忍者lvl4 ◆M5ZWRnXOj6 :2011/04/15(金) 20:47:38.74 ID:???
ってことはお前・・・
389Perl忍者lvl4 ◆M5ZWRnXOj6 :2011/04/15(金) 20:51:48.03 ID:???
だな?
390nobodyさん:2011/04/16(土) 06:13:20.59 ID:???
ここの住民さんはどのくらいの技術もってるのか気になってきた…
と↑質問した378です。

>>379
大体のことはできるんですね。
外部ファイルのデータを取得しての処理とかはやらないの?
文字エンコード系の作業のストレスMAX感は味わってみた?
メルマガの発行はケータイかな?
8年ほど前だったかな…自分も作ったことありますよ。
たしかドコモだと31通目から同一のメ−ルを送ると弾かれるんだよね。
量が多いと時間がかるとクレームがきたときには苦労したな…

>どれもファイル作成はデータファイルなのでshtml形式で作るといった感覚は新鮮。
アクセスが多くて頻繁に動的な処理を行わない場合、
ページを生成したほうがperlにとっては都合良いから便利だぜ。

ちなみに自分は、完全自作で↓

お問い合わせフォーム(エラー表示・メール通知式)
掲示板(スレ式)
画像掲示板(スレ式・サムネイル・ロゴ埋め込み)
perl開発ツーツとしてエスケープ処理とタブ埋め込み処理「¥」
メルマガ発行(PC/ケータイ)
キーワード検索順位(大手検索エンジンの結果を取得して処理)
ショッピングカード(サムネイル・自働ページ生成・セッション方式・非セッション方式)
情報処理(グラフ表示式)
他…

個人的にはperlは大好きなんだけどね。
多くの人が2003年頃にPHPに移って過疎ったよね…
391nobodyさん:2011/04/16(土) 06:58:35.73 ID:???
>>390
雑談はスレ違いもしくは板違い。

>>1
【総合】 Webprog板質問雑談スレッド 1
http://hibari.2ch.net/test/read.cgi/php/1131016915/
http://hibari.2ch.net/prog/
392nobodyさん:2011/04/16(土) 17:17:04.84 ID:???
よろしくお願いいたします。
touroku.listファイルに次のように登録するようにしています。
user<>1<>passwdA<>[email protected]<>172.0.0.1

それでこのuser自身が登録解除出来るようなスクリプトを作成しましたが
うまく動作しません。登録したパスワードと同じpasswdAを打ち込んでも
パスワードが違うとなります。又、違うパスワードを打っても
同様です。この場合は正常な動作ですが、、、

尚、打ち込んだパスワードと登録しているパスワードが変数に正常に
格納されているか、エラーメッセージ部に変数を入れてみましたところ
違うパスワードは$in{'pass'}に正常に表示され
$pasには登録済みのパスワードが表示されます。

しかし正常なパスワードを打ち込むと何故か$in{'pass'}は空白となり表示されません。
$pasだけ表示されます。
多分これが原因とは思いますが、
正常に$in{'pass'}には打ち込んだパスワードは格納されていることは
間違いありませんのでどうして正しいパスワードを打ち込んだときのみ
空白になるかわかりません。

<続く>
393nobodyさん:2011/04/16(土) 17:20:04.43 ID:???
<続き>
まだ、スクリプト初心者ですがよろしくお願いいたします。
作成したスクリプトは下記です。
-----------------------------------------------------------
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
のようにユーザが次第に増えてもそれぞれのパスワードを検索すにはどのようにすればいいのでしょうか。
出来ましたら、これもよろしくお願いいたします。
394nobodyさん:2011/04/16(土) 17:46:33.36 ID:???
正常なパスを打ち込んだ場合
if ($pas ne $in{'pass'}){&error2("<center><h3>パスワードが違います。$in{'pass'},$pas/h3></center>");}
この部分の$pas と $in{'pass'}が同じになるためerror2は実行されてないはずである
別の部分のエラールーチンで$in{'pass'}が表示されずに$pasが表示しているのではないだろうか


追伸の部分
user名とpassの組み合わせでチェックする
395392:2011/04/16(土) 18:14:51.69 ID:???
>>394
一部ミスのため訂正使用としたところ、
早速のレス有難う御座います。

正しいパスワードを打ち込んだ場合もerror2は実行されています。
尚、書き込みミスは同じパスワードの時空白の変数は$pasの方でした。

パスワードが違います。$in{'pass'},$pasのところで

違うパスワードの場合、
パスワードが違います。wrongpasswd,passwdAと表示され、

正しいパスワードの時は
パスワードが違います。passwdA, とコンマの次($pas)が表示されません。

正しい時のパスワードが何故空白になるかがわかりません。
396nobodyさん:2011/04/16(土) 18:24:34.25 ID:???
378です。
>>391
すまん自重する。

>>393
foreachを使って格納させるのが手っ取り早い。
パスが一致してそのレコードに修正を加えたいなら↓の方法でどうだ?

#----------------
# $kakikomi の部分に変更を加えればパスが一致したものを修正が可能。
# ただしIDも一致させるためにif($data_b[2] eq $in{'pass'}){文に修正を加える必要がある。
# TAB消したので読みにくいが参考になればどうぞ。

続く↓
397378: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);
398378: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);
399392:2011/04/16(土) 18:41:33.55 ID:???
>>378
複数ユーザーの場合foreachの方がいいのですね。
何故、$pasの中身が消えるか意味不明ですが、
もしかしたら、これで不具合も直るかもしれません。

明日ゆっくりこれを参考にして作成してみます。
有難う御座いました。
又、途中で解からなくなることがあるかもしれませんが
その時はよろしくお願いいたします。
400nobodyさん:2011/04/16(土) 18:49:05.71 ID:???
先になぜ消えてるか追求したほうが為になると思うけど。
401378:2011/04/16(土) 18:55:32.36 ID:???
>>399
やりたい内容を詳しく書き込めば作ってここに載せてやるよ。
ログインや何かの登録解除程度のスクリプトなら10〜15分程度で完全オリジナルで作れるぞ。
おまいの疑問がよくわからんのでその方が手っ取り早いな。
それにロックの使い方があまい。
君の方法だと稀にデータが消えるかもしれないな。

402nobodyさん:2011/04/16(土) 19:06:52.70 ID:???
393ので試してみたけど、空白にならないっていう
touroku.listの1行目を改行してるって事はないよな
403nobodyさん:2011/04/16(土) 20:38:01.69 ID:???
ずいぶんとレガシーなコードだな
10年前のコードをメンテしなくちゃいけなくてソース開いたときと同じ驚き
404nobodyさん:2011/04/16(土) 22:06:09.41 ID:???
>>390
キーワード検索順位CGIはどうやったらいいのかわからないなあ。
そうそう。PHPが流行りだした時は私などはまだPerl初めて翌年くらいだったか。
これからやろうとしてた矢先のことで、進路変更するわけにもいかずそのままperl
けど、当初はまさかこれでショッピングカート作ることになり、物品販売することになるとは思っていなかったんで、
進みは非常に遅れてしまった。

これから遅れた時間を取り戻したいと思っています。
405nobodyさん:2011/04/16(土) 22:18:44.82 ID:???
ケント大王が治めてた時代ですよ
タイムスリップしてきたんですか?

ようこそ
406nobodyさん:2011/04/16(土) 22:19:13.11 ID:???
時空を超えてきたPerl使いよ

ふぉふぉおふぉふぉふぉ
407nobodyさん:2011/04/17(日) 00:37:57.08 ID:???
Perl業界の恥さらしPerl忍者君を笑うスレはこちらでよかったでしょうか
408378:2011/04/17(日) 00:47:14.31 ID:???
この板って…
lenで制限してるのかな?

>>404
キーワード検索順位は外部ファイルの取得をPHPにする方が色々と都合がいいよ。
取得したデータはperlを使って正規表現使って処理だね。
409nobodyさん:2011/04/17(日) 04:10:46.05 ID:???
>>398
ユーザの一致チェックはどこでやってるんだこれ…
410nobodyさん:2011/04/17(日) 07:48:37.62 ID:???
>>409
>>396で修正を加える必要があるとか言ってる
411392:2011/04/17(日) 12:14:05.34 ID:???
>>378
401のヒントで#pasの表示が消える理由が解かりました。
close<IN>;をif文の手前に置けば解決しました。

只、理由はわかったのですが原因がわかりません。
closeする前にデーターをいじっているので壊れたのだろうな
という漠然とした感じはあるのですが、理論だった理由は解かりません。

4,5年前に初めて作成したスクリプトが会員登録用で、それ以来perlは触っていません。
スクリプトもネット上で検索して見よう見まねで作成した付け焼刃です。
最近、このスクリプトを見て全く理解できず、
又、解除用スクリプトでも作成して勉強してみようかなと思ったわけです。

まだ時間が掛かりそうですが頑張ってみます。
有難う御座いました。

while文とかもう古いのでしょうか。
412nobodyさん:2011/04/17(日) 19:42:54.35 ID:???
perl自体が古いだろ
413nobodyさん:2011/04/17(日) 19:52:33.61 ID:???
適材適所だろ。
新しいとか古いとかじゃなく、目的に合わせて言語を選択すべきだろ。
414392:2011/04/17(日) 20:40:21.47 ID:???
古いでしょうが、完成しました。
これで、複数の登録者でも解除できるようになりました。
while文しかまだやっていないのでこれにしました。
すみませんがもしよかったら最近のかっこいいスクリプトでお願いします。
<続く>




415392: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);
<続く>
416392:2011/04/17(日) 20:48:41.90 ID:???
<続き>
}
close(IN);
if ($in{'name'} ne $existfileuser){&error2("登録ユーザでは有りません。");}
if ($in{'pass'} ne $userpas){&error2("パスワードが違います。");\
}

以上です。
417nobodyさん:2011/04/17(日) 21:16:51.77 ID:???
かっこよさとか言語はどうあれ、パスワードを平文で保存してるようなサイトは利用したくないなあと思うのでした
418378:2011/04/17(日) 21:21:56.81 ID:???
>>409
パス一致の条件式にandかませればよろし。

>>410
フォローサンクス
419392:2011/04/17(日) 21:28:14.54 ID:???
>>417
root下に置いても駄目でしょうか。
root盗られたら、もはや平文とかの問題ではないと思うし。
420378:2011/04/17(日) 21:29:27.26 ID:???
>>411
小さいなスクリプトなら、やりやすい方で良いと思うぞ。
whileでもforeachでもおk
421378:2011/04/17(日) 21:34:05.58 ID:???
>>417
自分の場合は、ID・パス・メアドの保存は特殊な処理をかけて保存してますよ。
当然ルーチン化させています。
その処理を通さないと元の英数字らりません。
若干処理は重くなるけれども、数百万単位のID管理が必要でなければ、セキュリーティー重視の方が安全ですよね。
422392:2011/04/17(日) 21:35:30.94 ID:???
>>378
有難う御座いました。
多分、ここで聞いていなかったら、投げやっていたと思います。
感謝します。
423417:2011/04/17(日) 21:42:31.96 ID:???
>>421
IDメアドは置いといて、まさかパスワードも復号可能なの?
それだと平文で保存してるのと大差ないと思うけど。
424378:2011/04/17(日) 21:45:33.63 ID:???
>>422
ここは2ちゃんだぞ。
一々そんなこと気にするなよw
所詮は便所の落書きだからなw
俺が糞して踏ん張ってる間に書いたスクリプト(実際に12分前後トイレで書いたし)で役に立つならそれはそれで結構。
425392:2011/04/17(日) 21:51:05.06 ID:???
>>378
例え便所の落書きでも役に立てば感謝します。
426378:2011/04/17(日) 21:54:46.67 ID:???
>>423
個人情報系のデータは、基本暗号保存させるのが常識。
DB使うまでもない場合でも、このご時世だから徹底しないとダメだな。
でなければ、情弱PGと言われてしまうぞ。
続き↓
427378:2011/04/17(日) 21:59:47.60 ID:???
続き↓
>>423
簡単に解析されなければ、どんな方法でも良いので行うべき。
パスはプログラムで暗号化させて暗号化されているパスのファイルが一致すればFALSE
その過程は、PGにしか理解できないものでOK
続き↓
428417:2011/04/17(日) 22:39:27.43 ID:???
俺が言いたかったのは、どんなパスワードであれ暗号化ではなくcryptなりshaなりでハッシュ化したものだけを保存するのが普通だよねという話。
暗号化というと鍵を持つ人物(管理者)には復号が可能である風に聞こえるけど、
利用者のパスワードを管理者が知り得る状態である必要性はどこにもないわけで。
429378:2011/04/17(日) 22:49:43.63 ID:???
続き↓

>>423
自分の場合は、1つのファイルにIDとパスをある複雑な法則で保存させ、
秘密の処理を行わなければ解読不能にしている。
暗号化復号はルーチン化させているので、処理が必要なときにかますだけ。
続き↓
430nobodyさん:2011/04/17(日) 23:01:11.71 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は付けた方がいいと思うし、
テストしやすいように単体で動かせるレベルで一旦作るべきだと思う。
431378:2011/04/17(日) 23:02:42.22 ID:???
続き↓

>>423
かなり複雑にしているので、そのルーチン自体を読まないと解析不能だと自信を持っている。

>>425
そかそかw
432417:2011/04/17(日) 23:18:32.01 ID:???
>>430
久しぶりにこのスレでレガシーでないまともなコードを見た気がする。

>>431
聞いてもないことを丁寧に答えてくれて痛み入るが、
つまり管理者は(実際に復号をするかはともかく)利用者のパスワードを知り得るってことだよね?
だったら俺はそんなサービスを利用するのはできれば遠慮したいかなあ。
433378:2011/04/17(日) 23:22:31.56 ID:???
>>428
個人で利用する分にはcryptみたいな簡易的な方法で処理しても問題ないと思うが、
第三者が個人情報を入力するサイトなら話は別。
一度、暗号化の技術的な問題を調べると良いかも。
perlをある程度経験しているなら、好き好んでcryptを使うPGはいませんよ。
434417:2011/04/17(日) 23:32:38.86 ID:???
>>433
そりゃ crypt($pass) なんてド直球はありえないが、最低限saltはつけるだろうし、
さらに現実的には Digest::SHA::sha512_hex($pass, $salt) とかするでしょうよ。
それでも足りなきゃ適当に他のハッシュ関数を重ねがけするなりなんなり。
復号可能な状態で保存してるってのはまた別の問題で、それはそれで crypt($pass) とは違う意味でありえないって言ってるの。
435378:2011/04/17(日) 23:39:30.14 ID:???
>>434
$pass = crypt($pass,$salt); これで十分だとおもってるわけ?
話にならんわ…
436417:2011/04/17(日) 23:44:14.73 ID:???
1行しか読めないのか
話にならんわ…
437nobodyさん:2011/04/17(日) 23:44:49.75 ID:???
お前ら平文パスで漏らした2chに喧嘩売ってるのか?
438378:2011/04/17(日) 23:45:01.05 ID:???
>>428
>俺が言いたかったのは、どんなパスワードであれ暗号化ではなくcryptなりshaなりでハッシュ化したものだけを保存するのが普通だよねという話。
439417:2011/04/17(日) 23:50:38.83 ID:???
双方向の暗号化・一方向のハッシュ化という対立軸の話をしてるのにcryptの部分だけ拾われましても
440nobodyさん:2011/04/17(日) 23:56:37.85 ID:???
>>434
>さらに現実的には Digest::SHA::sha512_hex($pass, $salt) とかするでしょうよ。

Digest::SHA::sha512_hex($pass, $salt)は「cryptなりsha」に毛の生えたようなものだろ。
本気で言ってるのか?
441nobodyさん:2011/04/18(月) 00:15:57.09 ID:???
いや、だからこの流れはスレ違いじゃね?板違いか。どっかにセキュリティのスレあるだろうからそこでやればいい

>>417が言いたいのは手法の話じゃなくて>>432で言ってる
「サービス運営してる側がパスワードを生で持てる状態が嫌だ」
ってことだけでしょ。そのくらい読み取りなさいよ。
>>378がいくら真面目な人だとしてもそのシステムをサポートする別の人が悪意を持って復号したら漏れるでしょ。
いくら注意しても1つのパスワードで複数のサービスを使い回してる人がいるんだからその危険性を指摘しただけだと思うよ。
変に煽り合ってスレ違いの方向に行かないでください。
442nobodyさん:2011/04/18(月) 00:22:05.00 ID:???
目くそ鼻くそ状態。
脆弱な暗号化は好ましくない。
復号できる状態は好ましくない。
不毛だからやめよう。
443nobodyさん:2011/04/18(月) 09:15:37.66 ID:???
[最新ニュース!!!]  ★ニコニコ生放送でDQN共が犬虐待!!!★
http://www.nicovideo.jp/watch/sm14156259
犬にタバコを近づけるなど、首を掴み投げ飛ばす、物を思い切り投げてぶつけるなどの
暴行、犬は怯え、投げ飛ばされた衝撃で足が折れそうであった、そしてDQNどもは喜んでいる!!!
http://twitter.com/fu_taso
ツイッターでも反省無し 2chスレまで出没し炎上状態
http://toki.2ch.net/test/read.cgi/ms/1302773943/
住所なども晒されて逆に動物虐待ではなく人間虐殺を受ける恐怖に怯えているらしい
DQNたち
@F5_twit こええだろwww刃物とかマジこええwwwもし俺の家に来たら一瞬で逃げる。全力で逃げる。
1:12 AM Apr 15th webから F5_twit宛
こいつの目的は、フォロー数+観覧数
動物虐待!!!!!!!動物虐待!!!!!!通報しよう!!!!!!!!!!
444392:2011/04/19(火) 22:45:51.58 ID:???
>>430
有難う。
精進します。
445nobodyさん:2011/04/20(水) 22:40:05.19 ID:???
ところでオラには>>392の%inがどっから湧いてきたかいまいち分からんのだが、ハンドルのINを
そのまま%inで扱えるという言語仕様じゃないよね?
446nobodyさん:2011/04/21(木) 00:03:21.91 ID:???
CGI.pmでパラメータを突っ込んでるんじゃないかな
447nobodyさん:2011/04/21(木) 11:47:54.41 ID:???
>>392
cgi-lib.plだったりして。
require 'cgi-lib.pl';
&ReadParse;
こんな風に呼ぶと%inにフォームデータが入るのを見たことがある。
448nobodyさん:2011/04/22(金) 16:47:52.35 ID:???
s1 = "A123B"
s2 = "A111B"
s3 = "A321B"

と文字列があった場合にs1以外を拾いたいです。

正規表現で "A[^(123)]B" としましたが、[]内は1文字で認識されるようでNGでした。
"A〜123ではない〜B"という正規表現はどのように書くのでしょうか?
449nobodyさん:2011/04/22(金) 17:24:08.81 ID:???
そんな単純なものは eq で比較でえぇんとちゃうのん?
450nobodyさん:2011/04/22(金) 18:04:54.83 ID:???
>>448
http://www.din.or.jp/~ohzaki/regex.htm#Without

for my $str (qw( abcHIJdef ABCklmDEF cbajihfed CBAMLKFED )) {
  my $result = $str =~ /^[abc]+(?:(?![hij]).)*[def]+\z/i ? 'match' : 'unmatch';
  print "$str: $result\n";
}
451nobodyさん:2011/04/23(土) 01:58:27.51 ID:???
>>448
A と B の間が3文字固定なら
/A(...)B/ and $1 ne "123"
A と B の間が3文字固定でさらに数字固定なら
/A(\d{3})B/ and $1 != 123
でどうでしょう
正規表現一発じゃないけどね
452nobodyさん:2011/04/23(土) 19:41:21.53 ID:???
test
453nobodyさん:2011/04/24(日) 16:11:11.25 ID:???
$abc = 'dog';
$xyz = 'cat';
$str = $abc_$xyz;

以上だと、$strにcatだけが入っています。
dog_catというように入れたかったので、調べて以下のようにしたら、なんとかdog_catが出てきるようになりました。

$str = ${abc}_$xyz;

ただこれの意味というかなぜこうなるのかの理由がわかりません。
なんで変数展開してんの?っていうかんじです。
どなたかこれの意味を教えて下さい。お願いします。

454nobodyさん:2011/04/24(日) 16:33:30.01 ID:???
>>453
すいません。自レスで補足です。
上の例ですが、$str = "${abc}_$xyz"でした。
ダブルクオートなければ変数展開するものもしないですね。
すいませんでした。
455nobodyさん:2011/04/24(日) 16:48:39.52 ID:???
_ が変数名に使える文字である以上、$str = "$abc_$xyz"; の最初の部分は、
perl にしてみれば $abc でなく $abc_ と解釈するしかない。
${abc} とするなどして _ が変数名の一部でないというヒントを与えない限りは。

use strict; use warnings; を有効にしてさえいればつまずかない問題。
456nobodyさん:2011/04/24(日) 17:11:27.76 ID:???
>>455
ありがとうございます!
use strict;とuse warnings;を書いたら
Global symbol "$str_" requires explict package name
って出ました。
それで{}を使ってstrと_を切り離すんですね!
勉強になりました!
457nobodyさん:2011/04/24(日) 17:16:45.50 ID:???
>>456
すいませんでした。また自レスです。
出たの$str_じゃなくて、$abc_でした。
なんで$strって書いたんだろう。。。
458448:2011/04/25(月) 15:12:06.14 ID:???
>>449-451

ありがとうございました。
ttp://www.din.or.jp/~ohzaki/regex.htm#Without

(?:(?!foo).)*

が今回やりたかった"〜〜"ではないという条件にピッタリでした。
正規表現は奥が深すぎる。
459nobodyさん:2011/04/25(月) 16:31:50.20 ID:???
Exporterって
@EXPORTを省略したら
パッケージ内の全てのメソッドが使われるんですか?
460Perl忍者lvl4 ◆M5ZWRnXOj6 :2011/04/25(月) 16:40:04.34 ID:???
つかわれねえよ低レベルすぎる
461nobodyさん:2011/04/25(月) 16:44:10.16 ID:???
462nobodyさん:2011/04/25(月) 18:47:08.03 ID:dKWy1zZl
Activeperlで動いてと通常のperで動かないプログラムってありますか?

またどちらの方がシェアが多いのでしょうか?
463nobodyさん:2011/04/25(月) 19:16:23.96 ID:???
PerlはUNIX文化のものだからActivePerlはなんだかんだいって
茨の道ではある。覚悟して使え。
464nobodyさん:2011/04/26(火) 08:08:42.43 ID:???
Windows用Perlを使ってる人は自分のホームページを少しいじくるぐらいの日曜プログラマーじゃないかな?(自分です)
Linuxマシンまでいかない人でも最低、仮想環境を構築しているのでは?
465nobodyさん:2011/04/26(火) 14:40:36.95 ID:???
CGIでフォームデータを取り込むときの話で、最後%FORMに値を入れるとき

$FORM{$key}.="\0"if(defined($FORM{$key}));
$FORM{$key}.= $val;

これの最初で未定義値判定して、真なら\0を代入する理由と\0がそもそもなんなのかわかりません。
これを「""」に置き換えても何も問題はなかったので。
まあデータを送ってるから、そもそも未定義値にならないので、ifにひっかかるわけないので当たり前なんですが。
というか未定義値が入ることってあるんですか?
あと最後に値を連結代入してますけど、これなんで、連結なんですか?
普通に代入じゃだめなんですか?
実際試したら連結じゃなくてもできたんですが、どんな意味があるんですか?
本買って勉強してるんですが、このあたりの説明がなくてモヤモヤしてます。
どなたか教えて下さい!
466nobodyさん:2011/04/26(火) 14:52:11.95 ID:???
$FORM{$key} に $val を追記する前に区切り子として \0 を付加してるんじゃないの?

つか、このスクリプトは行儀悪いな。
467nobodyさん:2011/04/26(火) 17:40:54.26 ID:???
>>465
WEBフォームのチェックボックス等で同じname属性で複数の値が送られたとき、>>466
言うように"\0"を区切り文字として付加しているんでしょう。

CGI.pmだと配列に入れてるけど、昔のcgi-lib.plとかでは、このように"\0"区切りで
格納してたみたい。
468nobodyさん:2011/04/26(火) 20:07:08.17 ID:???
ありがとうございます!
なるほど、name属性が同じなら区切り文字をいれないとですね。
本見たら、2002年初版って書いてますけど、やっぱり古いんですね?
CGI.pmって何?って状態なんでその辺りも調べてみます!
469nobodyさん:2011/04/26(火) 22:42:29.83 ID:???
今はもう2011年だし、、、
古く無いと言えるほうがおかしいだろ、
470nobodyさん:2011/04/27(水) 00:00:24.46 ID:???
>>469
いやあ、古いからどうしようかな?とは思ってたんですけど
中古で100円で売ってていろんなスクリプト載ってたんで、、、
まあ一応使えそうだったんで買ってしまいましたww
まさか、そんな新しい技があったとか、さっきからググりまくりで軽く後悔してますorz
471nobodyさん:2011/04/27(水) 01:10:13.22 ID:???
それ古いってことを差し引いても多分あんまりいい本じゃない
それ読むくらいならネットの情報をあさって勉強汁
472nobodyさん:2011/04/27(水) 01:26:16.01 ID:???
>>471
はい!わかりました!がんばります!
473nobodyさん:2011/04/28(木) 16:08:40.29 ID:ToxFyCxg
perlってなんでswitchねーんだよ、死ねよクソ言語
474nobodyさん:2011/04/28(木) 16:21:30.36 ID:???
475nobodyさん:2011/04/28(木) 16:26:31.40 ID:???
だっせえ473wwwwwwwwwwww
>>473
>>474
476nobodyさん:2011/04/28(木) 17:10:03.79 ID:???
正直、switch 無くても困らないなぁ
477nobodyさん:2011/04/28(木) 18:24:13.77 ID:???
mod_perl での実行を考慮するなら、

my $abc = '';

じゃなくて、

my $abc;
$abc = '';

と言う風にしたほうが良い。 ってゆう解釈で OK ?
478477:2011/04/28(木) 18:42:53.82 ID:???
>>477
これは忘れてくださいwwwww


どこか、mod_perl で動作する綺麗なサンプルないかしら。。。
479477:2011/04/28(木) 19:00:08.37 ID:???
色々ググってみたけど、mod_perl ってめんどくせぇな・・・
480nobodyさん:2011/04/28(木) 19:07:52.39 ID:???
>>477-479
>>1
【激速】mod_perl SpeedyCGI FastCGI【激速】
http://hibari.2ch.net/test/read.cgi/php/1149505269/
481477:2011/04/28(木) 20:36:46.56 ID:???
fatalsToBrowserが場合によってはエラーメッセージを表示してくれないんだけど、
コンソールで実行すれば見えるとかじゃなくて、ブラウザでfatalsToBrowserよりも確実に
エラーメッセージを表示してくれるモジュールは無いのかしらん?
482Perl忍者lvl4 ◆M5ZWRnXOj6 :2011/04/28(木) 20:58:29.51 ID:???
それmod_perlいれてるからだろはげ
use libでパスかえろよはげ
カスだなあカスカス mod_perlだとルートディレクトリがかわるんだよあhげ
483Perl忍者lvl4 ◆M5ZWRnXOj6 :2011/04/28(木) 20:59:21.64 ID:???
use libと
use Cwdつかおうなはげ^^
484 忍法帖【Lv=19,xxxPT】 :2011/04/28(木) 21:48:21.31 ID:???
>>482-483は覚えたての言葉を必死に使ってるって感じが否めない
485Perl忍者lvl4 ◆M5ZWRnXOj6 :2011/04/28(木) 21:50:51.06 ID:???
自分が分からない言葉とか使われるとそういっちゃうんだろうなお前みたいなやつ
486Perl忍者lvl4 ◆M5ZWRnXOj6 :2011/04/28(木) 21:51:26.86 ID:???
うぷぷっぷぷ

ううぇへへげろげおろげろきめぇwwww
こいつきめぇwww早くしぬがいい
487 忍法帖【Lv=19,xxxPT】 :2011/04/28(木) 21:53:08.10 ID:???
>>485-486 茶々入れただけでファビョって無知丸出し
死ね
488Perl忍者lvl4 ◆M5ZWRnXOj6 :2011/04/28(木) 21:53:57.22 ID:???
低レベルのお前よりまともだから安心してね雑魚^^
489Perl忍者lvl4 ◆M5ZWRnXOj6 :2011/04/28(木) 21:55:33.30 ID:???
死ねまで入れるとは相当くやしかったようだね^^低レベル
490nobodyさん:2011/04/28(木) 21:56:06.55 ID:???
バカvsバカワロス
491nobodyさん:2011/04/28(木) 21:59:05.48 ID:???
Perl忍者>>>越えられない壁>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>477
492 忍法帖【Lv=19,xxxPT】 :2011/04/28(木) 22:06:34.76 ID:???
ttp://hibari.2ch.net/test/read.cgi/php/1295170172/78
Perl忍者くんはuse strict;したコードが"余程"お嫌いなようです
493477:2011/04/28(木) 22:07:46.83 ID:???
>>482
mod_perl なんてめんどくせーもんは入れてないよん
494nobodyさん:2011/04/29(金) 01:41:52.88 ID:???
Perl忍者さんはヒマなんですか?
至るとこでどうでもいいことよく書いてますけど。
495nobodyさん:2011/04/30(土) 16:42:10.13 ID:+DlTxLck
質問です。
$file="test.txt";

open (OUT, ">$file ");

これでtest.txtが存在しなければtest.txtが作成されますが、この場合パーミッションはどのようになっているのでしょうか?

496nobodyさん:2011/04/30(土) 16:57:11.84 ID:???
497nobodyさん:2011/04/30(土) 17:14:22.86 ID:+DlTxLck
>>496
実行ユーザーで決まるんですね。わかりました。ありがとうございました。
498nobodyさん:2011/05/01(日) 07:33:56.16 ID:???
どこを読めばそういう結論になるんだ? はっきり書いてあるのに。

> ファイルは 0666 をプロセスの umask 値で修正したパーミッションで 作成されます。
499nobodyさん:2011/05/01(日) 11:03:50.53 ID:???
print $_->attr('action') if $_->attr('action');
って二回かくの大変なんですが
1回で済ますやりかたありませんか?
500nobodyさん:2011/05/01(日) 15:38:11.94 ID:???
>>499
attr メソッドが副作用のない単なるアクセサなら
print $_->attr('action') || '';
501nobodyさん:2011/05/01(日) 15:38:58.78 ID:???
>>499
ちょっとばっちいけど
{my $temp; $temp = $_->attr('action') and print $temp;}
とか?
502nobodyさん:2011/05/02(月) 02:42:13.10 ID:fV7VGj7j
「文字列A        文字列B」
という 2 つの文字列の間に複数の空白がある行において
/\s*/ でマッチさせると、変数 $` (=$PREMATCH) には何も入りませんでした
なぜでしょうか?

入門書は「パターンマッチが複数解釈出来る場合には一番長い解釈にマッチする」とあります。
よって自分は \s* という「0 回以上のホワイトスペースの繰り返し」は
最も長い解釈では複数の空白にマッチし
$` には文字列A が代入されるはずだと考えたのですが

5031/2:2011/05/02(月) 03:50:24.42 ID:???
>>502
その本の説明が曖昧なのか読み違えているのだろう。

http://perldoc.jp/docs/perl/5.10.1/perlre.pod#Quantifiers
> (始めた地点から)可能な限り多くを先にあるパターンでマッチングさせます。

/\s*/ は0文字以上の空白文字なので、先頭の0文字 = 文字列Aの前でマッチし、
そこで全てのマッチングが成功して終わる。更に長くマッチできる他の場所を
探すような事はしてくれない。

http://perldoc.jp/docs/perl/5.10.0/perlretut.pod
5042/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+"
505nobodyさん:2011/05/02(月) 03:59:30.75 ID:fV7VGj7j
>>503-504
すごく分かりやすい説明ありがとうございます
納得できました
506nobodyさん:2011/05/02(月) 07:34:12.92 ID:???
本題とは関係ないけど、p修飾子(/\s+/p)を付けて、${^PREMATCH}、${^MATCH}、${^POSTMATCH}
で参照したほうがいいね。
507nobodyさん:2011/05/05(木) 01:03:03.69 ID:TLWaU9+s
質問させてください〜
自宅サーバを立てて、アップローダーを作っているのですが、
ファイルサイズ制限をつけるために、apacheのLimitRequestBodyに値を設定しています。

一応、正常に機能して指定サイズ以上の物はストップしているようなのですが・・・
なぜか、エラーメッセージを画面に出力する時としない時があります。
(異常に大きいファイルをアップロードしたりするとメッセージが出力されない事が多いような・・・)

そこで、Perlスクリプト側でエラーをキャッチして、
独自でエラーメッセージを出力したいと思うのですが・・・
なにか、エラーをうまくキャッチする方法はあるでしょうか・・・?
Googleでいろいろ調べてもみたのですが、さっぱりです
よろしくお願いします。
508nobodyさん:2011/05/05(木) 01:28:35.96 ID:???
>>507
>>1
Apache〜嗜みとして〜 Part3
http://hibari.2ch.net/test/read.cgi/php/1043851302/
Apache2.x 【新鯖入荷しました】
http://hibari.2ch.net/test/read.cgi/php/1018333172/
509nobodyさん:2011/05/06(金) 17:35:53.25 ID:???
半角カナ、全角カナ → 全角ひらがなへ
全角の英数字、半角英数字の大文字 → 半角小文字の英数字

※要するに全てひらがなと半角小文字英数字のみにしたい

という処理を行いたいのですが、perl標準ライブラリで変換するにはどのようにすればよいでしょうか?
Encodeだとカナ→ひら変換が無さそうでしたので。。
もし明らかに外部モジュールを使ったほうが良いならそれも検討してみますが、まずは標準モジュールでお願いします。
perl5.8を使用しています。
510nobodyさん:2011/05/06(金) 18:38:28.68 ID:???
標準ライブラリにはなかったと思うが、ライブラリ使う
までもなくtrすりゃいいんじゃねーの?

ただし半角カタカナだと濁点半濁点が別の文字なのを
1文字にしたいとかいいだすとちと面倒なのでモジュール
使う方が楽だよ。
511nobodyさん:2011/05/08(日) 00:12:04.38 ID:jiiJimq5
>>489
かなりどうでもいいけどPerl忍者ってさ
http://blog.plaync.jp/giko/302948.slog
512nobodyさん:2011/05/08(日) 10:28:52.80 ID:???
名前 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)
お気楽チャットにスタッフがツイッターで暴言はいてるってメール送ったら返事帰ってきた
ご連絡ありがとうございます。
お気楽チャットの管理をしております、ホッシーと申します。
そのユーザーがお気楽チャットに出没していることは
知っておりますが、うちのスタッフではありませんし
当サイトにとっても、マナーの悪いユーザーです。
当初、スタッフを希望していましたが、却下しています。
チャット上での暴言や自ら公認の開発スタッフを名乗ることが多いのですが、
相手にするのも大変なので、放置状態になっていたところです。
今後状況によっては、こちらでも対応してまいります。
どうぞ、よろしくお願い申し上げます。
513509:2011/05/10(火) 12:01:54.25 ID:???
>>510

ご意見ありがとうございます。
どのモジュールでどんな感じにコーディングすればよいでしょうか?
514nobodyさん:2011/05/10(火) 13:58:44.47 ID:???
Zen2Han とかをキーワードにしググッてみ
515nobodyさん:2011/05/11(水) 17:02:25.15 ID:???
今なら 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;
516nobodyさん:2011/05/14(土) 11:16:55.58 ID:???

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).)*あたりを参考にどうにかして書けそうな気がするのですが、
わかりませんでした。
どのようにしたら実現できるか教えていただけないでしょうか。

517nobodyさん:2011/05/14(土) 11:47:03.59 ID:???
/^(\S+)(?:\s+(.+))?$/
518nobodyさん:2011/05/14(土) 12:04:44.54 ID:???
>>516
http://perldoc.jp/docs/perl/5.10.1/perlre.pod#Quantifiers
> *   0 回以上のマッチング
> +   1 回以上のマッチング

#!/usr/bin/perl -w
use strict;
for ('aaa 123', 'bbb', 'ccc 234 567', 'ddd 0', 'eee ', '', ' ', "\nfff\n890\t123\n") {
  /(\S+)\s*(.*)/ || next;
  my $name = $1;
  my $value = length $2 ? $2 : 'none';
  print "name[$name] value[$value]\n";
}
__END__

ついでに
http://perldoc.jp/docs/perl/5.10.0/perlstyle.pod
http://perldoc.jp/func/printf
519nobodyさん:2011/05/14(土) 20:15:40.61 ID:???
>>516
my @list = "aaa 123", "bbb", "ccc 234 567");

my %list = ('aaa' => [123], 'bbb' => [qw/ccc 234 567/);
って書き直して、
foreach $key (keys(%list)){
 〜
}
ってやればいいかと。
520nobodyさん:2011/05/15(日) 13:34:55.05 ID:???
(あめ、あまやどり、あまみず、あめりか)を五十音順で、
(あまやどり、あまみず、あめ、あめりか)に並び替えたいのですが、
発想すら浮かびません。

何かスマートなやりかたはありませんでしょうか。
521nobodyさん:2011/05/15(日) 13:57:02.25 ID:???
>>520
print join ',', sort ('あめ', 'あまやどり', 'あまみず', 'あめりか');

http://perldoc.jp/func/sort
http://search.cpan.org/dist/Lingua-JA-Sort-JIS/
522nobodyさん:2011/05/15(日) 13:59:56.61 ID:???
join '、', sort split /、/, 'あめ、あまやどり、あまみず、あめりか'
523520:2011/05/15(日) 14:22:10.48 ID:???
返信ありがとうございます
たった1文でできるとは・・・Perl恐るべし
惚れました
524nobodyさん:2011/05/16(月) 01:27:28.18 ID:???
>>520
>(あめ、あまやどり、あまみず、あめりか)を五十音順で、
>(あまやどり、あまみず、あめ、あめりか)に並び替えたいのですが、

それ五十音順と違う。
525520:2011/05/16(月) 10:07:15.86 ID:???
実行結果みて気付きました
スルーしていただけると思ってたら・・・
ご指摘ありがとです
526516:2011/05/19(木) 09:02:31.06 ID:???
>>517-519

ご回答ありがとうございます。
今立て込んできてなかなか時間が取れないので
時間が出来たらゆっくり吟味したいと思います。

お返事遅くなりすみませんでした。
527nobodyさん:2011/05/25(水) 02:03:04.91 ID:???
誘導されてきました。

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にしてブラウザに出力
528nobodyさん:2011/05/25(水) 02:05:23.64 ID:???
出力結果は、例えばブラウザから


%E6%97%A5%E6%9C%AC%E8%AA%9E
が送られてきた場合、上記でエンコードすると、

���

こうなります。(完全に文字化けです)。
日本語
って表示されれば成功です。

どうゆうふうにデコードがおかしいのでしょうか?

すみませんがお願いします。
もしかしたら、あとで別の文字コード関連の質問もするかもしれません。
529nobodyさん:2011/05/25(水) 07:45:31.16 ID:???
>>527-528
URLはUTF-8でなくASCIIなので、以下は不要では?

#binmode STDIN,":utf8";

それから、URLデコードした文字列がUTF-8になるので、

use Encode;
$decode = decode_utf8 uri_unescape($decode);

とすべきと思うのですが。
530nobodyさん:2011/05/25(水) 18:03:30.98 ID:???
>>529

そう言われると全くその通りでございます。
と言うかperlでutf8がどう扱われてるのか全く分かってませんでした。

ぐぐってるウチに扱い方が分かり、
入出力関係の関数を全部書き直して解決しました。

今までEUCとsjisしか使ってなかったんで助かりました。
ありがとうございます。
531nobodyさん:2011/05/31(火) 08:03:22.29 ID:???
HTTP引数(POSTとかGETとか)でデータに多重構造を持たせたいのですが、決まった書式はありますか?
それとも勝手に書式を定義してもどっかの誰かにナニコレ?とか言われませんか?
532nobodyさん:2011/05/31(火) 08:48:27.13 ID:???
どっかの誰かがナニコレ?と言う可能性はいかなる場合でも常に存在する。
ところで多重構造って何です?具体的にはどーしたいの?
533nobodyさん:2011/05/31(火) 09:11:19.22 ID:???
特に変わりのない普通の多重構造です。

例えばperlだと、
$post = {
hogehoge1 => { hugahuga1 => data1, hugahuga2 => data2},
hogehoge2 => data3;
hogegoge3 => { hugahuga3 => (data4, data5, data6,)},
};

と言うように収納できる形式ならそれでいいです。
一応名前付きと違う物を混ぜた形式にしましたが、実際にはどうでもいいです。
慣例化した物がないならこちらで定義するし、あるなら従おうと思っての質問です。
534nobodyさん:2011/05/31(火) 10:23:46.93 ID:???
その構造を持ったデータをPOSTやGETで受け渡ししたい理由がよくわからない。
ていうかPOSTやGETってことはブラウザ側からサーバ側へ渡すってことだよねえ。
普通はFORMを使う訳で、その場合は受け渡しデータのフォーマットは決め打ちだから
自分で決める必要もないし、というか自分で決められないし。
セッション張りたいならサーバからブラウザのcookie等にセッションIDを持たせて、
データ自体はサーバ側で保持管理するのが一般的なやり方ではないだろうか。
535nobodyさん:2011/05/31(火) 13:20:24.34 ID:???
>POSTやGETで受け渡ししたい理由がよくわからない。
いや、すみませんがよく分からないならいいんです。
それと、質問の内容と答えが違いますし…。

別に書く必要はないと思ってたし、こっちもその話は必要ないので書きませんでしたが、
クッキーはゲートウェイが通らない仕組みなんです。あと無理にやっても仕様が一本化されないし。
それと、行いたいのは保存や管理ではなく通信なんです。

とりあえず、質問に質問されても話がこじれるだけになってしまいますので、>>532-535の書き込みは忘れてください。
>>531の質問が全てです。

一応答えはNOと頂いたと受け取っておきます。
536nobodyさん:2011/05/31(火) 13:39:19.71 ID:???
整合性がとれてれば俺形式でもなんでも好きなのでいいと思うよ。
めんどくさいからjsonとかStorableとか世の中にあるものを
使っといた方がいいと思うけど。あるいはデータを丸ごと
やりとりするんじゃなくてサーバ側に保存してidだけやりとりって
のも考えられる。データ量が多いときはそういう方法も考えた方が
いいね。
537nobodyさん:2011/05/31(火) 14:22:14.28 ID:???
xml でも json でも、好きなの使えば良いかと
538nobodyさん:2011/05/31(火) 15:41:33.59 ID:???
ありがとうございます。
特にキーワードを与えてくれて助かりました。
既存のほうが 何このフォーマット?勝手に作ったの?とか言われにくいんで。

ちなみにID管理はすでにしてますw。
一回の通信がちょっと多めなんです。
それが並列データで送られてくると、イチイチ個々のデータに対応しなきゃならなくてえらいめんどくさいんです。
539nobodyさん:2011/05/31(火) 17:27:33.42 ID:???
xml はめんどくさいし、なんか仰々しいので JSON の方がおすすめかも
540nobodyさん:2011/05/31(火) 18:05:05.53 ID:???
perlでcgiをコーディングし始めたものです。
xhtmlにて一旦ページをつくりそれを元に動的なページを作るために試行錯誤しています。
しかし問題が発生して困っております。
それは、表示の問題で、IE9では正常に表示されてるものがFireFoxでは表示が崩れるというものです。
ただ、一度xhtmlのページを作った段階では表示の差異はなくしてるのですが、これをperlに取り込む実行させると
同じ値を渡したページがFireFoxでは正常に表示されたり、崩れたりします。
ソースを調べてもxhtmlで作ったページとcgiで生成したページに違いはなく、cgiのほうだけ崩れたりそうじゃなかったりと原因が特定できません・・・
何が原因と考えられるでしょうか?
541540:2011/05/31(火) 18:21:43.15 ID:???
追記です。
ちょこちょこ検証していて、おそらく
print "Content-type: text/html\n\n";
の出力するタイミングでxhtmlのスタイルシートの読み込みが遅れると出力出来ないんじゃないかと疑っております。
ただ、現状でテストしていかないと原因が切り分けられそうにないので、
有用な情報があればいただければ幸いです。
原因が特定でき次第報告させていただきます。
542nobodyさん:2011/05/31(火) 18:36:17.20 ID:???
>>540-541
>>1
自分の作ったCGIスクリプトをデバッグするスレ
http://hibari.2ch.net/test/read.cgi/php/1011174442/
△▲ WebProg 初心者の質問 Part23 ▼▽
http://hibari.2ch.net/test/read.cgi/php/1294318320/
543540:2011/05/31(火) 23:16:45.83 ID:???
>>542
お返事ありがとうございます。
識者の方に検証いただくのは願ったり叶ったりなんですがperlのコード自体が1000行以上あり
cssとイメージが連動してるんですが、大丈夫なものでしょうか?また、どうやって検証していただくかたちがいいでしょうか?
544nobodyさん:2011/06/01(水) 00:05:43.06 ID:???
perl で出力してるページと、HTML を表示してる URL をプリーズ
あと内部のばれたら不味いような部分を消してソースもくれ。
見なきゃ分からん
545nobodyさん:2011/06/01(水) 01:11:28.43 ID:???
cgiからのヘッダーがごく微妙におかしい場合、無理くり読み込むブラウザや、表示を多少崩しても実行するブラウザや、
ちょっとでもおかしいと即座に実行を停止するブラウザとかあります。
ちなみに必要な改行数とかが、私の中では間違いやすく気付きにくいポイントです。改行コードの違いとか。
あとは文字コードの指定とか。

元HTMLとCGIからの出力に「本当に差異がない」場合は、ヘッダーのミスしか差異が起きる発生箇所がないかと思います。

あと、本当に差異がないのかどうか、目視ではなく、プログラムで検査したほうがいいです。
自分で作るか、適当にどっかからファイル比較ソフトをダウンロードしてくるか。
546540:2011/06/01(水) 02:05:39.47 ID:???
>>544
全く同じではないですが構造は同じだと思います
cgiのほうはDBからデータを取ってきて表示しています
ローカル環境でしたので、公開は即席で行なっております、また、固定IPではないのでIPが変更された場合ごめんなさい
かなりの不備はお赦しください
http://219.103.217.162/contents/category/c01b.html
http://219.103.217.162/contents/category/test001.cgi
>>545
文字コードutf8で統一されてるとはおもいますが、Encodeモジュールにてutf8デコード→加工→utf8エンコード出力しております。
ただ、記述に関して若干の差異があるので、それもひとつの原因となりうるのですね
もう少し詰めて、原因を探っていきたいと思います。
547nobodyさん:2011/06/01(水) 06:49:35.02 ID:???
>>541
> print "Content-type: text/html\n\n";
> の出力するタイミングで

出力するタイミングって…
真っ先に出力されてるもんじゃないの?
もしかして $|=1; が入ってないからとか?
548nobodyさん:2011/06/01(水) 07:05:17.61 ID:???
>>538
> 特にキーワードを与えてくれて助かりました。
「構造化 データ 交換 フォーマット」あたりでググればJSONやXMLくらいすぐ出てくるけどね。
でも既存のフォーマットを採用しても「なんでこれを採用したの?」と説明を求められたりして。
549nobodyさん:2011/06/01(水) 09:36:22.64 ID:???
CGI の挙動おかしくない?
レスポンスが HTTP/0.9 とか返ってくるんだけど・・・

設定の労力は AnHTTPd も Apache もさほど変わらないから、
Apache で HTTPD を立て直したほうがいいと思う
550nobodyさん:2011/06/01(水) 14:32:10.61 ID:???
http://hibari.2ch.net/test/read.cgi/php/1295170172/540n-
二度手間とか「それは聞きました」になるから同時進行させないでほしいもんだ
551540:2011/06/02(木) 00:36:34.95 ID:???
>>549
apacheを導入しました(cgiが動かずだいぶ苦戦しましたが・・・)
ひとつずつ切り分けていったところどうにかローカル環境では動きました
その副産物的にファイアーフォックスでほぼ、正常動作してくれました(ただ、数十回中なんどか表示が崩れる場合がありましたが・・・)
この程度なら耐えうるかなとおもいます
http://219.103.217.162/contents/category/c01b.html
http://219.103.217.162/test.cgi
外部に公開するのは初なので自宅サーバー確認ページなどで確認してみましたが、表示されますでしょうか・・・
>>547
$|はバッファ関係の特殊変数でしょうか?
$|=1; を代入してみても、数十回に数回起こる崩れは治りませんでした・・・
なんなんでしょう・・・
>>550
結果的にマルチっぽくなってしまったのは申し訳ありませんでした・・・
こちらをメインとさせていただきます
552nobodyさん:2011/06/02(木) 00:47:03.58 ID:???
got 403 Forbidden
553540:2011/06/02(木) 00:47:55.45 ID:???
cgiのほうは値を渡さないとエラーが出てしまうので
http://219.103.217.162/test.cgi?cate_data=a&row_data=1&num_data=1&method_data=1&page_data=1
これでどうでしょうか
554nobodyさん:2011/06/02(木) 06:20:49.70 ID:???
> http://219.103.217.162/contents/category/test001.cgi
> #!usr/bin/perl
↑ #!/usr/bin/perl じゃないの?

まずは use strict; と use warnings; をつけて、
エラーを吐かなくなるまで修正してみることをおすすめする。
Firefoxのレンダリングエラーとは直接関係ないかもしれないけど
後々のためにはやっておいた方がいいと思うので。

まあFirefoxは4になって以降挙動が微妙に怪しいからな…
555nobodyさん:2011/06/02(木) 08:10:52.87 ID:???
見た感じ、プログラム自体は経験者なんですね。
で、

if ($int_nm_nm == "1") {

は文字列として比較したいのか、数字として比較させたいのかはっきりと。

数字 → ==、!=
文字列 → eq、ne




しかし SQL 文はさっぱりわかんねぇや(理解するつもりもそんなに無いけど・・・)
556nobodyさん:2011/06/02(木) 10:13:18.93 ID:???
昨日の朝(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 だし。
557nobodyさん:2011/06/02(木) 10:20:27.35 ID:???
うーん今時グローバル変数を使ってるのは見る気がしないぞ…
それと、if文がでかすぎ。htmlをすべてhereドキュメントでコードの中に書くのはできればやめた方がよい。
今回のようにデバッグしにくくなるから。スカラー変数の多用もよくない。スカラーは限られたブロック内の
一時変数として使う程度にしておく。それ以外はハッシュを効率よく使うとよい。まあ好き好きだけれど。
$html = <<"HTML" のようなのだと、変数は展開してしまうから、意図しない置き換えが起きているとか。
単純に意図しているのとは違う書き出しをしているとか。
本来表示されるべきhtmlとのdiffを取るとか、firefoxならHTML validatorでおかしなところを拾うとか、
部分ごとにhtmlを作っているものをところどころにチェックポイントを入れて、少しずつチェックしていくとか
すれば、「崩れる」原因は当たりがつけられそうだけれど。
558nobodyさん:2011/06/02(木) 16:10:04.79 ID:???
いちおう〜エスパーしてみる

ScriptAlias → コメントアウト
DocumentRoot の内の Options に ExecCGI をプラス
AddHandler cgi-script .cgi を有効に。
559540:2011/06/02(木) 23:24:27.30 ID:???
数々の方のお知恵、ダメだしをいただきありがとうございますm(__)m
うれしいです
>>554
あとあと use strict は通る道と思いつつ、あとまわしにしてしまいましたがエラーの切り分けには大切だと思います
修正してみたのですがどうでしょうか
>>555
全くのトーシローです
よくみると、ラクダ本からほとんど足を出してないほどだとおもいます
数字と文字によって変えたほうがいいのですね、勉強になります
560621: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だけこういう挙動になってしましました・・・
561540:2011/06/02(木) 23:28:32.26 ID:???
名前欄ミスってしまいました・・・
>>558
ScriptAliasを無効にした場合、ルート外のディレクトリのcgi-binのcgiも動くのでしょうか?
562nobodyさん:2011/06/03(金) 01:35:12.29 ID:???
ExecCGI を書けばね
563nobodyさん:2011/06/03(金) 08:28:00.97 ID:???
もし自分がデバッグするとしたら…
・元のXHTMLとCGIが出力したXHTMLの構造に不一致がないかチェック。
 (これはもうやってるんだっけ?でもその後CGIいじったんだよね)
・上記を、IE9とFirefox(4?)の両者でそれぞれソース保存して違いがないかチェック。
・HTTP ServerやSQLのログにヒントがないか見てみる。
・ローカルプロキシ等でHTTPパケットをモニタして、IE9とFirefoxとで
 (また、Firefoxで表示の崩れる症状が出た時と出なかった時とで)
 パケットのやりとりに違いがないか見てみる。
あたりかな。
564540:2011/06/06(月) 00:45:44.08 ID:???
ちょっと忙しくレスが遅れて申し訳ありません・・・
>>562
もうすこし理解を深めたいですね・・・
設定ファイルは英語で丁寧に書かれていて英語をネイティブに読めたらどんなに楽か考えつつ翻訳してました・・・
やっぱり英語圏の方がソフトウェアに強いと言われる所為は英語で書かれている書籍やそもそもプログラミング言語自体が英語ベースだからでしょうか・・・
>>563
元のHTMLとCGIで生成されたHTMLを付きあわせてはやってみました
なるほど・・・別のブラウザ同士のソースを見てみるんですね
HTTPのパケットはどのようにしてモニターするのかわからない状况なのでまだまだ修業が必要ですね
ピンが通ったかどうか調べるだけでも骨が折れるレベルなので・・・

565nobodyさん:2011/06/08(水) 12:48:01.18 ID:???
スパゲッティなperl cgiにアクセスログなどを保存するコードを簡単に追加できる方法を緊急で探しています

もうじき成立する法律で、自前サイトもってる人がログ保存してないと3年の懲役らしいのです
http://tanakaryusaku.jp/2011/06/0002432

半分以上がネットで拾ったコードの切り貼りなので中身把握をしてないので非常に困ってます
(貼りつけたときは入出力だけは把握してたけど今は憶えてない)

何か良い知恵はありませんでしょうか
566nobodyさん:2011/06/08(水) 15:19:56.63 ID:???
ありません
567nobodyさん:2011/06/08(水) 16:33:19.10 ID:???
マルチ野郎に示す事など御座いません
568nobodyさん:2011/06/08(水) 16:44:17.90 ID:???
簡単にコードを追加できるものをスパゲッティとは呼ばん
つまりスパゲッティと形容している時点で簡単にコードを追加できる方法などない
ということだ
あとそのリンク先のジャーナリストの書くことを鵜呑みにしない方がいいぞ
原発事故関連でもいい加減な記事書き飛ばしてるような奴だ
569tokuhirom:2011/06/08(水) 16:54:43.75 ID:hreP7cYm
さいきんiphone晩モンスターハンターにはまってます
それで僕もモンスターハンター作りたいと思いました
JRPGの意思をついでCUI版モンスターハンターをつくりました
みてください
tokuhirom で検索すればモンスターハーター とくひろむ改が出てきますよろしくお願いします
570tokuhirom:2011/06/08(水) 16:56:31.93 ID:hreP7cYm
クソシテネロム
お得なヒロム
モンスターハンターのアカムトルムっていう敵がいるんですが
そのモンスターの名前が不満足だったので
トクヒロムに変更しました
今後ともtokuhiromをよろしくおねがいします
571nobodyさん:2011/06/09(木) 00:34:19.11 ID:???
3年の懲役w
572nobodyさん:2011/06/09(木) 10:52:05.32 ID:???
メモ書き失礼します (後々に他の人のためにもなるかなと・・・)

use AAA とした場合、package 名も同じにする必要があり、ファイル名とパッケージ名が異なる場合、
例えば AAA.pm に package ABC と記述があった場合は import ABC としなければならない。

1時間ぐらいずっと試行錯誤しててハマった。
573nobodyさん:2011/06/09(木) 10:53:11.77 ID:???
あっ、関数を Export する場合のお話です。
574nobodyさん:2011/06/09(木) 11:22:45.20 ID:???
そういう変なことはやめとけ
575otsune:2011/06/09(木) 15:38:19.04 ID:???
やっぱりぼくじゃ盛り上がりませんねな
576otsune:2011/06/09(木) 16:33:34.56 ID:???
577nobodyさん:2011/06/11(土) 02:48:16.45 ID:???
フォームから日本語を送信したときの動作に納得できない点があるので、教えてください。
(メモ: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回の投稿に分けます。
578nobodyさん: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

ちゃんとエラーになる。
579nobodyさん:2011/06/11(土) 03:39:34.99 ID:???
use utf8 は文字列リテラル(TEST4でいう「ソースに書かれた日本語」)をフラグ付きutf-8にする
binmode STDIN, ":utf8" は標準入力から入ってきた文字列を以下同文
$form->param('string') がそのどちらでもないなら勝手にフラグは立たないと思うが、
TEST1〜4 の flag on ってのは実際に is_utf8 で確認したって意味?
580nobodyさん: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無し) です。
581nobodyさん:2011/06/11(土) 08:17:27.89 ID:???
>>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」の警告は出ないです。
582nobodyさん:2011/06/11(土) 14:07:42.77 ID:???
どう見てもutf8フラグなんて立っていません。本当にありがとうございました。
583tokuhirom:2011/06/11(土) 17:33:03.72 ID:???
僕はたちません
童貞ですから
584nobodyさん:2011/06/11(土) 17:48:30.42 ID:???
それはEnd of Danseiki
585tokuhirom:2011/06/11(土) 17:56:32.64 ID:???
小飼・男性器
586nobodyさん:2011/06/11(土) 20:05:46.19 ID:???
こういう質問する人はたぶん文字コードと言えばSJISだと思ってる(というか
文字コードっていう概念を知らない)気がする
587nobodyさん:2011/06/11(土) 20:52:26.82 ID:wROrwK/J
utfのフラグの質問なのに、なんでsjisを出すんだ?
それにソースを見る限りはそこまで初心者って思えないけどな。

きみは良く「周りを見ろ」とか「憶測だけで物を語るな」とか言われるでしょ?
588nobodyさん:2011/06/11(土) 21:24:02.85 ID:???
>>587
言ってくれる友達がいないんです
589nobodyさん:2011/06/11(土) 21:26:57.13 ID:???
んでも、ネットに書いてあるからとりあえずそうしてみた程度で何も考えずコードコピペしてるようだし
文字コードの概念知ってても知らなくても大して変わらんとは俺も思う
590580: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 が出てくれない。
591nobodyさん:2011/06/12(日) 01:44:16.42 ID:???
変数は勃っててもデータは勃ってないから
592nobodyさん:2011/06/12(日) 08:19:27.57 ID:???
>>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文字として見えるでしょう。
593nobodyさん:2011/06/12(日) 11:45:41.83 ID:???
>>592
わかりやすい。参考になった。
594nobodyさん:2011/06/12(日) 19:27:32.04 ID:+q+sCwIP
群馬県高崎市に住む39歳AB型、製造業界で派遣プログラマーの仕事をしているhekenekoこと、黒飛健と申します。
新日本テクトスという会社を追われ、その後どうしてよいかわからなくなりました。
だけど私の大好きな尾崎豊の歌に励まされ、夢であるプロのクリエイターを目指すことにしました。
何度も挫けそうになりましたが、尾崎豊の歌を聞きながら自分を励ましています。
今も尾崎豊の歌のおかげで、夢を諦めずにCGアニメの製作を続けられています。

とりあえず、以下の動画を見てください。一生懸命作ったもので、自分では既にプロレベルの傑作だと思ってます。
できればみなさんのご意見、ご感想を聞きたいです。

復興支援アニメ.mp4
http://www.youtube.com/watch?v=yn4uTiN8vvM

湾岸鉄道キャンペーンCM(カラー).mp4
http://www.youtube.com/watch?v=g3PlX1OAhug&feature=channel_video_title


これは力作で、にしおかすみこさんにも是非見てもらいたかったため彼女のブログにコメントしたんですが無視されました。
http://blog.watanabepro.co.jp/nishiokasumiko/archives/2008/02/22_15_post_22.html
(下の方にあります。投稿者: hekeneko | 2008年03月24日 22:54)
やはり私の才能に気づいてくれる人は中々いないみたいですね(苦笑)。


題名”ラダニアムの翼”
A wing of radaniam_partU.mp4
http://www.youtube.com/watch?v=keSK70uqDJY
A wing of radaniamu part_V.mp4
http://www.youtube.com/watch?v=-LRZbXbirR0

題名”hekeneko honey”
http://www.youtube.com/watch?v=kATwf6fAkG8
私の世界観の全てを凝縮した力作です。hekenekoワールドをご堪能あれ。
595nobodyさん:2011/06/12(日) 23:14:57.36 ID:???
ファイルアップロードされた場合の容量チェックなんですが
受け取った後にチェックし容量オーバーの物は弾いているんですが
故意に大きなファイルを送られた場合サイト全体が重くなってしまいます。
受け取る前にチェックして弾けないでしょうか?

デコード処理の先頭に
if ($ENV{'CONTENT_LENGTH'} > 307200) {exit;};#300KB以上は弾く
また、apacheのLimitRequestBodyは試したんですがどうも全部送りきってるようです
596nobodyさん:2011/06/12(日) 23:49:00.65 ID:???
その議論はどっかでやったわ
597580:2011/06/13(月) 02:43:22.69 ID:DSl6uHf1
CGI 配下で動くものはサーバーが全て受け取ってからプログラムに渡すので無理

PHP は順次処理できたような気がするけど忘れた

javascript で事前に弾くか、actionscript 使うかだと思うよ。
59880:2011/06/13(月) 16:28:06.18 ID:DSl6uHf1
>>592
なるほど。
だからフラグが立ってても Wide Character 〜 のエラーは無かったのか。。。

ありがとうございました。
599580:2011/06/13(月) 17:01:03.50 ID:DSl6uHf1
url エンコードで送られてきたデータは CGI->param で受け取った後、
utf8::downgrade でフラグを外すようにしてみた。
600nobodyさん:2011/06/13(月) 17:30:07.28 ID:xEY/VF1J
自身のperlスクリプトで、自身が呼び出されたときのHTTPヘッダはどうやって見ることができますか?
よろしくお願いします。
601nobodyさん:2011/06/13(月) 17:33:21.86 ID:???
>>599
そんな回りくどいことをしなくても、単にbinmode STDIN, ":utf8"を外せばいいような。。
602nobodyさん:2011/06/13(月) 17:41:40.00 ID:J8VXPdgR
$in->content_type
603nobodyさん:2011/06/13(月) 17:43:48.94 ID:???
1から20ぐらい教えてもらわないと何も出来ない馬鹿なのさ
604nobodyさん:2011/06/13(月) 17:48:50.53 ID:???
マニュアルを読(よ)みましょう
605nobodyさん:2011/06/13(月) 18:39:23.75 ID:???
よよみましょう
606nobodyさん:2011/06/14(火) 13:07:26.29 ID:???
(よ) がふりがなであることも理解できないとはPerlコーディング以前の問題か
607nobodyさん:2011/06/14(火) 13:20:21.17 ID:z7HOILli
マジレスw
608nobodyさん:2011/06/14(火) 14:54:57.91 ID:???
>>606
おまえかわいそう
609nobodyさん:2011/06/14(火) 15:12:25.07 ID:???
610nobodyさん:2011/06/14(火) 19:50:59.02 ID:???
Hero セレクト画面

ジャスティス側の軍勢

Tokuhirom
Yappo
Yusukebe
まつもとひろゆき


カオティック側の軍勢
Mala
ssig33
Mizuti
otsune
はまちちゃん
611nobodyさん:2011/06/15(水) 16:52:13.47 ID:???
$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;
}
612nobodyさん:2011/06/15(水) 20:18:30.98 ID:???
>>611
Shift JISのままパターンマッチングさせずに
文字コードを適宜変換して行なうが吉。
613611:2011/06/16(木) 13:11:47.01 ID:???
>>612
ありがとうございました。
検討してみます。
614nobodyさん:2011/06/16(木) 21:41:46.04 ID:???
UTF8を使えば、こんなに簡単なのにな。

\p{InHiragana} ひらがな
\p{InKatakana} カタカナ
\p{Han} 漢字
615nobodyさん:2011/06/17(金) 17:18:33.75 ID:???
>>611
マルチバイト文字はperlの内部文字コードにdecodeしてから処理しましょう。
616nobodyさん:2011/06/18(土) 12:08:11.36 ID:???
大昔ならjperlの出番だったところだな
jperlとかjgawkとかよくお世話になった
617Perl忍者:2011/06/18(土) 19:06:40.18 ID:???
みんなこれフォロー
http://d.hatena.ne.jp/sugyan/20110616/1308203734

ここに乗ってるのフォローしてくださいお願いします
618Perl忍者:2011/06/18(土) 19:16:50.12 ID:???
みんなこれフォロー

「今すぐフォローすべきPerl界のスーパーエンジニア」

http://d.hatena.ne.jp/sugyan/20110616/1308203734

ここに乗ってるのフォローしてくださいお願いします

お願いですRuby のみなさんおねがいです
619nobodyさん: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)
お気楽チャットにスタッフがツイッターで暴言はいてるってメール送ったら返事帰ってきた
ご連絡ありがとうございます。
お気楽チャットの管理をしております、ホッシーと申します。
そのユーザーがお気楽チャットに出没していることは
知っておりますが、うちのスタッフではありませんし
当サイトにとっても、マナーの悪いユーザーです。
当初、スタッフを希望していましたが、却下しています。
チャット上での暴言や自ら公認の開発スタッフを名乗ることが多いのですが、
相手にするのも大変なので、放置状態になっていたところです。
今後状況によっては、こちらでも対応してまいります。
どうぞ、よろしくお願い申し上げます。
620nobodyさん:2011/06/20(月) 03:55:56.04 ID:???
>>619
ご指定のページが見つかりません。
URLをもう一度お確かめ下さい。
621nobodyさん:2011/06/20(月) 12:46:12.50 ID:???
遁走済
622nobodyさん:2011/06/20(月) 14:10:35.79 ID:???
Perl忍者って確か犬板や雲丹板に糞スレ立ててた奴と同一人物かな?
Perl忍者だか黒真珠だかなんかそんな単語見た記憶がある
623nobodyさん:2011/06/23(木) 02:12:59.75 ID:???
>>619
っせえ
黙ってろ
624nobodyさん: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 ページ目) を知りたい。

625nobodyさん:2011/06/26(日) 14:27:52.41 ID:???
626nobodyさん:2011/07/04(月) 06:25:35.96 ID:???
文字化けの修復について聞くのはスレ違いかな?
自作のクローラで utf8 のサイトを euc-jpで decode → utf8 に encode してしまい
豪快に文字化けしてしまったんですが、逆の操作をしても元に戻せません。
何かヒントでもいいので修復方法について案はないでしょうか。
627nobodyさん:2011/07/04(月) 06:29:12.05 ID:???
連投すみません。
バイナリエディタで見たら大半の文字がREPLACEMENT CHARACTER(0xEF 0xBF 0xBD)に
置換されてました。修復不可能ですね。諦めます。
628nobodyさん:2011/07/07(木) 11:35:33.00 ID:???
#!/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本体とパッケージがあった場合に質問です。
→次レスに続く
629nobodyさん:2011/07/07(木) 11:36:57.47 ID:???
→続き

@本体、パッケージ両方にuse strict; use warnings;は両方書かないと
 それぞれで効力がないという認識でよろしいでしょうか?
ATESTパッケージでuse Encode;することで、cgi本体からは、オブジェクト$oTESTを使い
 $oTEST->encode()などでEncodeモジュールは使えないのでしょうか?
Bperl5.8.8から内部文字コードはutf8になったとのことですが、
 ※1の行は必要ないのでしょうか?
630nobodyさん:2011/07/07(木) 14:04:39.40 ID:???
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/日本語/)
631nobodyさん:2011/07/07(木) 15:49:23.53 ID:???
>>630
継承させようがさせまいが
Package->encode(charset => 'string') は
Encode::encode('Package', 'charset', 'string') になるので
sub encode { shift; Encode::encode(@_) } のようなラッパーを書くか
Package::encode(charset => 'string') と呼ぶ必要があるように思うけど?
632nobodyさん:2011/07/07(木) 15:51:40.27 ID:cTS/XVoB
久々にビシっと決まってる回答を見た気がするw
633nobodyさん:2011/07/11(月) 15:41:41.97 ID:???
my $a = [
['0', 'ぜろ' ],
['5', 'ご'],
['1', 'いち'],
['3', 'さん'],
['7', 'なな']
];

上記リファレンスの$a->[*]->[0]でソートするにはどのように書けばよいでしょうか?
634nobodyさん:2011/07/11(月) 16:22:49.74 ID:???
まず $a って変数名をそこに使うのはよくないので $ref だとして、
my $sorted_ref = [ sort { $a->[0] <=> $b->[0] } @$ref ];
635nobodyさん:2011/07/11(月) 17:13:15.62 ID:yD3+Z2kH
'' なので cmp
または int 使って <=>
636nobodyさん:2011/07/11(月) 17:20:06.04 ID:???
イランだろ…
637nobodyさん:2011/07/11(月) 23:33:11.42 ID:???
>>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'
];
638nobodyさん:2011/07/11(月) 23:36:10.57 ID:???
コピペみすった。正しくは以下。

% 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 )]'

639nobodyさん:2011/07/12(火) 01:22:03.73 ID:wRYQ1jhA
>>637
cmp も <=> は結果同じになったよ@v5.10.0 built for MSWin32-x86-multi-thread
640nobodyさん:2011/07/12(火) 02:36:13.33 ID:???
This is perl, v5.10.0 built for MSWin32-x86-multi-thread
Binary build 1003 [285500]

これでやったけど637が試したとおり <=> と cmp で順番変わったよ。
641nobodyさん:2011/07/12(火) 03:14:16.36 ID:???
>>638の2と12の間が全スペになってるせいではなくて?
642nobodyさん:2011/07/12(火) 03:29:13.00 ID:wRYQ1jhA
コピペだから気が付かなかった
643637:2011/07/12(火) 05:13:11.16 ID:???
…重ね重ねスマン。

644nobodyさん:2011/07/16(土) 06:11:17.47 ID:???
my $hostname = hostname();
$hostname =~ s/.jp//;

のような処理をしているのですが、
これを

my $hostname = s/hostname()/.jp//;

みたいな記述で1行にまとめることはできませんか?
645nobodyさん:2011/07/16(土) 06:36:14.55 ID:???
(my $hostname = hostname()) =~ s/\.jp//;
646644:2011/07/16(土) 08:40:37.68 ID:???
>>645
(ID変わってしまいましたが)
ありがとうございますm(_ _)m
647nobodyさん:2011/07/16(土) 11:10:57.76 ID:???
>>646
どういたしまして。
648nobodyさん: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{
}


このような感じで使っています。
649nobodyさん:2011/07/24(日) 02:21:17.78 ID:???
>>648
複数パッケージを1つのファイルにまとめる人もいるし、必ず分ける人もいる。
こんなところでアンケートを取るより、
手元の環境にインストールされてるモジュール群でも一通り調べてみたら?
650nobodyさん:2011/07/26(火) 17:16:04.58 ID:???
class感覚で使うなら分けたほうがわかりやすい気もするが
イレギュラーではないはず
651Perl忍者:2011/07/26(火) 17:51:15.95 ID:???
ゴミみたいだな
C#使いの俺から見たら
>>648の汚い忍者Perl文法がゴミのように見える
652nobodyさん:2011/07/26(火) 22:35:25.55 ID:???
まあ、あながち間違ってはいない。
クラスというものがないから、無理やり作ってる。
C言語でオブジェクト指向をする規約みたいなもんだ。
653nobodyさん:2011/08/02(火) 00:42:25.14 ID:??? BE:799668162-2BP(1450)
ttp://megalodon.jp/2011-0529-1203-32/blog.plaync.jp/giko/302948.slog
ttp://blog.plaync.jp/giko/302948.slog
名前 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)
お気楽チャットにスタッフがツイッターで暴言はいてるってメール送ったら返事帰ってきた
ご連絡ありがとうございます。
お気楽チャットの管理をしております、ホッシーと申します。
そのユーザーがお気楽チャットに出没していることは
知っておりますが、うちのスタッフではありませんし
当サイトにとっても、マナーの悪いユーザーです。
当初、スタッフを希望していましたが、却下しています。
チャット上での暴言や自ら公認の開発スタッフを名乗ることが多いのですが、
相手にするのも大変なので、放置状態になっていたところです。
今後状況によっては、こちらでも対応してまいります。
どうぞ、よろしくお願い申し上げます。
654nobodyさん: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に飛んでしまいます。
何がいけないのでしょうか?
655nobodyさん:2011/08/02(火) 22:45:31.57 ID:???
=~
656nobodyさん:2011/08/02(火) 23:02:51.53 ID:???
あ〜〜、空けちゃいけないんですね、今の今まで知らなかった
657nobodyさん:2011/08/06(土) 14:23:19.93 ID:???
レンタルサーバの場合、コマンドラインからモジュールのインストールが出来ないサーバがほとんどだと思うのですが、
cgiを置きモジュールを使いたい場合、どのようにインストールするのがスマートでしょうか。
(例)Email::MIMEやHTML::Templateのインストールなど

自分が思いつくのは、

自分のPCに使いたいレンタルサーバと同じ環境を作りそこでインストール → /usr/local/lib/*** をftpでアップロード

ですが、これだと使うレンサバが複数だと管理がかなり大変だと思っています。
みなさんが運用されている方法や参考サイトなどありましたら教えていただけますでしょうか。
658nobodyさん:2011/08/06(土) 14:40:27.88 ID:???
use lib
659nobodyさん:2011/08/06(土) 15:05:39.24 ID:8kKKWIjR
use lib 'DIR'

もし use lib が使えなくても、自身のディレクトリに PATH は通ってるので、
CGI が置いてあるディレクトリに置けばなんとかなる
660657:2011/08/06(土) 15:50:35.78 ID:???
>>658-659

ありがとうございます。
ちょっと質問の意図がうまく伝わっていないようですみません。
インストールしたモジュールの運用方法ではなく、
レンサバにどうやってインストールしているのか、の方法についての質問です。

sshログイン(コマンドライン)が使えるサーバであれば下記コマンドで簡単にインストールできますが、
ssh、telnetが用意されていない(コマンドラインが使えない)サーバで、モジュールをインストールするのに
なるべく簡単な方法を探しています。

cpan2rpm
yum
perl -MCPAN -e shell

質問の内容がわかりづらくてすみません。
661nobodyさん:2011/08/06(土) 17:12:10.73 ID:???
ローカルにインストールしてzipなりtgzなりで固めてftpで転送して展開する
コンパイルが必要なモジュールを含む場合は使えない手かもだが
スマートな方法ってのはよくわからないけど
たびたびアップデートする必要とかあるならスクリプトなりバッチなり書けばいいんでは
662nobodyさん:2011/08/06(土) 17:50:30.86 ID:???
makeするCGIを書く
663nobodyさん:2011/08/06(土) 21:03:23.04 ID:8kKKWIjR
pureperl なモジュールなら FTP でアップするだけ。

ssh とか入れない鯖が make 出来るとは思えないんで、pureperl なモジュールを探せばよいかと。
664nobodyさん:2011/08/06(土) 22:32:28.42 ID:???
鯖缶に頼む
665nobodyさん:2011/08/07(日) 04:09:32.20 ID:???
つか、1000円/月以下でレンタルできる
VPSをなんで使わないの?
使えばインストールなんて簡単なのに。
666nobodyさん:2011/08/07(日) 07:43:13.44 ID:???
>>665
500円/月以下でレンタルできる
ホスティングサービスが好きだからさ。
667nobodyさん:2011/08/07(日) 08:15:36.57 ID:???
DTIのVPSは490円だお
668nobodyさん:2011/08/07(日) 09:52:50.83 ID:???
DTIはアダルトコンテンツ禁止なんだよなあ(適法でも)
669nobodyさん:2011/08/07(日) 12:11:52.85 ID:???
月500円程度で、無駄な努力
アホすぎるw
670nobodyさん:2011/08/07(日) 16:26:03.31 ID:???
CGIからデータを吸い取ってこちらで加工したいと考えています
lwpでアクセスを試みましたが401エラーで弾かれてしまいました
どうやらIIS/5.0を使っている模様ですがどういう方法で接続するのか
どなたでもかまいません、助けていただけませんか
671nobodyさん:2011/08/07(日) 16:26:59.29 ID:???
>>669
よく理解できないまま参加してくるなよカス
672nobodyさん:2011/08/07(日) 16:29:10.51 ID:???
673nobodyさん:2011/08/07(日) 16:33:34.83 ID:???
>>672
てっきりこれが原因かと思い込んでました
認証がうまく言ってない事は間違えなさそうですね・・・
さてどうしたものやら・・・
URLどうもです!
674nobodyさん:2011/08/07(日) 17:05:15.37 ID:???
>>673
どううまくいかないのか情報少なすぎ
とりあえず「lwp 認証」でググれ
675nobodyさん:2011/08/07(日) 22:10:28.67 ID:???
>>674
ローカルで.htaccessを設定した自分のサイトへのアクセスができるかの確認⇒自動ログイン成功
そのまま自動ログインしたいサイトに接続を試すとやっぱり401.3で弾かれる・・・
↓エラー
HTTP 401.3 - リソース上の ACL によってアクセスを拒否されました。
インターネット インフォメーション サービス
676nobodyさん:2011/08/07(日) 22:24:11.32 ID:???
具体的に
677nobodyさん:2011/08/07(日) 22:39:54.43 ID:???
ソース張ればいいかな?
678nobodyさん:2011/08/08(月) 01:45:38.66 ID:???
670です 二つの違いが少し分かりました
Authorization: Basic eW***********************==
となっているところが
Authorization: NTLM TlRM****************************==
cookie: __utma=********************
となっています これが原因でしょうか?
679nobodyさん:2011/08/08(月) 01:56:29.96 ID:???
とりあえずその cookie を食えるように cookie_jar を用意しよう。
680nobodyさん:2011/08/08(月) 01:57:39.13 ID:???
NTLM認証って分かったんだろ、それでcpanあたれよ
681nobodyさん:2011/08/08(月) 03:42:48.86 ID:???
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です。
アドバイス願いします。
682681: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です。
アドバイス願いします。
683nobodyさん:2011/08/08(月) 04:56:39.37 ID:???
ねえなんで資料がないとかぬかすわけ?
perlfuncにしっかりと書いてあるんですけど
684nobodyさん:2011/08/08(月) 09:57:55.09 ID:???
>>678
もう見つけてるだろうけど「ntlm認証 perl」でぐぐったらすぐ拾えたよ
LWP::Authen::Ntlm - LWP で (Microsoft) NTLM 認証を有効にするライブラリ 【perldoc.jp】
ttp://perldoc.jp/docs/modules/libwww-perl-5.813/LWP/Authen/Ntlm.pod
685nobodyさん:2011/08/08(月) 10:43:28.80 ID:???
>>679
やってみます
>>680,684
ありがとうございます私のほうでも何回か試しましたが、It didn't work!と出ていました
Mydomain\\ユーザー ←ドメイン・・・とはどれを指すのでしょうか
686657:2011/08/08(月) 11:20:55.90 ID:???
>>661,662,663,664,665

ありがとうございます。
pureperlであれば<<663さんの方法でいけますが、問題はバイナリを使う場合ですね。
pureperlで代替できる場合は問題ないですが、代替が無い場合は

ローカルで同じOS環境を作ってインストール(コンパイル)→インストールしたディレクトリ一式をftpでアップロード

しか方法はないのでしょうか。

※ >>662 を見て思ったのですが、これはcgiからsystem("make〜")などを使いインストールするということでしょうか?
具体的にどういう意味か教えていただけないでしょうか。参考サイト情報でも構いません。
687nobodyさん:2011/08/08(月) 12:40:58.89 ID:???
>>686
うちで借りてるのは安い共用ホスティングサーバだけど
sshでログインもmakeでコンパイルもできるよ。
まずは今どきmake(コンパイル)も使えないサーバはやめて
makeできるサーバに変更をおすすめします。その方が早い。
688nobodyさん:2011/08/09(火) 21:14:37.43 ID:???
$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
これじゃだめなんですか?
689Perl忍者:2011/08/09(火) 21:19:45.72 ID:???
とっとと死ねよクソガリども
690nobodyさん:2011/08/09(火) 21:32:05.43 ID:???
>>688
置換演算子のせいだと思う
691nobodyさん:2011/08/09(火) 21:38:06.04 ID:???
++ 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>

692nobodyさん:2011/08/09(火) 21:56:14.92 ID:???
>>690 >>691
sをつければいいんですね 正規表現難しい・・・
ありがとうございます解決しました
693nobodyさん:2011/08/10(水) 09:24:22.00 ID:???
>>688
Web::Scraper 使うとラクだよ
694nobodyさん:2011/08/10(水) 11:33:10.14 ID:YwW/JKz0
bashで
array=( xx{01,02,03} )
とすると、arrayの中には xx01,xx02,xx03 という要素が生成されるのですが、
perlでも同じようなことはできないでしょうか?
695nobodyさん:2011/08/10(水) 12:59:40.29 ID:???
my @array = glob 'xx{01,02,03}';
696nobodyさん:2011/08/10(水) 13:44:32.98 ID:0CKj4BCr
glob ってそんなのにも使えるのか。。。

>>694
@array = map { 'xx' . $_ } '01'..'03';
697nobodyさん:2011/08/10(水) 14:41:56.36 ID:???
>>694
@array = map "xx0$_", 1..3;
@array = map sprintf 'xx%02d', 1..3;
698697:2011/08/10(水) 14:43:20.48 ID:???
ごめん、下は
@array = map sprintf('xx%02d', $_), 1..3;
699nobodyさん:2011/08/10(水) 14:49:31.77 ID:???
1つめは10以上が010となるから駄目じゃね?
700nobodyさん:2011/08/10(水) 14:57:18.45 ID:???
半角カタカナで質問です。

@アカアカをuriエンコードすると%B1%B6%B1%B6
A%B1%B6%B1%B6をuriデコードすると蔚蔚

となり文字が変わってしまいます。
カタカナの文字コードが%一つで表せられるためだと思うのですが、正常に変換させるにはどのようにしたら良いのでしょうか?
701nobodyさん:2011/08/10(水) 15:08:18.26 ID:???
URIに半角カナを使うな。以上。
702nobodyさん:2011/08/10(水) 15:11:12.07 ID:???
>>700
"\xB1\xB6" は Shift_JIS なら "アカ" だし EUC-JP なら "蔚"。
変換自体は正常に行われている。
703700: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;
704700:2011/08/10(水) 15:42:30.56 ID:???
>>702

うまく変換できました。
エンコードサイトでも"蔚"になることを確認してたんですが、その時にも文字コードがごっちゃになってたようです。

ありがとうございました。
705nobodyさん:2011/08/11(木) 13:49:27.54 ID:???
受信したメールからタイトルと本文を取得しようとしています。
テストでタイトルに半角カタカナを入れたのですが、
下記を実行すると全角カタカナで表示されます。
半角は半角のまま取得したいのですが、どのようにすればよいのでしょうか?

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";
706nobodyさん:2011/08/11(木) 16:13:32.80 ID:???
>>705
メールのSubjectに半角カナを使うな。以上。
707nobodyさん:2011/08/12(金) 00:31:53.40 ID:???
URL(serch.cgi?key=検索文字)こんな感じで全角文字列をいれたら全角文字でもから始まる数字でもなく???c??O??のような文字化けしてしまった
検索結果を直接そこに入れたら結果を返すようなプログラムを作りたいのですがどうやったら回避できるのでしょうか
708nobodyさん:2011/08/12(金) 00:43:58.42 ID:???
文章読み返したら色々ひどい
日本語勉強しなおしたほうがいいんじゃないか俺・・・
709nobodyさん:2011/08/12(金) 07:49:11.55 ID:???
utf8 にエンコードされて送られてるよ
710nobodyさん:2011/08/12(金) 09:34:56.83 ID:???
>>705
そのメールを他のメールソフトで受信した場合は半角カタカナで表示されるのでしょうか?
他のメールソフトで受信した場合のそのメールの生ヘッダーを見せてください。
711nobodyさん:2011/08/12(金) 11:35:01.09 ID:???
XSS対策について質問です。
タグの中にユーザーの入力文字列を含む場合、
どの文字をエスケープしておけば安全なんでしょうか?

ググったものの「<」、「>」、「&」、「"」、「'」の5種類としてあるサイトばかりなのですが、
<a href="「ここに入力文字列」">hoge</a>
こういうケースだとjavascriptを実行されてしまうのではないかと思うのですが。
できることには制限がありそうですが、こういうのも一括して完全に防ぎたいです。
712nobodyさん:2011/08/12(金) 12:16:41.67 ID:???
>>711
http://www.ietf.org/rfc/rfc2396.txt
Parsing a URI Reference with a Regular Expression

ここを見ればいけるかな?
713705: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

さはやわ
半角カタカナ。。。。。
です
714nobodyさん:2011/08/12(金) 13:35:54.26 ID:???
>>712
ありがとうございます。
あれは例に出しただけで、URI等関係なく一括して防ぐ方法は無いものかと思った次第です。

正直なところjavascriptの埋め込み方が多彩で把握し切れてないです。
hrefだけが例外なんですかね?
715nobodyさん:2011/08/12(金) 13:43:39.60 ID:???
自己解決。
これはページ内で実行してるのとは別物っぽいですね。
他にも似たようなタグがあったら怖いなーと思ってましたw
716nobodyさん:2011/08/12(金) 15:00:37.39 ID:???
>>713
ふつーに全角の「半角カタカナ。。。。。」をエンコードしてあるように見える。

暇つぶしでDoCoMo端末からPC宛てに「半角カタカナ。。。。。」で送ってみたけど
これキャリアのほうで全角変換かかってない?絵文字→〓みたいな感じで。
717nobodyさん:2011/08/12(金) 15:17:04.05 ID:???
>>713 >>716
ISO-2022-JP に半角カナ (JIS X 0201 片仮名) は存在しないので
他の文字コードで MIME エンコードしなければ
半角カナを含む Subject を正しく送れる保証はない。
718716:2011/08/12(金) 15:28:27.02 ID:???
>>717
やっぱりそこかなーと思うんよ。
キャリアが JIS X 0208 のカタカナに変えてくれてるみたい。
端末で UTF-8 + MIME-B とか選べるわけでもないしさ。

昔のMUAだと charset="ISO-2022-JP" を謳うボディに
JIS X 0201 カタカナ を混ぜられると色々崩壊したなあ。
719nobodyさん:2011/08/12(金) 16:39:32.81 ID:???
>>713
docomoは携帯電話網からインターネットへ送る際に、半角カタカナ → 全角カタカナの変換を行っている
ようなので、インターネット経由でメールを受け取る場合はあきらめるしかないですね。
720nobodyさん:2011/08/12(金) 23:52:37.17 ID:???
[status]
file1 ... success
file2 ... failed
file3 ... success

ファイル生成後の結果を ゲームなどのinit確認画面のように準に表示させたいのですが
通常すべてが終わってからバンとでますよね
どうやったら perlでも少しずつ表示させる事ができるのでしょうか?

721nobodyさん:2011/08/13(土) 01:48:13.47 ID:???
モダンなPerlでオブジェクト指向をするとしたら
何を使うのが普通なのでしょうか?
722nobodyさん:2011/08/13(土) 02:34:57.31 ID:???
プチダノン
723nobodyさん:2011/08/13(土) 11:03:35.03 ID:???
>>720
$| = 1;
724nobodyさん:2011/08/13(土) 13:27:07.63 ID:???
>>723
調べたがさっぱり・・・もう少しkwsk
725nobodyさん:2011/08/13(土) 13:36:44.01 ID:???
perlvarを見て
726nobodyさん:2011/08/13(土) 14:36:16.72 ID:???
>>725
!分かりました。ありがとうございます
727Perl忍者:2011/08/13(土) 17:21:11.33 ID:???
低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ
低レベルスレ低レベルスレ低レベルスレ
低レベルスレ低レベルスレ低レベルスレ低レベルスレ
低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ低レベルスレ
728721:2011/08/13(土) 21:44:54.73 ID:???
ですが、誰かレスお願いします。
729nobodyさん:2011/08/13(土) 21:57:43.69 ID:???
>>728
perlを使わない
730nobodyさん:2011/08/13(土) 22:00:05.80 ID:???
>>729
それ以外はありませんか?
731nobodyさん:2011/08/13(土) 22:26:28.82 ID:tZoTBnu9
Moose
732nobodyさん:2011/08/14(日) 01:51:41.43 ID:???
Perl5+オブジェクト指向であれば
Mooseが本命なのでしょうか?

での標準モジュールではないですよね・・・?

Perlは標準モジュールとしてはモダンなオブジェクト指向を
サポートしない方針なのでしょうか?
それとも将来Mooseが標準モジュールとして
採用される可能性はありますか?
733nobodyさん:2011/08/14(日) 07:30:47.02 ID:???
Mooseが標準モジュールになる事なんて有り得ない。
「モダン」ってーのは言葉づらだけで、「はやり」ってルビを振って読め。
つまり標準ってーのは流行廃りと無関係の立ち位置。
(誰が始めたんだ?このモダンって糞用語)

734nobodyさん:2011/08/14(日) 07:31:58.81 ID:???
あ、「モダン」な物全てを否定してる訳では無いよ?
735nobodyさん:2011/08/14(日) 10:01:11.90 ID:???
「モダン」になる前のPerlがあまりにもひどかったから、「モダン」とつけて線引きしたかったんだろうなぁ。
どこかに、PerlでObjectを作る際の例を何点か挙げて、比較検討してるところがあったと思うんだが、そういったとこを見て、場合によって使い分けるのが現実的ではあると思う。

が、面倒ならやっぱりMooseじゃね?
Mouseとかもあって、更には他にMooseが使われてるならMoose、Mouseが使われているならMouseを使うようにするモジュールまであったと思うんだが、そもそもそれらの遷移が早くって、一昔前のモジュールを使ってみたらこっちで使えないとかいう。。。
736nobodyさん:2011/08/14(日) 10:28:29.33 ID:???
> (誰が始めたんだ?このモダンって糞用語)
Mozillaじゃね? モダンブラウザとか言ってさw
737nobodyさん:2011/08/14(日) 11:42:59.34 ID:???
>>721
Perl5であれば素のままでオブジェクト指向プログラミングができる
モジュールに依存しないから、Perl5のバージョンを上げても大丈夫

>>733
ユニコード対応に失敗したのに気づいたときに「モダン〜」でごまか
そうとした
10年前の失敗につけた名前なのでもうモダンでも何でもない
738nobodyさん:2011/08/14(日) 12:02:18.90 ID:???
>>733
>ユニコード対応に失敗したのに気づいたときに「モダン〜」でごまか
>そうとした
>10年前の失敗につけた名前なのでもうモダンでも何でもない
まるで「ラリーが言ってる」みたいな事、書くなよ。
perl5.6の時点で既にperl6 の構想自体はあったのに、
perl5.6をモダンなんて持ち上げる訳が無い。
739nobodyさん:2011/08/14(日) 12:18:38.54 ID:???
モダンな実装とモダンなコーディングとモダンなモジュールとはそれぞれ別に考えたほうがよくないかな
740nobodyさん:2011/08/14(日) 12:27:01.17 ID:???
>>739
それはいいアイディアだ。
つまり、>>721の求める「モダンなPerlのオブジェクト指向」というのが何を指しているのか?ってところだな。

テストが無いのがレガシーって考え(?)なんてのまであるらしいから、はっきり決めないと収束しないべ
741Perl忍者:2011/08/14(日) 12:27:20.49 ID:???
モダンとかカジュアルとかまじやめてくれねえかな
死んでください
742nobodyさん:2011/08/14(日) 14:01:27.05 ID:???
Perl忍者とか生きてんのまじやめてくれねえかな
死んでください
743nobodyさん:2011/08/14(日) 14:20:08.26 ID:???
モダンがどうとかどうでもいいが、
少なくともnewかいてblessがどうとか
そういう話をするのは見苦しい。

オブジェクト指向のやり方を使ってアプリを作りたいのであって
オブジェクト指向の仕組みを作るのが目的じゃないんだから。
744nobodyさん:2011/08/14(日) 15:12:51.39 ID:???
無理してperl使う必要無いよ?
745nobodyさん:2011/08/14(日) 15:14:26.15 ID:???
他の人がPerlばっかり使っていて
そう決まっているから仕方ないのです。
746nobodyさん:2011/08/14(日) 15:14:44.89 ID:???
Moose万歳の人は、同数以上のMooseに批判的、否定的な人がいると
言う事に気付かないのか?
747nobodyさん:2011/08/14(日) 15:23:26.68 ID:???
Mooseを批判している人は
何を使ってるの?

単にオブジェクト指向が理解出来ないだけ?
748nobodyさん:2011/08/14(日) 15:29:11.49 ID:???
??意味不明
Moose はどうでもいいけど。
普通に new, bless 使ってコード書きゃいいだけだろ。

749nobodyさん:2011/08/14(日) 15:31:33.93 ID:???
>>748
それを楽に書く書き方がMooseってだけなんだが、
なんでMooseを批判しているの?

面倒なことをやりたいだけ? ドM?
少し勉強するだけで、簡単にかけるのに
単に勉強嫌いか頭が硬くなっただけじゃない?
750nobodyさん:2011/08/14(日) 15:40:11.97 ID:???
「標準モジュールに無いモジュールを使われて、それを
標準モジュールオンリーのスクリプトにリライトする」
仕事をした事があった上で、その意見を言えるなら尊敬するわ、俺。

個人的にMooseを弄らなくも無いが、怖くて仕事には使えん。
751nobodyさん:2011/08/14(日) 16:00:00.46 ID:???
なんか暑くいや熱くなってるところ申し訳ないが質問があるます

my $res = $ua->get( qq($url) );
これで取得した検索結果になぜかだぶりが出てしまって困っています。
実際のWEBで見るとそんな現象はおきないので 何かしらの設定不足があると思うのですが・・・
752nobodyさん:2011/08/14(日) 16:01:51.92 ID:???
>>758
俺なら、標準モジュール以外を
使わないと決めたやつをぶん殴るわw


これがもしC++ならBoostは使わないってことだし。
JavaならSpring、SeasorなどのDIコンテナを使わないってことだし、
C言語だと、ネットワーク通信すらできないな。
753nobodyさん:2011/08/14(日) 16:02:16.82 ID:???
「窓の手入れたら色々捗るよ!」
「会社のPCに、んなモン入れられるか、どアホウ!」
754nobodyさん:2011/08/14(日) 16:03:20.51 ID:???
「窓の手入れたら色々捗るよ!」
「会社のPCに、んなモン入れられるか、どアホウ!」
「じゃあカスタマイズしたい時はどうするんだよ。」
「窓の手を自作すればいいじゃないか!」
755nobodyさん:2011/08/14(日) 16:04:01.99 ID:???
そして車輪の再発明を
行い続けましたとさ。

おしまい
756750:2011/08/14(日) 16:04:20.31 ID:???
>>752
もちろん必要なら許可は出る。
Mooseみたいなwrapper+αには許可は出ない。

Inline::CでCコードが埋め込んであったスクリプトを
perlに書き換えた時は地獄だった。
757nobodyさん:2011/08/14(日) 16:06:35.03 ID:???
あるあるw

他人が作ったライブラリを信用しないで
全部オレオレライブラリを自作する会社w

でそういうのは大抵質が悪いし機能も少ないし、
会社専用の知識だから、外部での経験もいかせないし、
技術者も育たないし、どんどん腐れていくんだよな。
758nobodyさん:2011/08/14(日) 16:07:50.49 ID:???
>>756
> 「標準モジュールに無いモジュールを使われて、それを
> 標準モジュールオンリーのスクリプトにリライトする」

あれ? そういう仕事じゃなかったのですかw
嘘だったんですか?
759nobodyさん:2011/08/14(日) 16:09:05.65 ID:???
>>756
> Mooseみたいなwrapper+αには許可は出ない。

そこに正当な理由がないことに気づかないのか?
760nobodyさん:2011/08/14(日) 16:10:07.20 ID:???
ま、お偉いさん(笑)決めたルール。

実は「俺が理解出来ないものは使わん」が
理由だとしても、それに逆らう勇気もなし。
761751:2011/08/14(日) 16:17:26.24 ID:???
だれか、ヒントでもいい!たのむ!
762nobodyさん:2011/08/14(日) 16:17:37.23 ID:???
めんどくさいんで、>>760の言う通りと言う事で。
ちゅーかこっちは、科研費で生きてるからボスの言う事には
逆らえんし、先人のスクリプトを他のサーバに移すからと言われれば
ハイハイと言わざるを得ん。
763nobodyさん:2011/08/14(日) 16:20:44.40 ID:???
うん。だろうねw

ダメな上につく下っ端

の現実の話だったってことが
わかって皆満足さw
764nobodyさん:2011/08/14(日) 16:23:29.15 ID:???
つか、Perlの標準モジュール = cpanモジュールって知らないのかな?
(Mooseもcpanモジュール)

他の言語に比べて標準である価値は低いし、
平気で互換性がない変更をしてくる。

仕事で使うのが怖いというのなら、
Perlそのものが怖いわw
765nobodyさん:2011/08/14(日) 16:31:39.39 ID:???
>>764
何拡大解釈してんだアホウ。
煽りたいのは勝手だが、perldoc perlmodlib に standard module の項目は
きちんと書いてある。

煽りまくりで楽しいのは分るが、妄言を吐いてまで煽る意味があんの?
766nobodyさん:2011/08/14(日) 16:37:37.82 ID:???
>>765
え? Perl以外使えないの?
767nobodyさん:2011/08/14(日) 16:41:05.35 ID:???
768nobodyさん:2011/08/14(日) 17:15:45.52 ID:???
>>751
$uaってのがなんだかわからんのに答えられないと思うが

ダブりがあるってならその「ダブり」をキーにして、grepでハッシュに登録してけばいいんでね?
769nobodyさん:2011/08/14(日) 17:16:52.95 ID:???
あぁ。変なレスですまなかったがgrepじゃなくてmapだったな。最初別の事考えたんで混乱した。
770nobodyさん:2011/08/14(日) 17:32:27.60 ID:???
行き当たりばったりの適当な対応提案すんな。
それだといろいろやってたまたま動いたら、
それでOKみたいな学生レベルと一緒だろ。
771nobodyさん:2011/08/14(日) 18:56:06.61 ID:???
$ua は LWP::UserAgent のインスタンスだろうと思うが、
$url の中身が示されてないし「これで取得した検索結果」と言われても不明なので誰も検証できません。
772705:2011/08/14(日) 22:52:43.69 ID:???
>>716-719

docomoが勝手に全角にしてるんですね。。
絵文字の〓と同じ対応か。
勉強になりましたありがとうございます。
773751:2011/08/14(日) 23:12:15.22 ID:???
レスありがとうございます。
>>768
把握
>>771
そこは教えられないんだすまない
同じ検索結果なのにブラウザで見るのとperlから見るので違うなんてありえるの?
774nobodyさん:2011/08/14(日) 23:13:55.42 ID:???
だぶりって、なに?
775nobodyさん:2011/08/14(日) 23:51:56.87 ID:???
実際におきてるんだからあるんだろ

それか手前のスクリプトが糞なだけか
776751:2011/08/15(月) 00:16:40.34 ID:???
>>775
後者の可能性が高そうな気がしてきた
777751:2011/08/15(月) 00:28:29.15 ID:???
自己解決しました
調べて見たら俺の単純なミスだった事が分かった
変数の初期化を忘れて、予期せぬ値を読み込んでいたのが原因でした。
778nobodyさん:2011/08/15(月) 00:42:07.92 ID:???
モダンってゆうのは結局「今」ってこった
「今」に縛られてると永く持つコードかどうかは怪しくなる

だからオレとしてはモダンかどうかよりも長持ちするコード
を優先する
自分で作る場合でも、他の人のを使う場合でも

流行りを煽る物書きもいるけど、そこは冷静に判断する目が
必要

779nobodyさん:2011/08/15(月) 00:51:49.31 ID:???
>>738
perl5.6の時点で既にperl6 の構想自体はあったのに、

実在しないのにモダンとなw
780nobodyさん:2011/08/15(月) 01:44:11.06 ID:???
>>778
> モダンってゆうのは結局「今」ってこった

いや、そんなの辞書引けば書いてるし・・・

> だからオレとしてはモダンかどうかよりも長持ちするコード
> を優先する

世の中に長持ちするコードなんて無いよ。
お前が長持ちすると思っているコードは、
全時代に「モダン」だったコードだ。

少し先の時代まで持ち越そうと思ったら
「今」のコードで書かないといけない。
781nobodyさん:2011/08/15(月) 06:01:45.61 ID:???
>世の中に長持ちするコードなんて無いよ。
何の為にコーディング規約があると思ってんだ?
それともコーディング規約が架空の物だと思ってる人?
782nobodyさん:2011/08/15(月) 06:47:56.86 ID:???
あんた、それ、ニートに「社内規則ってあるでしょ?」って言ってる様なもん。
通じないよ。
783nobodyさん:2011/08/15(月) 08:44:52.82 ID:???
忍者うぜえ
784nobodyさん:2011/08/15(月) 15:03:30.84 ID:???
例えば子供がいっぱい集まってプログラミングをやってるスレがあったとする
それは誰かに主導されるわけでもなく何となく集まって来て自然にルールも出来て適当にコード書いて見せ合うって言う社会の常識みたいなのがある

そこに急に大人が介入してきてこれからこういう書き方にしよう コーディングはこう言うのが凄いからこれにしなさい。できたチームには入社させてあげるから 子供達は純粋に楽しいだろうか?
入社に釣られてムキになったり変な亀裂が生じたり色んな問題が出てくる
子供達からルールの設定とかを頼まれたならまだしも行きなり表れて仕切り始める

しかもその仕切り始めた大人達は子供達にこう言う本を買ったらプログラミングが上手くなるよとかの宣伝をするのが真の目的だったと

これが今からモダンPerlがやろうとしてる事
785Perl忍者:2011/08/15(月) 15:04:09.12 ID:???
例えば子供がいっぱい集まってプログラミングをやってるスレがあったとする
それは誰かに主導されるわけでもなく何となく集まって来て自然にルールも出来て適当にコード書いて見せ合うって言う社会の常識みたいなのがある

そこに急に大人が介入してきてこれからこういう書き方にしよう コーディングはこう言うのが凄いからこれにしなさい。できたチームには入社させてあげるから 子供達は純粋に楽しいだろうか?
入社に釣られてムキになったり変な亀裂が生じたり色んな問題が出てくる
子供達からルールの設定とかを頼まれたならまだしも行きなり表れて仕切り始める

しかもその仕切り始めた大人達は子供達にこう言う本を買ったらプログラミングが上手くなるよとかの宣伝をするのが真の目的だったと

これが今からモダンPerlがやろうとしてる事
786nobodyさん:2011/08/15(月) 15:24:55.39 ID:???
雑談でやれクソ共 (o^∀^o)
787nobodyさん:2011/08/15(月) 16:18:29.93 ID:???
例えば子供がいっぱい集まってプログラミングをやってるスレがあったとする
それは誰かに主導されるわけでもなく何となく集まって来て自然にルールも出来て適当にコード書いて見せ合うって言う社会の常識みたいなのがある

そしてそれがMoose


以上で話は終わりだろ。
何をグダグダ言ってるんだ?
788nobodyさん:2011/08/15(月) 17:14:16.27 ID:???
子供たちがボールを蹴って遊んでいる。

そこにプロがやってきてプロの業を披露する。


あとは、そのテクニックを自分も身につけようと
どんどん成長していくか、
ボールけって遊んで終わりになるかの違い。
789nobodyさん:2011/08/15(月) 21:21:12.68 ID:???
今使っているテンプレートエンジンはHTML::Templateなのですが、
みなさんテンプレートエンジンはどういったモジュールを使っていますか?
他のものに変えようか迷ったので参考にさせて下さい。
790nobodyさん:2011/08/15(月) 21:51:05.33 ID:???
Perl 5 今昔
前は王道だったあの書き方も最近ではこうかな、というもの集です。

http://perl-users.jp/nowpast.html
791nobodyさん:2011/08/15(月) 23:27:11.16 ID:???
プログラミングを重視する
・書き捨てていくことで生計が成り立つ
・書き換えることが実入りになる
→モダンに乗っかる必要がある

プログラムを重視する
・永く使えるコードを書く
・書き換えることが出銭になる
→モダンに乗ってはいけない

目指すところが正反対なら議論はかみ合わないんじゃ

ま日雇いといっても、俺くらいの格にもなれば週払い
なんでそんなこと気にとめなくなるがな
792nobodyさん:2011/08/15(月) 23:57:14.65 ID:???
>>790
…そのURL、単に個人の主観が連ねてあるだけ。

Templateなんて、リリース時期で言えば HTML::Templateと
1年しか違わず、HTMLやらない人間にとっては昔から王道もいいとこ。
HTML::Templateと棲み分けが違ってただけだ。
793nobodyさん:2011/08/16(火) 00:36:44.71 ID:???
あのー、初心者なんでひとつ質問していいですか?

モダン、モダンって言ってるひとはどうしてモダンを流行らせたいんですか?
流行らせようとしているひとは何か得するんですか?

エバンジェリストになりたいってことで合ってますか?
どうせオメーラわかんねーだろーってことですか?

そうですか、分かりました
794nobodyさん:2011/08/16(火) 00:43:42.15 ID:???
>全時代に「モダン」だったコード

これは長持ちしそうですね
795Perl忍者:2011/08/16(火) 07:55:32.31 ID:???
>>793
一人で質問して納得しててきもちわるいよ
それ質問自分でして回答終わらせてるな
きも
早く死ね
796nobodyさん:2011/08/16(火) 08:38:18.24 ID:???
>>793
モダンは流行らせたいんじゃなくて、
主に上級者の間で、流行っているやり方だよ。
797nobodyさん:2011/08/17(水) 00:06:44.16 ID:???
ちぇー'з'
やっぱり初心者おとこわりか.
798nobodyさん:2011/08/17(水) 01:23:43.30 ID:???
×初心者おとこわり
○諦めた奴が初心者
799nobodyさん:2011/08/17(水) 06:48:00.61 ID:???
モダンって騒いでるのは、一部の牽引連中を除き
ttp://d.hatena.ne.jp/naoya/20050809/1123563794
のレベル6クラスの連中だろ。自己評価はレベル8とかの。

「CPANディストリビューターだから!」
upしたのはAcme::だけw
800nobodyさん:2011/08/17(水) 21:32:38.15 ID:???
>>799
CPANコミュニティ参加は、技術とは別の意味で敷居が高いとして、
DBIやCGI.pm使ってる程度でいいのなら簡単にレベル8行くんじゃない?

そこに書いてあるMethodMakerは古いけど、
今で言うならMooseの機能劣化版みたいなものだし。

自分は他の言語をやっていたけど、Perlは本格的に仕事でやり始めて一年半ぐらい。
シンボルテーブルの操作もやってるからレベル9に足突っ込んでるレベルなのかな。

もちろんPerlカンファレンスとかには参加してないけどw

他の言語(オブジェクト指向)をやっていたものからすると
モダンPerlレベルじゃないとPerlは実用レベルとは認められないな。
オールドPerlは単純にクラス作って真っ先に書かせられるnewとblessの関数が面倒。
801nobodyさん:2011/08/17(水) 23:18:31.33 ID:???
そのレベルの全ての条件を満してから、そのレベルを名乗れ。
802nobodyさん:2011/08/17(水) 23:33:07.75 ID:???
まさに
>のレベル6クラスの連中だろ。自己評価はレベル8とかの。
を体現してみせたレス
803nobodyさん:2011/08/18(木) 01:58:10.63 ID:???
いやw 別にこんなののレベル付けになんて興味はないからw
どうせあとはPerlコミュニティに協力するという
技術とは関係ない部分だし。

ただ、MethodMakerやDBIがレベル8や9って
バランスおかしくない? これぐらいは中級者レベルでしょ?
804nobodyさん:2011/08/18(木) 05:41:05.11 ID:???
興味津々じゃねーか。その割には文章読解力が壊滅的だけど

perlコミュに協力 = それだけの技術力の裏付けがある
×MethodMakerを使う -> ◯などの開発者向けモジュールを使い始める
×DBIを使う -> ◯複雑なアプリケーションモジュールを適宜使用
×CGI.pmを使う -> ◯Web ベースのアプリケーションを作成する

ググれば解説もどきが氾濫してるご時世なんだから
使うだけだったら、中級者どころか超初心者でも使うだろ
805nobodyさん:2011/08/18(木) 05:43:45.95 ID:???
主眼では無いって意味で×書いた
×じゃなくて△の方が意味が通ったな
806nobodyさん:2011/08/18(木) 08:55:34.01 ID:???
とりあえず、どっかのpmのIRCで会話出来てから出直してくるといいんでね?
807nobodyさん:2011/08/18(木) 14:34:10.45 ID:???
crypt()は暗号化のみのようなのですが、
pureperlな暗号/複合ができるモジュールで一般的なものはどういったものがありますか。
参考にしたいだけなので主観で構いません。

一応下記は見つけたのですが、モアベターなものを使いたいです。
ttp://search.cpan.org/author/MATTBM/Crypt-Blowfish_PP-1.12/
808nobodyさん:2011/08/18(木) 16:56:58.65 ID:???
multipart/form-dataで送られたデータを受け取るのにいい方法はないでしょうか

CGI::Lite;を使おうと2日間試行錯誤したのですが、特定のデータを送られると
if ($current_buffer =~ /(.*?)(?:\015?\012)?-*$boundary-*[\015\012]*(?=(.*))/os) {
の辺りで固まってしまうようです。

CGI::Lite;くらいの小さいモジュールか、コピペできるコード無いでしょうか?
一括してハッシュ形式+ファイルは保存できるものが希望です。
809nobodyさん:2011/08/18(木) 17:47:38.25 ID:???
Unicode::Japaneseでz2hを使いたいのですが、
文字コードは変換前sjis→変換後sjisにしたいです。

どのようにすればよいでしょうか?
810nobodyさん:2011/08/18(木) 21:46:01.48 ID:???
前も後もsjisならJcodeを使ったほうがよくね?
811nobodyさん:2011/08/18(木) 21:46:44.52 ID:???
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;のまんまでした。
812nobodyさん:2011/08/18(木) 21:49:05.95 ID:???
そして確認画面を作る場合は入力して送信したデータを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;を増やせば上手くいきました。
どこか違っているところはありますか?
813nobodyさん:2011/08/18(木) 22:48:30.04 ID:???
>>811
根本的なことだが、
<input type="hidden" name="aaa" value="&gt;" />
ってのは、hidden だろうが text だろうが、input でなく select/option だろうが、
初期値が > のインプットフォーム aaa を描画(hidden なら見えないが)するという意味
つまりブラウザがレンダリングする時点ですでに &gt; でなく > になってるってことだ
送信の時に何か特別な処理がされるわけじゃない
このへんがわからないなら Perl 関係ないから HTML の質問スレとかで聞け

変換処理についての話をするなら、
HTML に埋め込む時(普通に表示する時と input の値にする時)だけ &gt; とかに変換することにして、
それ以外の時は変換しない(データの保存やらは > とかのまま)ということにするのが一番簡単かと思う
814nobodyさん:2011/08/18(木) 22:49:41.57 ID:???
jcodeかnkfで日本語・英語以外に対応できますか?
815nobodyさん:2011/08/18(木) 22:56:24.69 ID:???
>>811-812
根本的なことだが、テンプレートエンジン(Template Toolkit等)とFillInFormと
フレームワーク(CGI::Application、Catalyst等)を組み合わせて作るから
そんなつまらないコードは書いていない。
816809:2011/08/18(木) 23:29:42.23 ID:???
>>810

助言ありがとうございます。
肝心の部分を間違えていました。

変換前sjis→変換後sjis ×
変換前jis→変換後sjis ○

変換前がsjisではなくjisでした。
ここ見ると
ttp://search.cpan.org/~hio/Unicode-Japanese-0.36/lib/Unicode/Japanese/JA.pod

こんな感じのことをしたいのですが。↓

$unijp = Unicode::Japanese->new();
$unijp->set($str,'jis');
$unijp->sjis;
$unijp->z2h->get;
817nobodyさん:2011/08/19(金) 00:32:24.71 ID:???
>>808
CGI::Lite ってずいぶん昔にメンテ止まったきりじゃなかったっけ?
ttp://perldoc.jp/docs/modules/CGI-Lite-2.001-emergencyrelease/Lite.pod
↑ここの最下を参照。
現在2.02みたいだけどなんとなく最小限のメンテしかされてなさげ。

どうしても小さいモジュールじゃないとダメなの?
素直にCGIモジュール使っとくのが無難じゃないかと思うけど。

# その昔、リソースの不足気味な環境下でCGI::Liteを使ってみて
# ヒドい目にあったことがあるんだよな…
818nobodyさん:2011/08/19(金) 00:55:50.61 ID:???
ネットにあるPerlの情報古いからね。
今時Jcodeとかアホみたい。

だからモダンPerlなんて用語ができるんだよ。
わざわざモダンと言わなければ、
ネットのPerlが古いとわからない。
819nobodyさん:2011/08/19(金) 02:12:29.52 ID:???
モダン小飼
820nobodyさん:2011/08/19(金) 02:44:46.80 ID:???
jisからsjisに変換するためにUTF-8に回り道する必要がない
jcode.pl、あるいはモダンこだわるならjacode.plでもよし
jacode.plならわずらわしい警告が表示されないので便利
821nobodyさん:2011/08/19(金) 03:49:07.87 ID:???
でも今は、だいたい内部をUTF-8にするでしょ?
822nobodyさん:2011/08/19(金) 04:13:59.57 ID:???
文字列として加工する必要がないんだったら
単にナマのコードとして扱えばいいだけだしょ。
JIS→UTF8→SJISだと2回、テーブルを引きながら変換する必要があるけど、
JIS→SJISだとテーブルを引くまでもなく1回計算するだけでコード変換できちゃう。

…あれ? テーブル引いた方が速いか?
823nobodyさん:2011/08/19(金) 08:26:00.62 ID:???
JIS→UTF8→SJISだと問題の発生しうる箇所が2箇所
JIS→SJISだと1箇所
初心者スレなんで、とりあえず1箇所のほうを薦める
824809:2011/08/19(金) 10:00:23.02 ID:???
>>820-823

ありがとうございます。

>JIS→UTF8→SJISだと問題の発生しうる箇所が2箇所
>JIS→SJISだと1箇所
>初心者スレなんで、とりあえず1箇所のほうを薦める

この場合の一か所の方法はどのような方法になりますでしょうか?
825nobodyさん:2011/08/19(金) 11:49:25.74 ID:???
ちゃんと jacode.pl を入手したか?
826nobodyさん:2011/08/19(金) 11:50:43.51 ID:???
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.送信ボタンを押す
------------------------------------------------------------

以上、よろしくお願い致します
827nobodyさん:2011/08/19(金) 11:55:00.84 ID:???
変換効率とか余計なことを考えずに Unicode::Japanese を使っとくのがスマートで無難かもね。
ttp://d.hatena.ne.jp/dayflower/20060530/1148951624
828nobodyさん:2011/08/19(金) 12:43:51.18 ID:???
文字列比較について質問です

$name=",";
$FORM{'name'}="&#8218;"; #入力された名前

if($name eq $FORM{'name'}){

print "その名前は既に使われています";

}
else{

print "その名前は使われていません";

}

&#8218;は,として表示されるので
実体は違う名前でも表示は同じ名前になってしまうので、その名前は既に使われていると表示させたいです。
でもその名前は使われていませんとなってしまいます。

,の場合だけではなく全ての&#○○○○;を実体に変換して比較できればいいのですが、何かいい方法はないんでしょうか?
829nobodyさん:2011/08/19(金) 12:58:31.29 ID:???
そりゃすべての&#xxxx; を変換してから比較するしかないべや。
便利なモジュールや注意点については自分でググれ。
「perl 実体 参照 変換 モジュール」あたりで。
830nobodyさん:2011/08/19(金) 13:39:52.05 ID:???
数値文字参照(&#○○○○;)の他にも実体文字参照(&アルファベット文字列;)もあるから
名前の入力には半角の&と#は禁止するしかない
831nobodyさん:2011/08/19(金) 15:24:25.10 ID:???
名前に記号が含まれる事は無いしな
ハンネはともかく・・・
832809:2011/08/20(土) 11:07:15.93 ID:???
>JIS→SJISだと1箇所
の方法で

require 'jacode.pl';
while (defined($s = <>)) {
&jcode'convert(*s,'sjis','jis');
print $s;
}

でうまく変換できました!ありがとうございました!
833809:2011/08/20(土) 11:58:32.45 ID:???
(初心者なので h は今度教えてください)
834nobodyさん:2011/08/20(土) 14:00:08.35 ID:???
ユニコード文字をフォームに入力してファイルに書き込むときの質問ですが

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とかいうの使わなくても一応上のやり方で
フォームから送信したデータ取得して(&#形式になるが)
書き込んで表示できたんですがこれでは問題がありますか?
835nobodyさん:2011/08/20(土) 21:09:16.64 ID:???
>>832
>&jcode'convert(*s,'sjis','jis');
perl4の記法を素で書く奴、久々に見た…

jacodeの方で、perl5記法サポートを謳ってるんだから、
perl5記法で書けよ。
jcode::convert \$s, 'sjis', 'jis';


…ちなみにperl4の最終リリースは1993年。
836nobodyさん:2011/08/20(土) 22:17:59.43 ID:???
>>835
それを言うくらいならまず直で Encode 使えよって話だけどな。
jcode.pl は言うまでもなくすでに過去のものだし、
そのインターフェースを引き継いだ jacode とかいうのにしたって所詮バッドノウハウでしかないんだから。

つか>>832のそれは ttp://search.cpan.org/perldoc?jacode.pl の SAMPLES のコピペだな。
837nobodyさん:2011/08/20(土) 22:40:52.13 ID:???
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のラッパである事は置くにしても)
838nobodyさん:2011/08/20(土) 23:06:43.89 ID:???
初心者はEncodeのドキュメントの洪水におぼれて終わる
うまいことおぼれなかった場合は今度はutf8フラグの
餌食になって終わり

jcode.plではそんなことはない

Encodeはどうしたって中級者以上のスキルがないと使えない

839nobodyさん:2011/08/20(土) 23:18:01.69 ID:???
Perlにおける「車輪の再帰的改良」の実例

jcode.pl→Jcode.pm→Encode.pm→Jcode.pm(2.0)→jacode.pl

※マジレスしない

840nobodyさん:2011/08/21(日) 00:49:50.58 ID:???
> jcode.plではそんなことはない

ただし、Unicode文字列を正規表現で扱いたくなったり
バイトではなく文字数単位で計算したくなったら
面倒なことになる。
841nobodyさん:2011/08/21(日) 01:01:54.75 ID:???
このさい条件を限定して考えてみよう。

初心者もいつかは成長する。
jcodeもEncodeもどちらも簡単に使えるようになる。

Perlはもはや保守だけ。JavaやRubyに移行中。新システムを作ることはない。
だから既存のjcodeコードをいじるだけでいい。
そういう人は答えが出てる。今使っているものだけを使えばいい。
初心者なら逆に0から作るって人もいるだろう。

だから何も無いところからアプリを作るとき
jcodeもEncodeもどちらも楽々出来る人は
どちらを選ぶのか、その理由を語りましょう。

俺の意見は、 標準モジュールかつ日本語以外も
対応しているからEncodeモジュール一択。どや?
842nobodyさん:2011/08/21(日) 01:06:14.46 ID:???
>>838
> Encodeはどうしたって中級者以上のスキルがないと使えない

お前は中級者以上だからEncode使えるんだよな?w

初心者はお前以上のスキルを目指したらあかんの?w
843nobodyさん:2011/08/21(日) 03:25:42.41 ID:???
どうもこんばんわ
perl使ってHTMLを作ろうとした際にエラーが出て困っています
print qq(<HTML><head><title>テスト用ページ</title></head><html>);
print qq(<HTML><head><title>テスト用ペ\ージ</title></head><html>);
としてもエラーで動いてくれないんですが回避する方法はありませんか
844nobodyさん:2011/08/21(日) 04:04:16.34 ID:???
>>843
まず文字コードとしてUNICODEを使うようにしましょう。
それが現在の標準です。

その後にテンプレートエンジンについて勉強しましょう。
これも今の標準的なやり方です。
845nobodyさん:2011/08/21(日) 04:21:32.95 ID:???
Content-Type 吐かないとエラー出るよとエスパーしとけばいいのかな。
846nobodyさん:2011/08/21(日) 04:26:51.46 ID:???
die するとサーバーのエラーログに残りますが、
スクリプトを終了させずにエラーログに残す場合はどうやるんでしょう?
847nobodyさん:2011/08/21(日) 04:27:50.04 ID:???
あっ、STDERR に出力したら出来た。
面汚し失礼←
848nobodyさん:2011/08/21(日) 05:31:46.32 ID:???
その矢印は突っ込めという意味なのか
849nobodyさん:2011/08/21(日) 11:21:19.71 ID:???
日本ではEncodeの資料が豊富にあるが、アメリカでは
そうではなく、Encodeが使われることはまずない
(それは需要がないせいかもしれない)

数年前、Larryの肩越しにディスプレイを覗いたとき、
あわてて両手で隠されたことがあったっけ
どうやら覚えた漢字を表示させようとしていたらしい
Encodeを使おうとしてたみたいだけどよく見えなかった

その後、彼はEncodeについて多くを語ろうとしない

850nobodyさん:2011/08/21(日) 11:37:28.70 ID:???
Larryカワユス
851nobodyさん:2011/08/21(日) 11:47:59.97 ID:???
つまらんネタ
852nobodyさん:2011/08/21(日) 11:59:58.98 ID:???
> アメリカでは
> そうではなく、Encodeが使われることはまずない

だが、アメリカにnkfもjcodeもないだろ?
じゃあ何使ってるのさ?

それいうのなら単に多言語化してない。
Unicodeも使ってない。の間違いじゃねーのかw
853nobodyさん:2011/08/21(日) 12:22:24.41 ID:???
半角カタカナで送信すると文字化けするのが困っていましたが
jcode.plのconvertを使わないだけで解決しました
854809:2011/08/21(日) 12:26:40.02 ID:???
jcode::convert \$s, 'sjis', 'jis';

を試したところ、エラーになったので原因を調べたら
学校のperlはperl4でした

Unicode::Japaneseが使えない理由もこれでわかりました
あとz2hは

&jcode'convert(*s,'sjis','jis','h');

にしたらできました
自分で調べてもなかなか役に立つ資料がなくて、このスレの
助言がなかったら絶対できなかったと思います

本当にありがとうございました☆
855nobodyさん:2011/08/21(日) 12:31:51.05 ID:???
>>834
ユニコード文字の送信書き込みは、書き込みファイルがANSIの場合
ブラウザが自動で&#にしてくれるから
perlでユニコードのデコードを考える必要はないよ
856nobodyさん:2011/08/21(日) 12:38:55.75 ID:???
>>854
初心者スレだから、当たり前のことでもちゃんと教えてあげるよ。

perl4はすでにサポートも終了していて
世間で使っているところは皆無。
20年近く前に更新されていない。

現在標準のPerl5とは互換性もかなり失われて、
オブジェクト指向もサポートされていない。

学校でそれしか使えないのなら、ご愁傷さま。
だがそれが許されるのは高校までだろう。
現実に出ればPerl5ばかりなので、初心者が
今手を出すと逆に損をするバージョンだ。
857nobodyさん:2011/08/21(日) 13:46:42.76 ID:???
>>854
何で書かなくても良い事を書くかねえ?
>学校のperlはperl4でした
1993年最終リリースで、今のmakeできちんとコンパイル出来るか
どうかも分らない代物だぞ?それが、学校で入ってるもんか?
(個人で学校のPCに入れたなら、そもそもこの質問をするレベルの人じゃないし)

↓の595からの流れを思い出した。
ttp://www2.atpages.jp/mirror/2ch/perl/prog/read.php/1157874614/590-611

makeしてみたい人用
ttp://www.cpan.org/src
ttp://www.cpan.org/src/unsupported/
858nobodyさん:2011/08/21(日) 15:10:32.38 ID:???
10年以上更新もメンテもされてないサーバにログインして作業するしかないような
超貧乏学校だったらひょっとしたらあるかもしれんね。
でもそんなふざけた学校は嫌だな。
859nobodyさん:2011/08/21(日) 15:33:29.91 ID:???
初心者に環境を聞くと

「近くに山があります。」

みたいなことになるので、オレは聞かない。

その代わり、どんなコンピュータ環境でも動作しそうな回答を
した方が前に進む。

モダンは○○○だからとか、標準は□□□だとか、普通ユニ
コードだとかをどや顔で語っても、今困ってて、何かを解決しよう
としている初心者にとって何の役にも立たない。

誰だって、初心者だったときがあったのだから。

860nobodyさん:2011/08/21(日) 15:54:24.70 ID:???
初心者スレで質問すると、
そこにいる初心者が答えるので、俺は聞かない。

また自称中級者(笑)が初心者ならこの程度まで
そこから出てくるなと、言わんばかりの書き方の
押し付けをしてくるので俺は聞かない。

>>859のような奴なw

初心者に答えを聞いたところで
まともな答えが帰ってくるわけがない。
861nobodyさん:2011/08/21(日) 16:40:19.06 ID:???
と、初心者が語っております。
862nobodyさん:2011/08/21(日) 16:56:43.47 ID:???
ほらねw
863nobodyさん:2011/08/21(日) 18:09:57.34 ID:???
>>858
perlなんてただで手に入るのに貧乏とか関係ないだろ
864nobodyさん:2011/08/21(日) 18:15:09.66 ID:???
そういう馬鹿を装った釣りはおもしろくないです
865nobodyさん:2011/08/21(日) 19:09:46.77 ID:VFxGIRsL
サブルーチンについてだけど
&で呼び出すのと::で呼び出すのはどう違うのか教えてください
866nobodyさん:2011/08/21(日) 19:47:36.27 ID:???
>>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);
}
867nobodyさん:2011/08/21(日) 20:12:01.10 ID:???
>>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); )

全然概念が違うので違いもへったくれも語れない。
アプリケーションとパスの違いを教えてくださいと言ってる様なもん。

868nobodyさん:2011/08/21(日) 21:40:47.62 ID:???
全然概念が違うというが、
違う理由が書いてないなw
869nobodyさん:2011/08/21(日) 21:42:26.01 ID:???
2, 3行目が読めないのか?
870867:2011/08/21(日) 21:48:23.45 ID:???
書き方が悪かった。
元のレスは、

###################
&はまんま、サブルーチンの呼び出し法の一つ
::は名前空間へのアクセスの為の区切り文字(列)
全然概念が違うので違いもへったくれも語れない。
アプリケーションとパスの違いを教えてくださいと言ってる様なもん。
###################

それだけでは不親切(つか866氏のレスをその時に見た)なんで、
具体例を真ん中に挟んじまった。
混乱させたか?
871nobodyさん:2011/08/21(日) 22:03:25.50 ID:???
っつか、::なんてPHPでもC++でも見かけるから殊更説明つけるような事なかったんじゃね?
PHPerならともかく、Perl一筋なんて奴は普通見かけないから
872nobodyさん:2011/08/21(日) 22:23:43.70 ID:???
貴方の既知が他人の既知とは限らない
貴方の周辺が他人の周辺と同一構成とも限らない
873nobodyさん:2011/08/21(日) 22:36:44.12 ID:???
874nobodyさん:2011/08/22(月) 13:17:50.41 ID:???
ヒヤドキュメントの中でif文などの処理はできないんですか?
875nobodyさん:2011/08/22(月) 16:36:22.30 ID:???
eval 使えば?
876nobodyさん:2011/08/22(月) 16:58:01.55 ID:???
>>874
@{[do{ ここにPerl構文を書く }]}

my $is_male = 1;

print <<STRING;
I am a
@{[do{
if( $is_male ) {
"BOY!!";
} else {
"GIRL!!"
}
}]}
STRING
877nobodyさん:2011/08/22(月) 23:31:40.17 ID:???
>>876
これを見難いと思うようになれば一人前。


半人前はなんでも一発でやろうとする。
878nobodyさん:2011/08/23(火) 00:38:44.27 ID:???
TreeBuilderで、
<div class="onajinamae">
<div class="onajinamae">
</div>
</div>
上記の内側のdivだけヒットさせたいんですが、イカすやり方ないですか?
配列入れて〜っていうならできるんですが。
879nobodyさん:2011/08/23(火) 00:43:04.77 ID:???
TreeBuilder


ってなに?
880nobodyさん:2011/08/23(火) 13:42:37.75 ID:???
>>817
遅くなってすみません、ありがとうございました。
CGIモジュールと結構コード違うなーと思ってたんですが止まってたんですね。
仕方ないので自前で書いてみますー。
881nobodyさん:2011/08/24(水) 03:09:36.43 ID:???
自前で書くとか馬鹿じゃね?

初心者は自前で書こうとするくせがあるよなw
882nobodyさん:2011/08/24(水) 04:38:03.04 ID:???
余計なコードが邪魔なんらもん
883nobodyさん:2011/08/24(水) 15:39:57.97 ID:???
へたくそなコード見ると使う気なくすもん
884nobodyさん:2011/08/24(水) 15:42:47.07 ID:???
自分で使うだけなら自前コードでもいいだろ別に。
少なくともメンテ放棄されてるCGI::Liteを無理に使うよりはだいぶましだろう。
885nobodyさん:2011/08/24(水) 16:04:30.68 ID:???
CGI::Simpleはダメ?
886nobodyさん:2011/08/24(水) 16:14:56.14 ID:???
自分でサブルーチンを作っていく場合
packageして::で呼び出すよりもpakageしないで普通に&で呼び出したほうがいいんじゃないでしょうか?

例えばpakage test1;の中にsub www{}というサブルーチンを作った場合
やっぱりあとでpakage test2にwwwを移したい場合
&test::www;で呼び出した箇所を全部&test2::www;に修正しなければならないでしょ
でもpakageしなければwwwをどのファイルに移動させても&www;の箇所を修正しなくてすむから
887nobodyさん:2011/08/24(水) 16:24:45.69 ID:???
>>886
そうだね
888nobodyさん:2011/08/24(水) 16:25:42.66 ID:???
>>886
フツーはパッケージ名をコード中にバラまくような事はせず
use Foo qw(bar); を use Foo2 qw(bar); にするだけだし。
889nobodyさん:2011/08/24(水) 18:07:47.81 ID:???
>>886
パッケージ名を抱合した変数を使って関数を呼ぶようにしたらいいと思うよ。

my $object = bless {}, "test1"; # パッケージ名を変更したらここをtest2にするだけ
$object->www(@arg); # = test1::www($object, @arg); 最初の引数に$objectが入っちゃうけど
890nobodyさん:2011/08/24(水) 18:15:28.44 ID:???
配列 @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行で記述できるような、もう少し簡単にする方法はないでしょうか?
891nobodyさん:2011/08/24(水) 18:27:20.29 ID:???
@new_ind = grep { $array[$_] =~ /03/ } 0 .. $#array;
892nobodyさん:2011/08/24(水) 18:30:31.29 ID:???
spliceでいいんじゃない?
893890:2011/08/24(水) 18:34:06.85 ID:???
>>891
ありがとうございます。
自分もgrepでどうにかならないか考えたのですが、
0 .. $#array
とする発想がありませんでした。
894nobodyさん:2011/08/24(水) 18:38:42.27 ID:???
#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;
895nobodyさん:2011/08/24(水) 18:42:19.26 ID:???
バージョンが新しいPerlなら、0 .. $#array を keys @array ともできるね。
でも互換性を考えると前者が無難なのかな。
896nobodyさん:2011/08/24(水) 19:26:43.70 ID:???
>>889
それがコンストラクタを意味するんだったら、
パッケージ名直打ちするなんてバッドノウハウもいいとこ。
897nobodyさん:2011/08/24(水) 19:54:45.23 ID:???
高林さんの提唱するところのバッドノウハウってのは、バッドだけどやむを得ない理由で普及してるノウハウ、みたいな感じでしょ。
>>889はひたすらバッドなだけだと思うんだけど。

あと>>886は単にExporterか何か使って>>888しろ、で済む話だね。
898nobodyさん:2011/08/24(水) 22:20:43.25 ID:???
書籍で載ってんだぜ?そのコード
899nobodyさん:2011/08/25(木) 01:22:19.57 ID:???
書籍が正解とは限らないわけで
900nobodyさん:2011/08/25(木) 02:58:01.90 ID:???
>>886
初心者に初心者がバットノウハウやジョークレベルの解答しているみたいでなんか可哀想だからちゃんとしたレスをしてあげるよ。

まずパッケージというのをよくわかってないみたいだね。パッケージは普通このパッケージは○○関連の
仕事をする人と決めて作るので、別のパッケージに移動したいと思うことはあまりない。
たぶん一つのパッケージでいろんな役割をもたせているから移動したくなるんだと思う。
関数一つ、二つだけのパッケージがあってもいい。役割が分かれてるのなら細かく分割したほうがいい。

パッケージを使うのはプロジェクトが大きくなってきたとき、この関数はどこで定義されたのかなどを
ぱっと見てすぐに分かるようにするためでもあるので、>>888のようなやり方は良くない。
ちゃんとパッケージ名で修飾しよう。

>>889は、パッケージ名を抱合とか言ってるけど、単なるPerlでのオブジェクト指向(クラスを作る方法)の変則版。
それを書くぐらいならちゃんとしたオブジェクト指向用のコードを書いたほうがいい。せめてnewを作ること。
ちなみにそれやるぐらいならbless使わずに、my $object = "test1"; $object->www(@arg); これだけ十分。
そしてこのやり方は、パッケージ名が変わった場合には使えるけど、パッケージに含まれる関数を一つだけ
移動するときには役に立たない。

Exporterも今回の話とは関係ないものと考えたほうがいい。

で、結局どうするのが一番いいのかというと、この場合は素直にパッケージ名を変えたほうがいい。
これがJavaとかなら、リファクタリングツールを使って簡単に関数を移動できたりするんだが、
Perlはそうはいかない。だから多少冗長になっても関数名は長くしておいたほうがいい。
そうすれば検索で変更すべき箇所がすぐに見つかる。

変更する箇所が多くて一気に全部変えるのが怖いのなら、test::www()が呼ばれたら、test2::www()に転送するだけの
関数を作っておけばいい。そうすれば少しづつ変えられる。転送する前にwarnなんかで警告を表示するようにしておけば
すぐに気づくね。Carpとかを使えば、具体的にどこで呼び出されたかを知ることもできる。

あと&は基本的に使わない。test::www()で呼び出せるはず。パッケージ名の頭文字は大文字で
901nobodyさん:2011/08/25(木) 06:47:02.75 ID:???
長文の解説するのは勝手だが、
パッケージ => 名前空間を提供する為の機構、お約束、コマンド。
モジュール => あんたがパッケージと連呼して解説してる物。
用語を区別も出来てないのに、他人を貶めるコメントまで
入れて回答すべきじゃない。

ケアレスミスって言い訳はすんなよ?
902nobodyさん:2011/08/25(木) 07:00:49.48 ID:???
あ、本来の意味での「パッケージ」も当然使ってる。
モジュールの意味と混同使用してるのが問題。
903nobodyさん:2011/08/25(木) 10:23:30.15 ID:???
パッケージもモジュールも同義でいいじゃない
めんどくさい
904nobodyさん:2011/08/25(木) 15:21:43.68 ID:???
mod_perlが使えないレン鯖で、100種類くらいのモジュールを使いたい場合は、その場その場で必要なものだけrequireする方が良いと言う認識で正しいですか?
めんどくさいので、まとめてuseしたいところなんですが、パフォーマンス落ちますよね?
最近の事情教えてください。
905nobodyさん:2011/08/25(木) 15:57:23.29 ID:???
必要なものだけ use すれば?
906nobodyさん:2011/08/25(木) 16:13:21.34 ID:???
eval 'use ですか?
結局、何が必要になるのか判定するのがめんどくさいので…
907nobodyさん:2011/08/25(木) 16:25:32.51 ID:???
うーん
100種類ものモジュールを使わにゃならん規模のしろものを
mod_perlも使えずパフォーマンスを気にしながら運用しないといけないような
レン鯖で動かそうとしていること自体
どこか間違ってないかい?
908nobodyさん:2011/08/25(木) 16:38:29.83 ID:???
趣味でやってるんで、専鯖は高すぎるし、自鯖は管理が面倒なんです。
最近はuseするのが当たり前っぽいので、何か良い方法でもあるのかなと思ったのですが…。
909nobodyさん:2011/08/25(木) 17:27:58.47 ID:???
@aaa = ("a\r\n","b\r\n,","c\r\n");

print join('', map{ ??? },@aaa);

\r\nの改行がある配列を改行を削除して出力したいのですが、mapを使う場合どんな記述になりますか?
910nobodyさん:2011/08/25(木) 17:28:08.00 ID:???
つ VPS PaaS
911nobodyさん:2011/08/25(木) 21:07:27.57 ID:???
my @filtered = grep { s/\r\n// } @aaa;
912nobodyさん:2011/08/25(木) 21:29:35.33 ID:???
>>911
なんで grep?しかもそれだと @aaa に対して破壊的だよ

「末尾の」\r\n の削除、と勝手に解釈するとして、
map { my $s = $_; $s =~ s/\r\n\z//; $s } @aaa

Perl 5.14 なら
map { s/\r\n\z//r } @aaa
# http://www.effectiveperlprogramming.com/blog/659
913nobodyさん:2011/08/25(木) 23:20:16.46 ID:???
「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} ;

914nobodyさん:2011/08/25(木) 23:43:57.45 ID:???
>>913
細かいことだけど最初のは "0\r\n" や "\r\n" に対して働かないよね
5.10 以上なら || じゃなくて // にすればいいけど
915nobodyさん:2011/08/25(木) 23:51:38.78 ID:???
map{ /^(.*?)\r\n$/ms ? $1 : $_ } @aaa;
916nobodyさん:2011/08/26(金) 15:28:06.85 ID:???
map /(.*(?=\r\n)|.*)/s, @aaa;
917909:2011/08/26(金) 16:10:21.89 ID:???
>>911-916

出来ました。
助かりましたありがとうございます。
918nobodyさん:2011/08/27(土) 01:57:22.73 ID:???
>>901
えと、結局言い返せるところはそこだけなの?
名称に文句つけてるだけだよね?
919nobodyさん:2011/08/27(土) 02:11:28.25 ID:???
>>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の話はすべてパッケージで間違いない。
920nobodyさん:2011/08/27(土) 07:29:50.33 ID:???
斜め読んだが、まともに読む気にならん
>、>>888のようなやり方は良くない。
>ちゃんとパッケージ名で修飾しよう。
Foo::bar、Foo2::bar で全て呼べって?Exporterの存在全否定だぞ?

ま、せっかくperldoc.jpのURLを引っ張って来てんだから、
質問者さんは、そっちを読めばいいよ
921nobodyさん:2011/08/28(日) 12:52:48.81 ID:???
>>911は無名配列へコピーして条件を必ず真にすれば一応できるかな?

my @filtered = grep { s/\r\n$//; 1 } @{[@aaa]};
922nobodyさん:2011/08/30(火) 11:36:50.51 ID:???
UTF8の文字列の表示上の長さを一定に切り詰める良い方法ありませんか?
フォントなどに影響されるので完璧には難しいと思いますので、最悪半角1全角2程度の精度でもいいです。
923nobodyさん:2011/08/30(火) 12:30:21.87 ID:OHE35/fc
現在見ているページのURLを取得するにはどうしたらいいんですか?

ログイン画面からログインしたあとトップページに飛ばすのではなく
現在見ているページに飛ばすようにしたいので
924nobodyさん:2011/08/30(火) 13:03:34.30 ID:OHE35/fc
$ENV{'SCRIPT_FILENAME'} と$ENV{'QUERY_STRING'}を使って何とかできました
925nobodyさん:2011/08/30(火) 20:20:35.84 ID:???
返信の時に>などの引用部分をなくすにはどう変更すればよろしいでしょうか?
下の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;
926925:2011/08/30(火) 21:14:27.63 ID:???
すいません、自己解決しました。

927925:2011/08/30(火) 21:32:02.91 ID:3jBRaX0s
してねーよw
なりすましすんなw
928nobodyさん:2011/08/30(火) 22:29:54.74 ID:???
らって解決したんらもん!
929nobodyさん:2011/08/30(火) 23:30:24.81 ID:???
>>925 みたいな不十分な内容の質問で答がもらえると思ったら大間違い、
という事実に自分で気づきましたので、>>925は無視してください。
のちほどあらためて質問しなおします。本当に申し訳ありませんでした。

930nobodyさん:2011/08/31(水) 00:16:09.54 ID:???
しつこいよ。キチガイ
931nobodyさん:2011/08/31(水) 00:47:43.29 ID:???
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;


932nobodyさん:2011/08/31(水) 00:50:13.64 ID:???
こんな感じのソース書いて、実行してみると
Can't call method "Call" on an undefined value ...
って言われる>< なぜ?
ちなみに、test.dllはcgiと同じ階層に置いてて、環境はWin 7 64bit & ActivePerl 5.12.4
evalで囲っても肝心の値が取れないし、Dynaloderよく分からんし、詰んだorz
誰かお助けを〜

文字列制限に付き2回に分けて投稿
933nobodyさん:2011/08/31(水) 01:09:49.03 ID:???
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;
934nobodyさん:2011/08/31(水) 01:20:00.50 ID:???
>>932
$testがundefinedなんだからnewに失敗してる、エラーチェックぐらいして

$GetTempPath = new Win32::API('kernel32', 'GetTempPath', 'NP', 'N');
if(not defined $GetTempPath) {
die "Can't import API GetTempPath: $!\n";
}
935nobodyさん:2011/08/31(水) 01:28:51.47 ID:???
>>934
なるほど。
試してみたら
%1 は有効な Win32 アプリケーションではありません。
って出た。これって有効なdllでは無いってことかな?
936nobodyさん:2011/08/31(水) 01:37:56.85 ID:???
>>933
$z はどっから出てきたんだよ
use strict; use warnings; つけろ
937nobodyさん:2011/08/31(水) 01:50:04.59 ID:???
>>933
負数をビットシフトした時の演算結果がPHPとPerlで違う

$deltaX << (21-$z)

($deltaX < 0 ? -1 : 1) * (abs($deltaX) << (21-$z))

他の箇所も同様に置換
これでとりあえずPHPと同じ結果にはなるんじゃないかな
検証はやってないんで自分でやってね
938933:2011/08/31(水) 09:44:14.97 ID:???
>>936
$zが抜けていましたすみません。

>>937
どう違うのかまで具体的に教えていただきありがとうございました。
昨日一日悩んだけど、同じ関数名で挙動が違うとか自分で考えていたら、しばらくハマってそうだ。
939nobodyさん:2011/08/31(水) 14:22:39.46 ID:???
>>931だけど、
http://msdn.microsoft.com/ja-jp/library/9yb4317s.aspx
ここみて64bit用のdll作成して、実行したらできた。

OSが64bitだと、dllも64bitじゃないと駄目なのね。
スレ汚しスマソ
940nobodyさん:2011/08/31(水) 14:39:25.77 ID:???
>>938
同じ演算なのに言語によって結果が違う(つまり言語によって仕様が違う)ことがたまにあるんだ
たとえば負数の剰余とかもPerlとPHPで違ったりする
Perl、Ruby、Python など:-5 % 3 → 1
PHP、C、JavaScript など:-5 % 3 → -2
あとPHPでは三項演算子 (? :) の優先順位がウンコってのも割と有名だったり
今後移植したコードがうまく動かなかった時はそのあたりを疑ってみるといいかも
941nobodyさん:2011/08/31(水) 14:58:51.30 ID:???
端数を切り上げるのに一番スマートな書き方を教えてください
切り捨ては int($hoge/$fuge) で良いのですが、
切り上げだと端数が出るかどうかの判定をして+1になるかと思います。
942938: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;
943nobodyさん:2011/08/31(水) 15:16:20.80 ID:???
>>942
(($count = scalar(@a) - 5) < 0) and $count = 0;
とかかなあ
でもたぶん演算速度的にはほとんどかわらないだろうし
わかりにくくなるから素直に2行にわけて書いておいた方がいいと思う
944nobodyさん:2011/08/31(水) 15:17:40.89 ID:???
別に無駄でもないと思うが、単に見やすくするなら、

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);
945nobodyさん:2011/08/31(水) 15:18:28.67 ID:???
また>>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にはメチャクチャな値が渡される
946nobodyさん:2011/08/31(水) 15:23:33.01 ID:???
>>941
それでいいと思います
もしくは use POSIX; しておいて ceil() を使うとか
947942:2011/09/01(木) 10:13:06.91 ID:???
>>943-944

ありがとうございます。
2行でもそんなにおかしいコードではないんですね。

perlは色んな書き方できるのが長所であり短所なんで視認性がありつつ効率的なコード書きが出来たら
もっと楽しいんだろうな。
948nobodyさん:2011/09/02(金) 08:22:19.73 ID:???
>>946
ありがとうございます。
949nobodyさん:2011/09/02(金) 13:50:29.35 ID:???
会社の経理さんに頼まれて perl でアプリ作ってたんだけど、
数学の四捨五入と銀行の四捨五入って違うのね。
ちょっとずつずれてて焦ったwwwww
950nobodyさん:2011/09/02(金) 16:35:39.70 ID:???
>>949
どういう風に違うの?
後学のために教えてくんろ
951nobodyさん:2011/09/02(金) 20:41:21.54 ID:???
5未満→切り捨て
5超→切り上げ
ちょうど5→上の桁が偶数になる側へ丸める

こんなのあったな。
952nobodyさん:2011/09/02(金) 22:24:48.60 ID:???
>>949
浮動小数点の丸め誤差の事か?
953nobodyさん:2011/09/02(金) 22:37:19.01 ID:???
五捨五入
954nobodyさん:2011/09/02(金) 22:39:47.39 ID:???
銀行丸めで調べてみれ
955nobodyさん:2011/09/03(土) 00:24:06.87 ID:???
>>949
浮動小数点誤差に気をつけろ。
Perlでは避けられない。
956nobodyさん:2011/09/03(土) 11:29:31.33 ID:???
意外と丸めって深いよな
負数の丸め方とかもあるし
957nobodyさん:2011/09/05(月) 23:55:26.18 ID:???
最近のメールフォームは多機能で余分な機能が多すぎるので難しいです。
なので
1. バリデーションはJqueryで行う
2. CGIはpostで送られたデータを送信して送信完了ページへリダイレクトするだけの機能
このような非常にシンプルなCGIはないでしょうか。
お願いします。
958nobodyさん:2011/09/06(火) 00:10:12.54 ID:???
誘導されてきたことぐらいは書け。
じゃなきゃマルチポストは帰れ!で済まされちゃうよ。
959nobodyさん:2011/09/06(火) 01:08:45.34 ID:???
<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] = ばなな
960nobodyさん:2011/09/07(水) 00:03:47.91 ID:???
$scraper->{aaa}->{item} = 'おやつ' ってことは
$scraper->{aaa} は {item => 'おやつ'} という無名ハッシュへのリファレンス。

一方 $scraper->{aaa}->[0] = 'ぽてち' …ってことは
$scraper->{aaa} は ['ぽてち', 'がむ', 'ばなな'] という無名配列へのリファレンス。

これを両方同時に成り立たせるのは無理だんべ。
961nobodyさん:2011/09/07(水) 14:55:18.84 ID:???
書き込むファイルがANSI形式の場合でフォームからunicode文字を送信して
たば書き込むだけの場合、unicode.pmとか使わなくても特に問題ないんでしょうか?

unicode.pmが必要なのって書き込むファイルがunicode形式の場合なんでしょうか?
962959:2011/09/07(水) 17:53:37.10 ID:???
>>960

そうですか。
違う方法を考えます。
ありがとうございます。
963nobodyさん:2011/09/07(水) 18:19:43.82 ID:???
>>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(),
);
964nobodyさん:2011/09/07(水) 18:37:59.56 ID:???
>>962
たとえば
$scraper->{aaa}->{item} = "おやつ"
$scraper->{aaa}->{list}->[0] = "ぽてち"
$scraper->{aaa}->{list}->[1] = "がむ"
$scraper->{aaa}->{list}->[2] = "ばなな"
みたいな形だったら作れると思うが

$scraper->{aaa} = {item => "おやつ", list => ["ぽてち", "がむ", "ばなな"]}
ってことね
965nobodyさん:2011/09/07(水) 19:56:25.50 ID:???
質問があります。
PerlとSendmailを使ってFromの内容を送る場合なんですが、ググっても肝心なFormにあるinputやtextareaのデータをどうやって変数?に送っているのかを解説している日本語サイトが見つかりません。
なのでここで質問させて頂きたいのですが。
例えば、VBやC#なら関数名のあとに引数で値を渡しますがPerlを使ってFormの各種コントロールからどやって値を渡しているのかメカニズムがとてもわかりにくく感じました。
こんなお馬鹿な私に簡単に説明して頂けないでしょうか。
966nobodyさん:2011/09/07(水) 20:00:47.43 ID:???
試しに書いてみたが…。

my $scraper = scraper {
process 'body', 'aaa[]' => scraper {
process 'a > strong', item => 'TEXT';
process '/*/a/text()', 'list[]' => 'TEXT';
};
}->scrape($content);

言うまでもないけどHTMLの構造に依存なので。
最後だけXPath式なのは、
A要素の子要素にSTRONGがない構造をCSS式でどう書くかわからなかったんで。
誰か教えて。
967966:2011/09/07(水) 20:06:51.68 ID:???
早速だけど >>966 これちょっと違うかもな…。
これだと $scraper->{aaa}->[0]->{item} = "おやつ" とかになっちゃうね。
そもそもなんで'aaa'じゃなくて'aaa[]'なんだろう?
968nobodyさん:2011/09/07(水) 20:32:11.48 ID:???
単にベタなフラグ立ての文字列だよ。

>} elsif ($key =~ s!\[\]$!!) {
>$stash->{$key} = [ map __get_value($_, $val, $uri), @nodes ];
969nobodyさん:2011/09/07(水) 20:54:22.14 ID:???
>>965
「cgi form クエリ」とかで探してみたらすぐ見つかったがな。
ttp://www.web-liberty.net/improve/perl/bbs_decode.html
とか。
フォームから送られたデータ(文字列)は、
GETでは環境変数QUERY_STRINGから、POSTでは標準入力から得られる。
なお実際に処理する時はCGIモジュールなどを使うべし。
970nobodyさん:2011/09/07(水) 21:23:28.30 ID:???
>>969
素早い回答ありがとうございます。
クエリでググらないといけなかったんですね、すいません。
一応読んでみて私なりに理解することができました。
FormのデータがSTDINにFormの各種コントロールのname属性=入力された値&name属性=入力された値・・・と全て格納されるので、まず全ての文字列を変数に格納して&と=で分割して変数に格納していくんですね。
やっと理解できました、ありがとうございます。
971nobodyさん:2011/09/07(水) 21:35:41.60 ID:???
ファイルロックするとき、ファイルオープンする直前にロックしたほうがいいのか、
それともスクリプトの序盤でロックしてしまうほうが安全か。。。迷う
972nobodyさん:2011/09/07(水) 22:18:39.09 ID:???
>>970
最初「cgi perl form」とかでググって、
ヒットしたページをいくつか見てみて「クエリ」というキーワードを見つけて、
CGIで渡される文字列を調べるんだからperlは関係ないな、と
「cgi form クエリ」でググり直して、
みたいに新たに検索語も探しつつ何度か調べ直すのは結構有効。
以上ご参考まで。
973nobodyさん:2011/09/08(木) 01:52:54.27 ID:lOPFQGVz
>>971
ファイルオープンの直前でおk

読み込みだけならロックはいらない
974nobodyさん:2011/09/08(木) 09:09:34.08 ID:???
オープンしないとファイルハンドルなくね?
ロック用のファイルでも作るの?
975nobodyさん:2011/09/08(木) 09:34:08.06 ID:???
読み込みもロック必要では?
読み込み中にファイルが更新される可能性もあるわけだし。
976nobodyさん:2011/09/08(木) 11:25:54.19 ID:???
ふと思ったんだけど、ロックファイルを用意するとか、flock を使用するとかの別のところ、
ファイルシステム上でデッドロックが起きてしまう可能性ってどれぐらい高いんだろう?

flock だったり、ロックファイルを作ってのロックだったりが成功しても、
読み書きしようとするのにロックが掛かって処理できなかったらどうしようも出来ないよね?


そもそも、そこまでの問題は一般ユーザーではどうしようも出来ないから、特別考慮しなくてもいいのかな?
977nobodyさん:2011/09/08(木) 11:48:49.18 ID:???
デッドロックが起きるようなファイルシステムがあったら
それはOSのバグかもしくはストレージの不具合か
いずれにしても致命的なエラーなので
そのまま使い続けられるような状態じゃないので

そんなことがもし起きるようなら
プログラム(アプリケーション)でなんとかするんじゃなく
OSを正常なものに変えるなりストレージを修理・交換するなりの
根本的な手当が必要ってことだろう
978nobodyさん:2011/09/08(木) 14:24:14.74 ID:???
>>972
どうもです。

WebProg全般に言えると思うんですけど、なぜC#やJAVAみたいにFormの各種コントロールのname属性から直接関数を指定して引数に代入できないでしょうね。
内部でどういう処理をしているのかがとてもわかりづらいです。
いちいち値を文字列関数で処理してから変数に格納するとか合理的とは言えないと思うんですが。
979nobodyさん:2011/09/08(木) 16:16:03.96 ID:???
ブラウザはフォームの入力をHTTPの仕様に沿って foo=1&bar=2 のように変換してサーバーに送信。
サーバーはそれをperlに渡す。
perlは受け取ったデータを処理する。

実際にはもっと複雑だが、ともかくデータは色々なところを通ってようやくperlまで辿り着く。
リレーのバトンが重かったり妙な形だったり何本もあったりしたら大変だよねえ。
980nobodyさん:2011/09/08(木) 17:57:56.87 ID:???
>>978
ブラウザ側とサーバ側で、HTTPプロトコルを使って値をやりとりする必要があるから、
全部ひとつの文字列にまとめて固めて送ってくる訳で。

Perlでの実処理ではデータを自分でいじらずにCGIモジュールあたりを使いましょう。
> いちいち値を文字列関数で処理してから変数に格納するとか
そんなことをしなくても、
> Formの各種コントロールのname属性から直接関数を指定して引数に代入
みたいな前処理をやってくれます。↑これは若干意味不明だけど
981nobodyさん:2011/09/08(木) 20:32:19.09 ID:???
>>968
意味不明。誤爆?
982nobodyさん:2011/09/08(木) 20:47:23.53 ID:???
ttp://cpansearch.perl.org/src/MIYAGAWA/Web-Scraper-0.34/lib/Web/Scraper.pm
の中の行だね。
「'[]' が付いてる文字列を配列へのリファレンスとするフラグにしている」
こんなのはソースを見なくても当たり前。

尤も、俺は >>967
>そもそもなんで'aaa'じゃなくて'aaa[]'なんだろう?
が何を意図した「?」なのかが理解出来ん(上記の理由)から、
968が的を射てるのか外してるのかすら分らん。
983nobodyさん:2011/09/08(木) 21:08:25.10 ID:???
>>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 はハッシュへのリファレンスと配列へのリファレンスの意味が
よくわかっていなかった(区別がついていなかった)ってだけのことなんですかね。
984nobodyさん:2011/09/08(木) 21:17:04.26 ID:???
>を見ると、単に 959 はハッシュへのリファレンスと配列へのリファレンスの意味が
>よくわかっていなかった(区別がついていなかった)ってだけのことなんですかね。
それだけの事
985nobodyさん:2011/09/09(金) 02:11:34.55 ID:???
次スレ立てる人は >>2 の確認と修正よろしく。
986nobodyさん:2011/09/09(金) 06:09:17.24 ID:???
950ですが、スレ立てできない専ブラもどきで書き込みしてるんで、
ブラウザのレベルが足りなくてスレ立てられねっす。すんませんが誰かかわりにお願いします。
一応>>1>>2の確認と修正したテキスト置いときます。
1 の内容:
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >>2 以降

前スレ http://hibari.2ch.net/test/read.cgi/php/1295170172/
987nobodyさん:2011/09/09(金) 06:10:40.18 ID:???
2の内容:
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/

[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://ascii.asciimw.jp/books/books/detail/4-7561-3057-7.shtml
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/

[オンラインマニュアル]
最新のドキュメント: ttp://perldoc.perl.org/
perldoc きまぐれ訳: ttp://fleur.hio.jp/perldoc/
perldoc.jp: ttp://perldoc.jp/

[モジュール]
CPAN: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/

[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/

[Perl5.8Unicodeメモ]
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
988nobodyさん: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です。

これだけでエラーの原因が分かる方いませんか?
989nobodyさん:2011/09/09(金) 13:07:27.26 ID:???
use libは絶対パスで正しいのか

あとだからログを見ろよ
990nobodyさん:2011/09/09(金) 13:09:29.33 ID:YZzHj5h/
>>989
いや、レンタルサーバーなので鯖のログ見れないんですよ

・・・あれ、use libって絶対パスでしか使用できないんでしょうか?
991nobodyさん:2011/09/09(金) 13:35:32.53 ID:???
URLのルート("/")とサーバのファイルシステム上のルートは別物だよ。
ごっちゃにしてないかい?
992nobodyさん:2011/09/09(金) 13:54:14.52 ID:YZzHj5h/
頭に/をつけたらだめだったんですね・・・よくわかりました
失礼しました
993nobodyさん:2011/09/09(金) 14:22:45.29 ID:???
>>986

4: WEBサーバーのエラーログにはこんな行がありました (URL や PATH はそのまま乗せないこと)
994nobodyさん:2011/09/09(金) 15:17:47.68 ID:???
>>988
http://perldoc.jp/docs/perl/5.10.1/perlfaq9.pod#How32can32I32get32better32error32messages32from32a32CGI32program63

まぁ本当に
> └cgi-bin−mycpan┬SHA−Escape.pm
>             └URI−PurePerl.pm
と入れているのならエラーメッセージを確認するまでもないが。
995nobodyさん:2011/09/09(金) 18:10:37.48 ID:???
>>986
立てます
996nobodyさん:2011/09/09(金) 18:12:38.60 ID:???
Perlコーディング初心者質問スレ Part 63
http://hibari.2ch.net/test/read.cgi/php/1315559509/
997nobodyさん:2011/09/09(金) 19:36:25.86 ID:???
>>990
> いや、レンタルサーバーなので鯖のログ見れないんですよ

そんなレン鯖はやめなさい。
ちゃんとログの見られる鯖に替えた方がよろし。

>>996
乙っす。
998nobodyさん:2011/09/10(土) 16:42:30.16 ID:???
999nobodyさん:2011/09/10(土) 19:52:43.01 ID:???
1000nobodyさん:2011/09/10(土) 20:06:47.98 ID:???
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。