Perlについての質問箱 ..
2:デフォルトの名無しさん
07/03/14 22:55:02
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: URLリンク(www.site-cooler.com)
[本]
リャマ: URLリンク(www.oreilly.co.jp)
駱駝: URLリンク(www.oreilly.co.jp)
Effective Perl: URLリンク(www.ascii.co.jp)
クックブック: URLリンク(www.oreilly.co.jp)
[オンラインマニュアル] (追加)
最新のドキュメント: URLリンク(search.cpan.org)
perl5.8.xのドキュメント(一部): URLリンク(www.kt.rim.or.jp)
perl5.005_03 のドキュメント: URLリンク(www.kt.rim.or.jp)
日本語ドキュメント検索: URLリンク(www.cpan.jp)
perldoc.jp: URLリンク(www.perldoc.jp)
Perldoc.com: URLリンク(www.perldoc.com)
3:デフォルトの名無しさん
07/03/14 22:55:32
[モジュール]
CPAN.com: URLリンク(search.cpan.org)
河馬屋二千年堂: URLリンク(homepage3.nifty.com)
[テクニック]
Perlメモ: URLリンク(www.din.or.jp)
Perlのページ: URLリンク(homepage1.nifty.com)
Perlの小技: URLリンク(homepage3.nifty.com)
[Perl5.8Unicodeメモ]
URLリンク(www.pure.ne.jp)
URLリンク(www.namazu.org)
URLリンク(www.lr.pi.titech.ac.jp)
4:デフォルトの名無しさん
07/03/14 22:56:03
[過去スレ]
1 URLリンク(pc.2ch.net)
2 URLリンク(pc3.2ch.net)
3 URLリンク(pc2.2ch.net)
4 URLリンク(pc2.2ch.net)
5 URLリンク(pc5.2ch.net)
6 URLリンク(pc5.2ch.net)
7 スレリンク(tech板)
8 スレリンク(tech板)
9 スレリンク(tech板)
10 スレリンク(tech板)
11 スレリンク(tech板)
12 スレリンク(tech板)
13 スレリンク(tech板)
14 スレリンク(tech板)
15 スレリンク(tech板)
16 スレリンク(tech板)
17 スレリンク(tech板)
18 スレリンク(tech板)
19 スレリンク(tech板)
20 スレリンク(tech板)
21 スレリンク(tech板)
22 スレリンク(tech板)
23 スレリンク(tech板)
24 スレリンク(tech板)
25 スレリンク(tech板)
26 スレリンク(tech板)
27 スレリンク(tech板)
28 スレリンク(tech板)
29 スレリンク(tech板)
5:デフォルトの名無しさん
07/03/14 23:28:35
RTFM = マニュアルを参照してください
6:デフォルトの名無しさん
07/03/14 23:33:02
乙
7:デフォルトの名無しさん
07/03/15 00:13:38
しょーりゅーけn
8:デフォルトの名無しさん
07/03/15 09:55:34
テンプレにPBPがはいってないのはどうかと
9:デフォルトの名無しさん
07/03/15 11:27:42
DAT落ちした過去スレって貼る意味あるの?
前スレだけでいいんじゃないかと思うが。
10:デフォルトの名無しさん
07/03/15 12:02:31
これもテンプレに入れない? (前スレの115)
---------------------------------------------------------
# 【Perl 日本語処理の基礎の基礎】
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。
# 文字コードの条件が異なる場合には編集が必要です。
# 編集の仕方はご自分で勉強するか、このスレで質問して下さい。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
# 次に、あなたが実行したい処理の内容を入れて下さい。
print "やあ!\n";
sleep(1);
11:デフォルトの名無しさん
07/03/15 12:38:08
テンプレに入れる必要性が分からない
12:デフォルトの名無しさん
07/03/15 12:56:56
よくある質問のまとめサイトでも作って載せとけ
13:デフォルトの名無しさん
07/03/15 20:59:50
encodingに手を出すと泥沼にしかならないからなあ
14:デフォルトの名無しさん
07/03/15 21:49:50
現実問題として、encodingまわりの質問は多いわけで、
テンプレ化することで、くだらない質問が減るのなら十分意味があることだと思う。
15:デフォルトの名無しさん
07/03/15 22:28:23
># 編集の仕方はご自分で勉強するか、このスレで質問して下さい。
これじゃあ結局変わらないんじゃないか。
># 上記は、あくまで文字処理がわからない人のためのおまじないです。
># 上記以外のことをやろうと思ったら、自分で勉強してください。
わからんやつに、手取り足取り説明してもやっぱりわからん。
こっちで動くように書き直した方が100倍早い。
Cのポインタみたいな状況になってる。
16:デフォルトの名無しさん
07/03/15 22:42:07
テンプレなら一言 use Jcode; 使えってレベルでいいでしょ。
17:デフォルトの名無しさん
07/03/15 22:43:56
Jcodeだとコアにはいってないじゃん。どうやってインストールするんですか?とかになるよ。
18:デフォルトの名無しさん
07/03/15 22:48:47
>>16 >>17
あんたらはどうせバカ以前だろ。
あれが今となっては誤解を引き起こす要因になっていることすらわかっていない。
19:デフォルトの名無しさん
07/03/15 23:14:57
誤解って何の話? そんなの初めて聞いたが。
20:デフォルトの名無しさん
07/03/16 00:19:43
>>19
多分、>>18は、「Perl5.8 でもJcode.pm を使って文字コードを変換しなければならない」
と誤解したのではないだろうか。
初心者は、回答者が>>10のように回答できるような質問をすることすらできないのが現実。
前スレの>>68-71 なんか見てると、悲惨だね。
この点を解説している入門書も少ないと思うし、テンプレに入れてやってもいいんじゃないの?
21:デフォルトの名無しさん
07/03/16 00:48:59
Perlにもクロージャがあるようですが、
皆さん使ってますか?どんなときに使うか教えてください
22:デフォルトの名無しさん
07/03/16 17:39:12
ぐぐればいいのに
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
23:デフォルトの名無しさん
07/03/16 17:52:52
sub func {
・・・
return (\@a, \@b, \@c);
}
(@a, @b, @c) = func();
ってやると全部@aに合体してるんだけど
どうすればいいの?
24:デフォルトの名無しさん
07/03/16 17:53:40
($a, $b, $c) = func();
25:デフォルトの名無しさん
07/03/16 18:30:51
(*a, *b, *c) = &func;
26:23
07/03/16 20:32:44
リファレンスやっと理解できた
27:デフォルトの名無しさん
07/03/16 22:56:12
@data = <IN>;
print OUT reverse @data;
メモリに入りきらない巨大csvファイルを上のように
逆順にするにはどうすればいいでしょうか?
28:デフォルトの名無しさん
07/03/16 23:06:51
Tie::Fileを使えば幸せになれる予感
29:デフォルトの名無しさん
07/03/16 23:57:22
>>27
URLリンク(www.din.or.jp)
30:デフォルトの名無しさん
07/03/18 04:31:05
WindowsXP Proで、
プロセスの終了を待たずにhoge.exeを起動して
次の処理へと移りたいのですが、どうすればいいのでしょうか?
&routine;
system('hoge.exe'); # ここで終了を待ちたくない
&routine2;
31:デフォルトの名無しさん
07/03/18 04:42:09
forkを使え、ルーク
32:デフォルトの名無しさん
07/03/18 06:32:23
delete の一般版というか、undef の削除した内容を返すような関数はあるのでしょうか?
スカラーの場合だと、こんな感じの関数で。
sub Del {
my $v = $_[0];
$_[0] = undef;
return $v;
}
33:デフォルトの名無しさん
07/03/18 06:40:08
>>30
system('start hoge.exe');
34:デフォルトの名無しさん
07/03/18 11:33:47
>>32
ない。
35:デフォルトの名無しさん
07/03/18 13:50:21
前スレぐらいで出てた気がするけど、
第一引数に1を。
ActivePerlだけだっけ。
36:デフォルトの名無しさん
07/03/18 14:22:24
>>30
Win32::Processは?
37:デフォルトの名無しさん
07/03/18 16:01:20
perl って質問じゃない本スレみたいなのないの?
38:デフォルトの名無しさん
07/03/18 16:42:21
>>37
あってもどうせ過疎る。
だからここでけっこう雑談もしてる。
39:デフォルトの名無しさん
07/03/18 17:16:31
なる
perl って普及してるのにそう言う人あまり居ないんだね
道具として使っている人がほとんどなのかな
40:デフォルトの名無しさん
07/03/18 17:29:29
英語圏のコミュニティがたくさんあるからだと思うよ
41:デフォルトの名無しさん
07/03/18 17:52:44
Perl関連のスレがあちこちに散らばってるしなぁ。
本スレがあれば変な分散抑えられるかもだけど…。でもやっぱ過疎りそうだね。
42:デフォルトの名無しさん
07/03/18 18:18:38
もう道具以上の発展がないんじゃないの
43:デフォルトの名無しさん
07/03/18 18:43:54
>>34
ありがとうございます。
一瞬演算子レベルであっても良さそうな気はしたが、あってもあまり使わないか。
44:27
07/03/18 20:40:07
>>28
>>29
ありがとう。ずっと前から愛してました。
45:デフォルトの名無しさん
07/03/18 22:36:23
Net::IRCで、サーバーとの接続が切れたら
再度繋ぎなおしたいのですが、接続が切れると、
「No active connections left, exiting...」という表示と共に
スクリプト自体が死んでしまいます。
どうすれば接続が切れたときに再度繋ぎ直すことが出来ますか?
46:デフォルトの名無しさん
07/03/19 00:20:46
eval
47:デフォルトの名無しさん
07/03/19 13:54:47
>>31 >>33 >>35-36
アリガトウゴザイマシタ。とりあえず>>33で*.lnkを呼び出して済ませました。
48:デフォルトの名無しさん
07/03/20 16:10:23
CPAN のモジュールをいろいろ組み込んだ結果、
print 'hello!'; だけでもメモリを 20M くらい使うようになりました。
サーバのメモリが 2G のため、同時に 100 アクセスくらいあると
サーバがかなり重くなってしまいます。
サーバのスペックを上げることになったのですが、
同時に消費メモリも下げろと言われています。
CPAN のモジュールは外せないのですが、
ソフトウェア的に何か解決策はありませんか?
49:デフォルトの名無しさん
07/03/20 16:13:48
お前は何を言っているんだ?(画像ry
50:デフォルトの名無しさん
07/03/20 16:17:42
>>48
いろいろあるだろうけど、コードの再利用で量を減らすとか、
容量の大きい配列は、他の変数への複製を一切せず、全て
参照等で解決するとか。
51:デフォルトの名無しさん
07/03/20 16:21:24
mod_perl とか FastCGI とか使って、プロセスを使いまわすようにすればいいじゃない
52:デフォルトの名無しさん
07/03/20 16:35:11
モジュールは何を使ってるの?
53:デフォルトの名無しさん
07/03/20 18:44:58
そもそも、同時に100アクセスも来るサイトに鯖1台で、CGIでPerlを起動したらCPUが間に合わない
54:デフォルトの名無しさん
07/03/20 18:53:15
threadsについての質問ですが、
例えばソケットを作ってから新規スレッドを作った場合、ソケットも2つ存在し、
my $sock = IO::Socket::INET - > new(attributes);
my $thread = threads -> create(\&example);
$thread -> detach;
$sock -> close();
この場合、生成されたスレッドからはまだソケット利用できるということでしょうか?
ソケットの実体がいまいち掴めてないので余計に混乱してしまいました・・・
55:デフォルトの名無しさん
07/03/20 20:04:04
>>54 perl以前にまずスレッドについて勉強したほうがいい。 プロセスとスレッドを混同してる。
56:デフォルトの名無しさん
07/03/20 20:32:31
>>50に関連しているのかいないのかだけど、
配列をサブルーチンへ渡したりサブルーチンから返したりする場合に、
複数の配列ではなく(1つのリストにまとめられる心配がない)、
大きくもない配列の場合だったら、
そのまま渡したり返したりした方が
ほとんどパフォーマンスが変わらない上にコードの見通しが良くなったりしますか?
57:デフォルトの名無しさん
07/03/20 20:43:08
>>55
再度勉強してきます。有難うございました。
58:デフォルトの名無しさん
07/03/20 22:10:03
>>56
???
一つのリストにまとめられない心配がない、じゃなくて?
59:デフォルトの名無しさん
07/03/20 22:44:25
>>56
そりゃあ使わないで済むなら、リファレンスなんて使わないほうがシンプルになるだろうね。
でも、後で「やっぱり大きな配列を扱うようにしたい」とか「複数の配列を受け取りたい」とか
思った時の事を考えると、あらかじめリファレンス受け取りにしといた方が、少ない変更で済んで
互換性を保ちやすいのは確かだと思うよ。
60:50
07/03/20 23:00:32
そうでしょうね。
先のメモリ最適化は、perlみたいな高級言語(BASICとか)では
できる事には限界があるでしょね。
メモリの解放だってできないすぃ。いかに使わないか、なのかな。
61:56
07/03/21 07:11:38
>>58
自分の書き方がまどろっこしくてごめんなさい
●複数の配列ならまとめられてしまうので、リファレンスのリストで渡す・返すのは必須
●考えていたサブルーチンでは、複数の配列を渡さない・返さない
= リストがまとめられる心配がないので、リファレンスを使わず無精でウマー
と考えていました
>>59-60
サンクスです
短期的には何はともあれプロファイラで見るか、という勢いだったのですが、
中長期的な視点も大事ですね
ループで回しているようなサブルーチンだとかだと、
塵も積もれば……にもなりそうですので、節約することにします
62:デフォルトの名無しさん
07/03/21 14:03:20
>>48
プロセス間通信を使うのがいいんじゃないかな。
モジュールを呼び出して実行するプロセスを一つ立ち上げて、
他のプロセスはこのプロセスと通信して実行結果をもらうようにする。
63:デフォルトの名無しさん
07/03/21 14:07:03
突然すみません、エスパーを募集します。
MP3::InfoモジュールがどうもShiftJISを想定してないのかどうかは知りませんが、
とにかくID3v1(エンコードはShiftJIS)で曲名など、日本語を含んだ文字列を取得すると
utf8フラグを持っているのに中身はShiftJISという訳の分からない文字列が出ます。
そしてGuessでfrom_toでutf8に変換しようとすると、
iso-8859-1 or utf8 at C:/Perl/lib/Encode.pm line 186
上記のエラーで止まってしまいます。Jcodeのgetcodeでもutf8と判別されました。
これを、通常のShiftJISの文字列にするにはどうすれば良いでしょうか。
ID3v1にShiftJIS以外の文字列が入るかどうかは置いといて、
色々やって通常のShiftJISの文字列にしようと試みたのですが、
激しい文字化けに見舞われたり、だめでした。
どうか、お力をお貸しいただけませんでしょうか。宜しくお願いします。
64:デフォルトの名無しさん
07/03/21 14:54:56
POD嫁
書いてあるから
65:63
07/03/21 15:08:22
>>64
すみません、英語は正確に読めません。
フィーリングで適当にイグザンプルを斜め読みして書いてます。
use_mp3_utf8() の事でしたら、違います。
確かにこれでShiftJISは治るのですが、
Unicodeが全部"?"に変換されてしまいます。
66:デフォルトの名無しさん
07/03/21 15:24:47
> utf8フラグを持っているのに中身はShiftJIS
shiftjisにutf8フラグが付いてるだけじゃないの?
67:63
07/03/21 15:41:15
>>66
その通りだと思うのですが、
_utf8_off、encode、decode等してみたのですが
全て化け化けの結果が返ってきたのです…
68:デフォルトの名無しさん
07/03/21 16:19:55
>>65
英語を勉強しろよ。
別のモジュールを使おうとしたときに同じような目に遭うぞ
69:デフォルトの名無しさん
07/03/21 17:58:00
必要なのは、RAW_V1なんだよな〜
70:デフォルトの名無しさん
07/03/21 18:34:37
1年くらい前に同じ問題で七転八倒したことがあるけど、Rubyに逃げたわ。
Rubyでもモジュールの内臓を引き摺り出して書き換える必要があったけど。
71:デフォルトの名無しさん
07/03/21 21:42:27
>>63
お約束の「はまり」だ。自力で頑張ってくれ。
例のごとく「PODを読め」とかほざいているやつは、Jcode使えとか言ってるバカと同様
八割方テメエでもできないから心配することはない。
ちなみに、あんたが既に挙げている材料だけでうまくいくよ。
72:63
07/03/21 22:28:13
>>71
もうかなり悩んでるんです…
挙句の果てにはUnicode文字が含まれてたら
_utf8_off で普通の文字列にし、それ以外はShiftJISとしてutf-8にエンコードしてます。
本当にお願いします…コードをいくつか書いて頂ければ…
73:デフォルトの名無しさん
07/03/22 00:07:55
utf8フラグだけ落としたらいいじゃない
74:デフォルトの名無しさん
07/03/22 04:24:32
ご存じの方ありましたら教えてください。
掲示板に貼られる画像のサニタイジングをしたいのですが、CPANか
どこかにコードがなかったでしょうか。とりあえずJPEGとPNGだけでも
処理できたらいいのですが。
75:デフォルトの名無しさん
07/03/22 05:05:44
しかし、文字コードになるとキレる奴がいるなw
76:デフォルトの名無しさん
07/03/22 08:35:23
>>74 適当なモジュールでデコードしてエンコードすればいいんじゃ
77:デフォルトの名無しさん
07/03/22 08:43:35
ImageMagick
78:74
07/03/22 15:14:14
>>76-77
ありがとうございます。試してみます。
79:デフォルトの名無しさん
07/03/22 16:11:56
The GUI LoftのようなGUIデザインツールがTkにもあれば教えていただけないでしょうか?
80:デフォルトの名無しさん
07/03/22 17:12:58
$q = new CGI;
これがエラーになるのですが考えられる原因はなんでしょうか?
81:デフォルトの名無しさん
07/03/22 17:22:22
・perlのパスが違う
・useしてない
・モジュールが無い
・ブラウザで表示してるのにContentヘッダを出力してない
・脳内鯖にしかアップしてない
とりあえずエラーログ見ればいいと思う
82:デフォルトの名無しさん
07/03/22 17:44:29
use strictをはずしたら動きました
83:デフォルトの名無しさん
07/03/22 17:55:05
それはまず、なぜstrictありで怒られてたのかを考えるべきところじゃないのか?
84:デフォルトの名無しさん
07/03/22 18:03:42
っ my
85:デフォルトの名無しさん
07/03/22 18:03:46
・$qをmyしてない
86:デフォルトの名無しさん
07/03/22 18:14:19
>>82
87:デフォルトの名無しさん
07/03/22 18:28:02
いろいろな点で酷過ぎる
88:デフォルトの名無しさん
07/03/22 19:39:44
strictはずのは自殺行為
89:デフォルトの名無しさん
07/03/22 19:43:35
エラー隠蔽者には、まずエラー内容を吟味することを教えようぜ。
90:デフォルトの名無しさん
07/03/22 20:24:23
質問です。
正規表現で伸ばし棒を使うとエラーが出てしまうのですがこれを回避する方法はないでしょうか?
よろしくお願いいたします
91:デフォルトの名無しさん
07/03/22 20:25:37
伸ばし棒ってどれ。
92:デフォルトの名無しさん
07/03/22 20:26:57
ー
これです
93:デフォルトの名無しさん
07/03/22 20:27:49
これも同じ人?向こうの方がいいんじゃないかな。
94:デフォルトの名無しさん
07/03/22 20:30:15
>>90
具体的にエラーがでる正規表現と、エラーの文も書いてくれ
95:デフォルトの名無しさん
07/03/22 20:33:42
>>94
my $str = "test";
$str =~ s/ニート//;
Unmatched [ in regex; marked by <-- HERE in m/ニー <-- HERE ト
and Settings\\デスクトップ\httpd142p\test.pl line 3.
こんな感じです
>>93
>>90=>>92です
96:デフォルトの名無しさん
07/03/22 20:34:12
>>92
2バイト目が [ になってるんでperlが混乱してるんだな。
97:デフォルトの名無しさん
07/03/22 20:37:10
>>95
\Q\Eで囲め
98:デフォルトの名無しさん
07/03/22 20:40:14
>>97
!!!!!
できました!!ありがとうございます!!!
99:デフォルトの名無しさん
07/03/22 21:22:20
\Q\Eか。それ忘れてた。前それではまって、m/コピ\x{81}\x{5b}/なんてことやってた。
100:デフォルトの名無しさん
07/03/22 21:33:38
あほうは、新テンプレ通りやれよ。同じ事何度も言わせんな。
101:デフォルトの名無しさん
07/03/22 21:52:35
そうだな。
>>98は黙って>>10に書いてある通りのことをやれ。
102:デフォルトの名無しさん
07/03/22 21:53:25
シフトJISって懐かしい。
103:デフォルトの名無しさん
07/03/22 22:08:34
#!/usr/local/bin/perl
use strict;
use LWP::Simple;
use XML::Simple;
my $api = 'URLリンク(d.hatena.ne.jp)';
my $url = 'URLリンク(www.yahoo.co.jp)';
my $document = LWP::Simple::get($api.$url)
or die "cannot get content from $url";
my $parser = XML::Simple->new;
my $data = $parser->XMLin($document);
print $data->{count}->{bookmark}->{content}, "\n";
URLリンク(www.itmedia.co.jp)
ここのサンプルなんですがエラーがでました
何が悪いのでしょうか?そんなに難しいことをやってるわけではないと思うのですが
104:デフォルトの名無しさん
07/03/22 22:40:11
なんていうエラーがどこで出たのよ?
105:デフォルトの名無しさん
07/03/22 22:45:19
HTTP 500 - 内部サーバー エラー です
106:デフォルトの名無しさん
07/03/22 22:48:42
なんでブラウザにエラーが出るわけ?
107:デフォルトの名無しさん
07/03/22 22:48:48
テンプレに
>エラーが出たらエラーをそのままコピペしろ
と入れた方がいいね。
>>105
コマンドラインで実行した結果を出せよ。出せないなら、WebProg逝き。
108:デフォルトの名無しさん
07/03/22 22:56:48
自己解決しました
コピペした括弧が全角でした
なんで括弧だけ全角なのか意味不明です
わざとなんでしょうかね
ひどいサンプルです
109:デフォルトの名無しさん
07/03/22 23:02:58
ここって初心者向けのスレなの?
110:デフォルトの名無しさん
07/03/22 23:05:47
行番号が付いてるところからも、コピペを前提とはしてない、実際に
手を動かして理解するためのコードだとは思うが、なんで括弧が半端
に全角になってるんだろうな。(9行目の2つと13行目の閉じ括弧)
111:デフォルトの名無しさん
07/03/22 23:35:37
普通の記事をいつも上げるときに使ってるスクリプトがお節介でもしたんだろう。
112:デフォルトの名無しさん
07/03/22 23:37:14
ftpで相手サーバの接続先にあるファイルのリスト(ワイルドカードで指定した名前に
一致するファイルの一覧)を配列に取得したいのですが相手サーバの設定の関係で
wgetとやらを使って接続しないといけません。
wgetの使い方は調べてみたのですが、それをPerlから実行してファイル一覧を取得
するにはどうやったらよいのでしょうか?
113:デフォルトの名無しさん
07/03/22 23:44:57
open("wget -O- $url |");
どんな内容が返ってくるかは実際に見てみれ。
114:デフォルトの名無しさん
07/03/23 00:07:22
>>74
サニタイジングなんて言ってたら高木大先生に張り倒されるぞ!
115:デフォルトの名無しさん
07/03/23 00:43:28
たいていの場合wget呼ぶよりはLWP使うほうがプログラムは楽だと
思うのだが、wget使わないと取れないってどういう仕掛けなのだろう??
116:デフォルトの名無しさん
07/03/23 02:01:06
FTPで接続だから、LWPよりもNet::FTPじゃね?
117:デフォルトの名無しさん
07/03/23 07:36:19
>>113
ありがとうございます。やってみます。
>>115-116
Net::FTPで作ってたのですがこれだと相手に繋がらなくて客先の担当の方が
「wget使ってください」とのことでした。
118:デフォルトの名無しさん
07/03/23 08:57:31
wgetでとれてNet::FTPだとだめというのもかなり不思議だな。
原因はわかってるのかな。それともwgetだと実績あるから
調べるの面倒だしそれにしとけとあしらわれたか?
119:デフォルトの名無しさん
07/03/23 09:41:38
突然ですが、xxxyyy.html というファイル名のファイルの、
全てのa要素のhref属性値をzzzwww.html というファイルに出力する方法を教えてください。
120:デフォルトの名無しさん
07/03/23 09:56:38
>>118
passiveコマンド叩けば通るとかいうオチだったりして……
121:デフォルトの名無しさん
07/03/23 10:23:13
>>119
突然だねぇ・・・
122:デフォルトの名無しさん
07/03/23 10:24:01
>>119
ググレカス
URLリンク(module.jp)
123:デフォルトの名無しさん
07/03/23 17:56:12
突然DOMで対抗してみたり
javascript:a=document.getElementsByTagName('a');b='';for(i=0;i<a.length;i++)b+=a[i].href+'<br>';document.write(b);
124:デフォルトの名無しさん
07/03/26 16:19:01
>>117
pasv() しても駄目か?
ファイヤーウォールがある場合は passive mode にしないと駄目なことがあるぞ。
125:デフォルトの名無しさん
07/03/28 11:20:00
初心者質問で申し訳ないのですが、perlでコロン単体にはどのような意味があるのでしょう。
リファレンスを引いても載ってないし...。
126:デフォルトの名無しさん
07/03/28 11:49:02
三項演算子?
127:デフォルトの名無しさん
07/03/28 11:54:00
>>126
下記(*)の$_の手前にあるヤツなんですが・・
# CSV形式の $line から値を取り出して @values に入れる
{
my $tmp = $line;
$tmp =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
@values = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} …(*)
($tmp =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);
}
Perlメモ
URLリンク(www.din.or.jp)
128:デフォルトの名無しさん
07/03/28 12:05:15
どう見ても三項じゃん
129:デフォルトの名無しさん
07/03/28 12:12:49
なるほど。ありがとうございました。
130:デフォルトの名無しさん
07/03/29 01:14:28
substrで数値文字列から”001”のような文字列を切り出したいのですが、
デフォルトでは数値として扱われてしまい、1になってしまいます。
キャストの方法を調べたけど思うような情報が得られません。
もうしわけありませんが、教えていただけないでしょうか。
131:デフォルトの名無しさん
07/03/29 01:41:02
sprintfとかは?
132:デフォルトの名無しさん
07/03/29 08:07:32
>>130
ウチの環境下だと、普通に文字列認識なんだが変数かなんかに突っ込んで、
計算かましたりしてない?
% perl -le 'print substr qq{00001}, 3'
01
% perl -le 'print unpack qq{x3A2}, qq{00001}'
01
133:デフォルトの名無しさん
07/03/29 08:08:16
上げてもた…
134:デフォルトの名無しさん
07/03/29 08:27:21
文字列比較で $name == "admin" とかやってるのでは
135:デフォルトの名無しさん
07/03/29 14:13:36
+で連結してるとか。
136:デフォルトの名無しさん
07/03/29 19:40:09
$val="2007年3月29日○○の温度は20度、○○の温度は10度、○○の温度は15度";
のような文字列があった場合
○○の温度は10度の"10"を取得したいのですが、
どのように正規表現を書けばいいんでしょうか。
$value =~ /([0-9]+)/ のようにすると $1=2007 となりますが、
最大マッチしたうちのn番目を取得できたりする書き方があるんでしょうか
例がちょっとあれですが、○○には同じワードが入ることを想定してます。
137:デフォルトの名無しさん
07/03/29 19:42:39
本嫁
138:デフォルトの名無しさん
07/03/29 19:57:25
while ($val =~ /([0-9]+)/g){ push(@val, $1); }
print "$word[3]\n";
汚くなったけど、上記のようにしてなんとかできました。失礼しました。
139:デフォルトの名無しさん
07/03/29 20:08:05
まー本人がいいっていうのならいいよね(´・ω・`)
140:デフォルトの名無しさん
07/03/29 20:10:40
なにか他にやりかたあれば教えてください(つД`)
141:デフォルトの名無しさん
07/03/29 20:28:37
3年後に自分のコードみて「俺アホやん」 と思えたら、
君は著しく成長できたということだ。
142:デフォルトの名無しさん
07/03/29 20:45:58
3年とはのんきな話だな。3ヶ月で一定のレベルに達しないなら、その人が向いてないかまたはその言語に悪意が混入されているかだな。
143:壁|・ x ・)つ○
07/03/29 22:09:20
$val =~ /(\d+)度/g
144:デフォルトの名無しさん
07/03/30 12:21:03
>>142
そんなこと言うなよ
145:デフォルトの名無しさん
07/03/30 17:55:55
コーディングテクは日々進化し続けると思うけどなぁ。
俺が還暦を迎えた頃にはスゲーことになってると思うんだ。
146:デフォルトの名無しさん
07/03/30 21:01:15
base.pmなんだけど、
sub get_fields {
() = \%{$_[0].'::FIELDS'};
return \%{$_[0].'::FIELDS'};
}
「() =」これって何してるんでしょう?
perl5.003で動作するように書き換えられないかな?
147:デフォルトの名無しさん
07/03/30 21:06:28
>>146
コメントで「『タイポじゃねーの警告』は黙れ」と書いてあるだろ。
つまりその部分は動作とは無関係。
しかし5.003とはまた随分古いバージョンだな。せめて5.005あたりにしとけよ…。
148:デフォルトの名無しさん
07/03/30 22:23:03
>>147
すまん。
エラー書いてなかった。
Can't modify stub in list assignment at /path/to/base.pm line 43, near "};"
こんなのが出る。
> しかし5.003とはまた随分古いバージョンだな。せめて5.005あたりにしとけよ…。
大人の事情というやつで・・・。
149:デフォルトの名無しさん
07/03/30 22:58:15
>>148
URLリンク(search.cpan.org)'t_modify_%25s_in_%25s
- () = \%{$_[0].'::FIELDS'};
+ # () = \%{$_[0].'::FIELDS'};
+ local $^W = 0;
150:デフォルトの名無しさん
07/03/31 00:24:17
> 大人の事情というやつで・・・。
そんな仕事辞めてしまえよ
151:デフォルトの名無しさん
07/03/31 01:14:49
5.003を理由に依願退職する>148であった。
152:デフォルトの名無しさん
07/03/31 02:08:39
linuxのperl向けのIDEでお薦めはなんでしょうか
153:デフォルトの名無しさん
07/03/31 02:12:15
emacs一択。
あとEPICとか? つーかPerlにはいいIDEないよ。
154:152
07/03/31 02:51:38
ども
そうですか、ではボチボチとやってみます
155:デフォルトの名無しさん
07/03/31 02:53:14
春先は150みたいな
社会のしがらみスルー系のレスの
ネタっぽさが薄まるんだよな
156:デフォルトの名無しさん
07/03/31 03:48:41
(1..10)
は1から10までの数を持つリストを生成する式だと思うんですが、
$hoge = (1..10);
print $hoge;
とやればリストの最後の値である10が変数$hogeに代入されると思ったのに
なにも出力されません。
スカラー変数にリストを代入すると、リストの最後の値が代入されると思うんですが
どこが間違っているんでしょうか?
157:デフォルトの名無しさん
07/03/31 03:59:22
Perl7っていつ出るんですか?
158:デフォルトの名無しさん
07/03/31 04:02:35
>>156
↓を実行するとわかるけど、範囲演算子(..)が範囲内の値リストを生成するのは、
リストコンテキストの時。スカラーコンテキストでは、違う意味になるよ。
URLリンク(d.hatena.ne.jp)
while (<DATA>) {
chomp;
$hoge = (1..3);
print "$_ = $hoge\n";
}
__DATA__
AAA
BBB
CCC
DDD
EEE
FFF
159:デフォルトの名無しさん
07/03/31 04:05:29
..は範囲演算子。
$hoge = (1..10)
のようにスカラコンテキストで用いた場合、..の左項が真になった
時点から右項が真になるところまで真を返す。(...だとちょっと変わる)
いずれかの項が定数値であった場合、それは $. との比較であるとみなされる。
全く読み込んでいない状態なら $hoge の値は $. == 1 の結果に等しい。
160:デフォルトの名無しさん
07/03/31 04:17:29
最後のとこ、全く読み込んでいないなら、$. == 1の結果は偽、で。
161:デフォルトの名無しさん
07/04/01 16:28:17
>>158,159
...演算子もコンテキストで意味が変わるんですね。
わかりました。ありがとうございます。
162:デフォルトの名無しさん
07/04/02 04:58:36
perlのコミュは初心者に優しくて好きだ。
スクリプト言語経験者でも表記にとっつきにくいからかな。
マニュアル嫁で突っ返されることが少ない気がする。
(マニュアル読んでもわかんなかったりするし;ω;)
163:デフォルトの名無しさん
07/04/02 06:06:27
XpSP2でActivePerl-5.8.8.820-MSWin32-x86-274739.msiを
インストールしたんだけど、Jcode.pmがインストールされない。
なぜ?教えてください。
164:デフォルトの名無しさん
07/04/02 07:17:48
ActivePerlのことはよく知らんが、
Perl 5.8.0以降Jcodeが標準モジュールじゃなくなったからじゃないかな
165:デフォルトの名無しさん
07/04/02 09:35:55
>>164
5.8.0以降はJcode.pmが標準と聞きましたので
当然、インストールされると思ってたのですが、
探しても見つからないんですよ。
166:デフォルトの名無しさん
07/04/02 09:41:41
5.8.0からEncodeモジュールが標準装備になってるからそれ使え。
167:デフォルトの名無しさん
07/04/02 10:17:24
>>166
使っているアクセス解析プログラムがJcode.pm使っているんですよ。
perlのPG経験がないんで、改造も出来ないんです。
これです。
URLリンク(www.bflets.dyndns.org)
168:デフォルトの名無しさん
07/04/02 10:23:07
>>167
池沼か?標準じゃ入ってないと言ってるだろうが。
169:デフォルトの名無しさん
07/04/02 10:29:59
それじゃ別の方法、考えています
170:デフォルトの名無しさん
07/04/02 10:30:15
考えます
171:デフォルトの名無しさん
07/04/02 10:34:35
普通にJcode.pmインストールすりゃいいじゃないか。莫迦か
172:デフォルトの名無しさん
07/04/02 10:46:55
>>171
インストールしてもうまくいかないんですよ
やりかたが間違ってるかもしれませんが。
説明しているページで、そんなモジュールなかったり。
以下は参考にしたページです。
URLリンク(sakaguch.com)
win_install.plなんてないし。
マニュアルで置いても、変換後のファイルは0バイトだし。
173:デフォルトの名無しさん
07/04/02 11:33:15
>>172
Jcodeインストールするならコマンドプロンプトからppm(今時はppm-shellかな)を起動させて
install Jcode(enter)
で一発で入ると思うが。
174:デフォルトの名無しさん
07/04/02 11:57:01
>>173
ありがと
意味不明だけど、勉強してやってみる
175:デフォルトの名無しさん
07/04/02 12:17:49
つ[ perl -MCPAN -e shell ]
176:デフォルトの名無しさん
07/04/02 12:23:33
ありがと。ppmでインスコできた。
でも、うまく動かなった。
これはperlが原因じゃないから
ここで、さよなら。
じゃ、教えてくれた人、ありがと。
177:デフォルトの名無しさん
07/04/02 12:25:27
っ URLリンク(openlab.jp)
178:デフォルトの名無しさん
07/04/02 12:31:16
次から低レベルな質問は
webprog板でやってくださいね
179:デフォルトの名無しさん
07/04/02 13:02:54
>>178
そのわりに、明確な回答書いてる奴いねーけどな
180:デフォルトの名無しさん
07/04/02 13:14:06
こんな時間帯だからじゃないの?w
公式のは古いからいつものサードパーティの
所にver.2.06があるからそれをインストールするだけじゃん
181:デフォルトの名無しさん
07/04/05 09:34:45
すいません。正規表現についての質問なのですが・・・
abcあいうえお123./<>~"@
の様な文字列から日本語だけマッチするもしくはASCIIコードだけマッチさせるようにするには
どうすればよいのでしょうか?
182:デフォルトの名無しさん
07/04/05 10:12:57
>>181
文字コードをeucにして、
my $pat = pack("C*",0x20,0x21..0x7e);
/[$pat]+/ でASCII
/[^$pat]+/ で日本語(と制御コード)
183:デフォルトの名無しさん
07/04/05 10:15:20 BE:264938483-PLT(12980)
URLリンク(module.jp)
184:デフォルトの名無しさん
07/04/05 20:53:28
正規表現でのグループ化について質問です
$_ = 'AAAbarbarbazZZZ'; だとして
@a = /AAA(foo|bar|baz)+ZZZ/;
とすると、@a の中身は最後にマッチした @a = ('baz') 一つとなりますが、
これを @a = ('bar', 'bar', 'baz')
とする正規表現はあるでしょうか?
(){n} でなく ()+ を使ったのは数量が固定ではないためです。
なんらしか正規表現方法で
上記一文で済ませられたら…と思い質問させていただきました。
185:デフォルトの名無しさん
07/04/05 21:38:28
>>184
何でも一行に詰め込みゃいいってもんでもないけど…
@a = splice @{[ grep length, split /(foo|bar|baz)/, 'AAAbarbarbazZZZ' ]}, 1, -1;
186:デフォルトの名無しさん
07/04/05 21:55:26
確かに一行ですが…^^;レスありがとうございます。
'AAAfooXXbarYYYYYbazZZZ' のように目的外の物が混ざっている場合
のチェックを別にしなければなりませんが。
やはり ()+ でのマッチを正規表現の修正で全部リストする無理でしょうか
187:デフォルトの名無しさん
07/04/05 22:27:05
m/AAA((?:foo|bar|baz)+)ZZZ/
とかすれば全部とれることはとれる。
リストにはならないけど。
188:デフォルトの名無しさん
07/04/05 22:29:35
>>186
> 'AAAfooXXbarYYYYYbazZZZ' のように目的外の物が混ざっている場合
その場合 @a は () とするべきか
AAA foo XXbarYYYYYbazZZZ と分けるべきか
AAAfooXX bar YYYYYbazZZZ と分けるべきか
AAAfooXXbarYYYYY baz ZZZ と分けるべきか
>>184からは読み取れないよ?
189:184
07/04/05 23:22:15
レスありがとうございます
>>187
()+ での一気取得が駄目だった場合、私もそれを候補の一つに考えていました
リストにするには(foo|bar|baz)のマッチングがもう一回必要になってしまいますが
>>188
説明不足でした。申し訳ありませんでした
(ある程度大きいテキストから)
'AAA' と 'ZZZ' の間が (foo|bar|baz)+ のみで構成されている箇所を探し
その部分をリストとして取得したいと思っております
ですので、提示くださった選択肢の中では
>その場合 @a は () とするべきか
を考えています
(foo|bar|baz) の部分は実際はかなり重そうな正規表現の羅列と選択(|)で構成されていて
()+ による繰り返しも回数も非常に多く
(foo|bar|baz) のマッチングによる2度手間(切り出し・リストへ分割)は避けようと思い
今現在は下記の感じの処理を考えています
if (/AAA/) {
while ($' =~ /^(foo|bar|baz|ZZZ)/) {
if ($1 eq 'ZZZ') { OK; last; }
push(@a, $a);
}
}
}
そこで >>184 の質問するに至りました
マッチングも一回で一文で済ませられたら…と
長文失礼
190:184
07/04/05 23:38:24
>>189 の
while ($' =~ //)
は
while ($' =~ //o)
を考えています
今docを読み込んでいるんですが ()+ でのグループの繰り返しマッチングの
全リスト取得は、正規表現工夫しても仕様的に無理なのかな…
191:184
07/04/05 23:40:39
push(@a, $a) の行も間違えていました…
慌てて書き上げたもので
連投すみません
192:デフォルトの名無しさん
07/04/05 23:44:49
AAAとZZZの間だけでいいのか?
AAAの前や、ZZZの後ろは無視していいのか?
193:デフォルトの名無しさん
07/04/05 23:47:12
あと、入力データと出力データの例を具体的に示してくれ。
入力文字列と、それに対する@aの中身はどうなるのか。
194:デフォルトの名無しさん
07/04/05 23:51:08
>>190
1対の括弧につき1つの値が保存される仕様なんだから、
1回のマッチにおいて1対の括弧で複数個の値を得るのは
そりゃ無理だわな。
それに複雑な正規表現でバックトラックの嵐にするより、
幾つかのシンプルな処理に分けた方が速い。
if (/AAA/g) {
push @a, $1 while /\G(foo|bar|baz)/g;
}
195:デフォルトの名無しさん
07/04/05 23:52:06
マジレスすると、速度とか考慮するなら切り出して二段階とかにした方が速い。
まぁ、元のデータの性質が分からんと何とも言えんが。
196:こういうこと?
07/04/06 00:00:11
if(($x) = /^AAA(.+)ZZZ$/){
$x =~ s/(foo|bar|baz)/push @a, $1/ge;
}
197:196
07/04/06 00:06:16
ああ、AAAが行頭とは限らないのか。
198:184
07/04/06 00:15:33
>>192
はい。
/AAA(foo|bar|baz)+ZZZ/
これに厳密にマッチするところの(foo|bar|baz)のみを取得したいので
111AAAfooZZZ222 : 111 222 等は要りません
111AAAfooXXXbarZZZ222 : この場合 foo bar も要りません
111AAAfoofoofoobazbarZZZ222 : @a = ('foo', 'foo', 'foo', 'baz', 'bar') を取得したい
>>193
申し訳ありません。実際の入力データはお見せすることが出来ないので、
等価な具体例の作成も時間がかかってしまうかも知れません
上記例でご容赦ください
>>194
>そりゃ無理だわな。
ありがとうございます。
これが出来るのかどうかが一番知りたかったので、ふんぎりがつきました。
実際の具体例のデータを示せないので、(主に速度に関する)お答えは難しいですよね。
その中でも例やヒントを示してくださった方々ありがとうございました。
内部的な処理は詳しくないのですが、試行錯誤しながら参考にさせていただきたいと思います。
皆さんレスありがとうございました。(_ _)
199:デフォルトの名無しさん
07/04/06 04:08:13
>>198
どういたしまして
200:デフォルトの名無しさん
07/04/06 08:54:56
仕事丸投げするのはいいが、藻前さんが辞めた後にメンテする人のことも
わかってやれよな。
201:デフォルトの名無しさん
07/04/06 09:31:06
括弧に量指定子使うのきめえ
202:デフォルトの名無しさん
07/04/06 10:26:07
foo,bar,bazが3文字って決まってるならこれでどうよ。
$_ = '111AAAfoofoofoobazbarZZZ222';
/AAA(?:(foo|bar|baz)(?{push(@a,substr($&,-3))}))+ZZZ/;
print join(",",@a),"\n";
203:デフォルトの名無しさん
07/04/06 11:15:13
つーか、そもそもどうしてそんなデータ構造なのかが気になる件。
204:デフォルトの名無しさん
07/04/06 11:30:16
宿題?
205:デフォルトの名無しさん
07/04/07 13:27:01
########################################
# データ内に改行が無ければ最初の二行は
# $_ = <>; で置き換え可能
########################################
chomp(@tmp = <>);
$_ = join '', @tmp;
$re = qr/foo|bar|baz/i;
s!(AAA(?:$re)+ZZZ)!push @a,$1=~/($re)/g !ge;
print join("-", @a);
これはひどい。
206:デフォルトの名無しさん
07/04/07 13:37:01
qrのオプションは i じゃなくて o だった。
207:デフォルトの名無しさん
07/04/08 15:55:23
perlでlogの基数が2の場合を求めるには何をつかうのが
ベスト??
車輪の再発明はしない方向で・・・
208:デフォルトの名無しさん
07/04/08 15:56:59
>>207
底の変換公式
209:デフォルトの名無しさん
07/04/08 16:29:00
>>208
thx
210:デフォルトの名無しさん
07/04/08 21:57:13
仕事で初めてPerl使うんだが難しいな('A`)
211:デフォルトの名無しさん
07/04/08 23:12:16
Cやってりゃ、Cのマクロ言語だと思って書いてれば当座はしのげる。
嵌りどころはあるが、「難しい」ではなく「勝手にいじるなよ!」ってな感じ。
Cの派生言語からでも同様。
「難しい」ってのは今までまっとうな言語の経験がないからじゃないかと思う。
212:デフォルトの名無しさん
07/04/08 23:59:21
つーか、Cみたいな型がキッチリしたのから移行すると、
なんとなく気持ち悪いw
213:デフォルトの名無しさん
07/04/09 00:12:22
>>212
Cの原始的な型じゃ、実際にコードを書くときたいして助けになってくれてないだろう。
目糞鼻糞だと思うんだけど。
214:デフォルトの名無しさん
07/04/09 00:21:03
俺は、あくまでもテキスト処理用と考えたらすんなり入れた。
Cだと文字列めんどくせえし、C++と比べても正規表現処理のためのコード量がぜんぜん違うからな。
215:デフォルトの名無しさん
07/04/09 00:22:52
>>213
そうでもない。例えばプロトタイプ宣言をちゃんと使っていれば
誤った引数を渡したりしたときなど、コンパイルエラーとして
コンパイルの時点で捕捉出来るし、プロトタイプ宣言自体が
関数の使い方に関する一番簡単なドキュメントになる。
216:デフォルトの名無しさん
07/04/09 00:27:16
>>214
テキストをちょろっと弄くるには便利だよね。
クラスやリスト、リファレンス等の基本的な仕組みが
adhoc過ぎて汚いし(←個人的見解)
プログラムが大きくなればなるほど型付静的言語の有り難味が増す。
Perlで小さいプログラム以上のものを書く気にはとてもなれない。
同じ動的言語でも、Pythonあたりならまだ許容量大きいかな。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5368日前に更新/220 KB
担当:undef