Perlについての質問箱 30箱目at TECH
Perlについての質問箱 30箱目 - 暇つぶし2ch1:デフォルトの名無しさん
07/03/14 22:54:12
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 URLリンク(pc8.2ch.net) )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

URLリンク(www.perl.org)
● 2006/12/21現在の最新版: 5.8.8
● 2006/12/21現在の開発版: 5.9.3

前スレ
Perlについての質問箱 29箱目
スレリンク(tech板)

リンク集は>>2-3
過去スレは>>4

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あたりならまだ許容量大きいかな。

217:デフォルトの名無しさん
07/04/09 00:28:33
そゆことだな。主にバイナリ扱うとなると、Cみたいなのが書きやすい。
文字列はperlみたいなのが楽だが。

218:213
07/04/09 00:40:57
>>215
ああ、そういえばそうだ。目糞鼻糞は撤回する。

219:デフォルトの名無しさん
07/04/09 00:41:27
>>217
バイナリとかバイト/文字単位の処理だとpack(), unpack()の嵐だわな。
それ考えると、文字列処理とか言っても正規表現使いやすいだけって希ガス。
エンコーディング周りもそんなに便利とは言えないし。

220:デフォルトの名無しさん
07/04/09 06:15:36
っ 適材適所

221:デフォルトの名無しさん
07/04/09 07:43:02
ある種の物事を異常に早く片付けられる、それがPerl。

222:デフォルトの名無しさん
07/04/09 19:15:26
元々perlは文字列処理用なんしょ。

しかし、たとうばHTMLのタグを外す処理を書く ってなった時、
perlなら簡単だけど、Cで書くとなると工程からして憂鬱だ…。
regexp.dll使うけど、メモリリーク等に気を遣わないとで面倒だ…。

223:デフォルトの名無しさん
07/04/09 20:53:41
やっぱ言語組み込みのが楽だよね・・・正規表現は

224:デフォルトの名無しさん
07/04/09 21:53:11
>>222
まぁCで文字列処理はちょっとな。
どうしても(C++でなく)Cを使う必要があるのなら、せめて
GCライブラリを使いたいところ。
C++なら、文字列処理は別に苦にはならないはず。

それとCで字句/構文解析ならlex/yaccを使う場合も
多いんじゃないかな。

225:デフォルトの名無しさん
07/04/10 17:49:24
この記事どうしてくれよう
URLリンク(gigazine.net)

226:デフォルトの名無しさん
07/04/10 18:03:28
>>225
マジかと思ってUserAgentをlibwwwにしてググったらほんとに検索できなかった。
一時的な効果しか無いだろうに、アホな対応するなぁ…。

これからは適当なAgentを騙れってことでOK?

227:デフォルトの名無しさん
07/04/10 18:18:39
IEのにあわせておくもんだろ

228:デフォルトの名無しさん
07/04/10 19:15:26
>>226
libwww-perlを拒絶しても、本当に悪い奴は遮断できず、
入門過程の新参者を困惑させ余計な時間をとらせるだけ。

まさに1000害あって1利なし。

229:デフォルトの名無しさん
07/04/10 19:59:13
所詮Google。

230:デフォルトの名無しさん
07/04/10 22:32:59
つまり、おまえらpython使えの意


231:デフォルトの名無しさん
07/04/10 22:39:48
その発想はなかったわ・・・

232:デフォルトの名無しさん
07/04/10 22:59:00
フォームへのスクリプト拒否してるからでしょ

233:デフォルトの名無しさん
07/04/11 00:55:09
>>232
んなもんどうでもなるやん。何の意味があるのかさっぱりわからん。

234:デフォルトの名無しさん
07/04/11 01:45:44
2,3日で元のスパムの量に戻るに1ペリカ

235:デフォルトの名無しさん
07/04/11 10:26:47
今更ながらどうもコマンドラインがよく飲み込めてないかもしれないので、
少しお尋ねします。
例えば
perl -pi.bak -e "tr/A-Z/a-z/"*.html
とか便利ですよね?
これを.plとして使いたいのですが無理なのでしょうか?
コマンドラインから打ち込むしか手がないのでしょうか?

236:デフォルトの名無しさん
07/04/11 10:40:03
>>235
perlrun(1)の-iオプションの説明のとこに例があるだろ。よく嫁。

From the shell, saying

$ perl -p -i.orig -e "s/foo/bar/; ... "

is the same as using the program:

#!/usr/bin/perl -pi.orig
s/foo/bar/;

which is equivalent to

#!/usr/bin/perl
$extension = '.orig';
LINE: while (<>) {
if ($ARGV ne $oldargv) {
(改行大杉でおこられるので以下略)

237:デフォルトの名無しさん
07/04/11 10:40:50
スレリンク(php板:593番)
スレリンク(tech板:235番)

238:デフォルトの名無しさん
07/04/11 10:49:06
>>236
アリガトウございます。
なお、質問するスレが似つかわしくないと重い他スレにも同じ内容を質問させていただきましたが
ご迷惑かけたようで申し訳ないです。

239:デフォルトの名無しさん
07/04/11 11:06:13
>>235
windowsだとどうも面倒なようなので他の手にします。お騒がせしました。

240:デフォルトの名無しさん
07/04/11 11:33:56
手軽に使えるようになればいいだけなら、適切なオプション
与えたperlをsystemかexecで起動するようなスクリプト書く
手もあるよ。

病的に効率を気にする人にはお勧めしませんけど。


241:デフォルトの名無しさん
07/04/11 21:53:06
>>239
Windowsなら.batに書けばいいんじゃね?
なんで.plにこだわるのかわからん

242:デフォルトの名無しさん
07/04/11 22:50:12
YAPC::Asia 2007 Tokyoのpodcastでてるけど、これは聞いとけってものある?

243:デフォルトの名無しさん
07/04/11 23:15:28
んだ

244:デフォルトの名無しさん
07/04/12 01:10:07
> YAPC::Asia 2007 Tokyoのpodcastでてるけど、これは聞いとけってものある?

馴れ合いなので、聞く必要なし

245:デフォルトの名無しさん
07/04/12 04:01:25
>>242
見事になんにもなし。


246:デフォルトの名無しさん
07/04/13 05:01:57
>>240
ありがとうございます。
>>241
いえ。こだわってないから他の手にするつもりです。
UNIX環境でないとなかなか不便なものなんですね。

247:デフォルトの名無しさん
07/04/13 22:58:40
>>246
>UNIX環境でないとなかなか不便なものなんですね。

この点は同意なんだけどね。
しかし、キミが不便だと言っている点についてオレは不便を感じたことはないな。

248:デフォルトの名無しさん
07/04/14 00:31:00
そんなに頻繁に使うようならスクリプトをちゃんと書けよ
てかperlの質問じゃなくて、コマンドラインについての質問だよな・・・

249:デフォルトの名無しさん
07/04/14 13:30:37
>>247
>しかし、キミが不便だと言っている点についてオレは不便を感じたことはないな。
主観的且つ感情的な意味でしょうか?そうではないとしたら何か理由がおありですよね?
不便と思わない理由はなんでしょうか?
>>248
スレ違いになるかもですね。
そろそろ退散したいと思います。

250:デフォルトの名無しさん
07/04/14 13:32:25
>そんなに頻繁に使うようならスクリプト


251:デフォルトの名無しさん
07/04/14 17:11:52
#!/usr/bin/perl
# >>235 の望みを叶える夢のスクリプト:
exec 'perl', '-pi.bak', '-e "tr/A-Z/a-z/"', shift;
__END__

252:デフォルトの名無しさん
07/04/14 22:29:21
>>251
頭大丈夫?

253:デフォルトの名無しさん
07/04/14 22:41:39
大丈夫な人も大丈夫じゃない人も大丈夫って答えるから
間抜けな質問というしかない。

254:デフォルトの名無しさん
07/04/14 22:55:57
>>184
@a = grep {/(foo|bar|baz)/} split /(foo|bar|baz)/ , $_;


255:デフォルトの名無しさん
07/04/14 23:30:26
こんばんは。
会社のHP作成を引き継いだのですが、わからないことがあるのでどなたか教えていただけないでしょうか。
コンボボックスを外部のテキストから読み込んでいるのですが、途中までしか表示されないのです。
0<>--<><>
1<>A<><>
2<>B<><>
3<>C<><>
4<>D<><>
5<>E<><>
6<>F<><>
7<>G<><>
8<>H<><>
(中略)
14<>N<><>
上記が外部テキストの中身なのですが、コンボボックスには8までしか表示されないのです。
コンボボックスの方は
#編集モード以外は表示するだけ、編集モード時はコンボボックスで表示
if (!$edit) {$html .= "<td align=\"center\"><table width=\"100%\">";
for ($l = 0; $l < $periods; $l++) {
if ($showpname) { $html .= "<tr><td>$periodname[$l]</td>"; }
$html .= "<td align=\"center\">$STATUSSTR[$stats[$l]]</td></tr>";}
$html .= "</table></td>\n";}
となっています。
全てを表示させるようにするにはどこを変えたらいいのでしょうか。
(これだけの情報では不十分でしたらすみません。
 他にどんな情報が必要かも教えていただければ幸いです)
Perl関連の本など読んでみたのですがわからなくて…
宜しくお願いします。

256:デフォルトの名無しさん
07/04/14 23:36:54
コンボボックスじゃなくて表で表示するコードに見えるが・・・。

257:デフォルトの名無しさん
07/04/14 23:48:58
>>256さん
あ、もしかしてここは関係なかったですかね…
カレンダーの1日ごとにコンボボックスが入っているので、そのカレンダーの方のコードなんでしょうか…
わからないことだらけのまま質問してしまってごめんなさい。
もう一度コードを見直してみます。

258:デフォルトの名無しさん
07/04/14 23:53:55
読み込まれたテキストデータがコンボボックスのどの変数になってるのかがわからない。
perlコードの、$periods、$showpname・・・とやらが何なのかわからないと
何もアドバイス出来ないよ。

259:デフォルトの名無しさん
07/04/15 00:03:49
>>258さん
そうですか…
$periodsなどなどは専門用語なのかなぁ、と思っていたのでそこから間違いだったのですね。
前任者とは全く連絡が取れず、初心者の私には何がなにやらさっぱりで…
失礼致しました。
もっと勉強して出直します!

260:デフォルトの名無しさん
07/04/15 00:23:13
periodつーたら何らかの「期間」じゃないのか?


261:デフォルトの名無しさん
07/04/15 00:39:39
>>260さん
期間…カレンダー関係ですかねぇ。
日ごとにアルファベッドを選択して登録するんですけど、
何ヶ月か分をまとめて登録してそれをScriptで(?)違うページに呼び出すので、それですかねぇ…
それにしても8番までしか出てこないのもどこかで指定してるんですかねぇ。
あまりにファイルが多すぎて、探すのに時間がかかりそうです…

262:デフォルトの名無しさん
07/04/15 00:52:49
>>255
本当にそのコードが該当コードなのかどうか怪しいね
ありうるとすれば@STATUSSTRの中が"<select>…"といったhtmlになってるとか

とりあえずPerlの配列変数は先頭の記号が $ だったり @ だったりするので
それだけ注意して変数をさかのぼって行くとか

お節介だけど$showpnameのif文、通らない場合に開始<tr>タグ欠けるよ

263:デフォルトの名無しさん
07/04/15 01:03:42
俺なら解読するの諦めて書き直したくなるな

264:デフォルトの名無しさん
07/04/15 01:56:12
>>255
エスパーのおいらが予測するには、>>255 が挙げた箇所の次に
} else {
という行があり、その後の部分が問題の部分なんだろうな。

265:デフォルトの名無しさん
07/04/15 06:52:58
perlのソースコードの中に直接HTMLが書かれているなら
「type="select"」あたりで検索すれば、該当個所の近辺の
コードに当たるんじゃないか?

266:265
07/04/15 06:55:31
間違えた。「type="select"」じゃなくて「<select」だな。

267:デフォルトの名無しさん
07/04/15 23:51:49
>>255さんには内緒で、実はその前任者さんをこのスレにお呼びしています^^。
実は前任者さん、その書き込みの様子をモニターを通して見ておりました。
では、心に引っかかっていた辛い過去。
あの時、伝えられなかった想いを今、、、

268:デフォルトの名無しさん
07/04/16 00:50:06
perlの時代は終わった・・・
これからの初心者は、今の時代に合った言語を使ってくれ・・・

・・以上

269:デフォルトの名無しさん
07/04/16 00:53:48
ruby?python?

270:デフォルトの名無しさん
07/04/16 01:04:26
情報保護の時代だからな。
Whitespaceだろ。

271:デフォルトの名無しさん
07/04/16 04:53:46
仕事をPHPいじってから、Perlを汚い言語だなんて言ってた自分の愚かさに気づいた。
Perlは消えなくていい。PHP、頼むから消滅してくれ。

272:デフォルトの名無しさん
07/04/16 04:56:25
s/(?<=仕事)を/で/

273:デフォルトの名無しさん
07/04/16 06:08:15
255です。
皆さんどうもありがとうございます。参考になりました!
ここで皆さんにお聞きするにはあまりにも自分が無知すぎて申し訳ないです。
更新は休みの土日しかできないので、来週までに色々調べてまた挑戦します。

>>262さん
なるほど…
<tr>タグの件、ご指摘ありがとうございます!

>>263さん
書き直すなんて絶対無理ですので頑張って解読したいと思います…

>>264さん
} else { って部分あります!!
その部分に注意してみます。

>>265さん
検索ですね。htmlがperlの中にあるので試してみます!

>>267さん
実は前任者とは全く面識がないので、あの時も何もあったもんじゃない、って感じなのですが…

274:デフォルトの名無しさん
07/04/16 14:16:33
>>225
すんげー今更だな
google出来た頃から規約に書いてあるし
URLリンク(www.google.co.jp)

275:デフォルトの名無しさん
07/04/17 06:50:02
まさかLWP使ったらすべて自動クエリだとか思ってる訳じゃないよな。

276:デフォルトの名無しさん
07/04/17 06:59:52
>検索結果ページに対して

ってあるからなぁ

277:デフォルトの名無しさん
07/04/17 13:36:22
質問です

$var = 010203 とあります

これを
$var = 01/02/03

このように2桁ごとにスラッシュを入れるにはどうしたらよいでしょうか?

0102 や 01、01020304 の場合などどの桁数にも対応したいです

278:デフォルトの名無しさん
07/04/17 13:43:51
 perl -e '$var="010203"; $var=~s/([0-9]{2})/$1\//g;print $var;'

279:デフォルトの名無しさん
07/04/17 15:07:07
ありがとうございます
できました

280:デフォルトの名無しさん
07/04/17 15:48:19
正規表現の中にスラッシュがあるときはエスケープするより
s{([0-9]{2})}{$1/}g
とかの方が良い気がする

281:デフォルトの名無しさん
07/04/17 16:06:26
0-9より\dのがいい気がする

282:デフォルトの名無しさん
07/04/17 16:11:38
'010203' のとき '01/02/03/' になる気がする

283:デフォルトの名無しさん
07/04/17 16:44:03
s{\d{2}(?=\d)}{$&/}g;
かな

284:デフォルトの名無しさん
07/04/17 17:15:38
$& 使うくらいだったら普通に join したくなるなあ、俺は。
perl -le '$var = qq{010203} ; print join q{/}, ( $var =~ /(\d{2})/g )'

285:デフォルトの名無しさん
07/04/17 19:37:56
まあ一般には \d は 0-9 の必要条件であって同値ではないけどな。

286:デフォルトの名無しさん
07/04/17 19:46:31
こういうことか
$ perl -e 'use utf8; print q[0] =~ /\d/'
1

287:デフォルトの名無しさん
07/04/17 22:03:19
J2EEの方がいい気がする

288:デフォルトの名無しさん
07/04/17 22:40:33
>>277
3桁区切りにカンマをつけるというのがよくあるから
それを参考に好きなの使えば?

289:デフォルトの名無しさん
07/04/17 22:57:26
>>282
答えはそれでいいんだろ?

290:デフォルトの名無しさん
07/04/17 23:59:03
>>289
質問者の出してる例はそうは言ってないぞ。

291:デフォルトの名無しさん
07/04/18 03:02:24
>>277
Date::Manipでできんじゃね?

292:壁| x ・)つ○
07/04/18 03:09:07
こういうのは こうりつわるいですか?
for ($i = 2; $i < rindex($var, ""); $i += 3) {
  substr($var, $i, 0) = "/";
}

293:デフォルトの名無しさん
07/04/18 12:07:56
$var = reverse( ( $var = reverse $var ) =~ s{(\d\d)(?=\d\d)}{$1/}g );

294:デフォルトの名無しさん
07/04/18 12:18:50
近頃はs#・・・#・・・#って書き方見なくなったな

295:デフォルトの名無しさん
07/04/18 13:07:55
>>292
人間の読み書きの部分で効率悪いと思う

296:デフォルトの名無しさん
07/04/18 14:36:58
1 while $var =~ s/(\d{2})(\d{2})/$1\/$2/g;

297:デフォルトの名無しさん
07/04/18 14:43:01
s/(\d{2})(?=\d{2})/$1\/$2/g

298:デフォルトの名無しさん
07/04/18 16:53:45
>>297
$2なんてないじゃん

299:デフォルトの名無しさん
07/04/18 17:11:53
>298
なにを言っているんだお前は。

300:デフォルトの名無しさん
07/04/18 17:40:37
いやさ、 (?= ) は後方参照を生成しないだろう?
> perl -e "q/123/ =~ /(\d)(?=\d)(\d\d)/; print $2;"
23

そもそも、(?= )はゼロ幅先読みだろう。
> perl -e "q/123/ =~ /(\d)((?=\d))/; print $2;"
(出力なし)

301:デフォルトの名無しさん
07/04/18 20:54:57
>>295 なるほど ワンライナーでさらっとかけるよう しょうじんいたします
・)つ● ←おれいのしな

302:デフォルトの名無しさん
07/04/19 10:56:55
>>300
そのとおり。適切な指摘ありがと。書いてから気がついた。
>>283か、
s|(\d\d)(?=\d)|$1/|g
みたいな感じで。

303:デフォルトの名無しさん
07/04/19 22:59:05
ファイル出力の質問です

open IN , ">$failename";
print IN , "test;
close IN;

で、$filenameに絶対パスを入れたいんですが、なんかうまく言ってくれないんです Orz
助けてエロい人

304:デフォルトの名無しさん
07/04/19 23:02:26
>>303
> で、$filenameに絶対パスを入れたいんですが、なんかうまく言ってくれないんです Orz

さあ、「なんかうまく言ってくれないんです」の「なんか」を推定するクイズです!!


305:デフォルトの名無しさん
07/04/19 23:08:28
これは流石に釣りだろう

306:デフォルトの名無しさん
07/04/19 23:11:10
エスパーの私がお答えしよう。

Windows で \ 記号がディレクトリ名の区切りなもんだから
ダブルクォーテーションで括っただけだとエスケープと
解釈されちゃって変な文字列完成。→オープン→エラー。
そんなファイルはねえよヴォケと $! に入っている。


307:デフォルトの名無しさん
07/04/19 23:34:21
$failename (フェイルエネーム?) だからではないか・・・なんてことはないか。
そもそも IN じゃなくて OUT だろうと

use Fatal qw(open close);
open my $out, '>', $filename;
print {$out}, "test";
close $out;

308:307
07/04/19 23:39:40
- print {$out}, "test";
+ print {$out} "test";

309:デフォルトの名無しさん
07/04/19 23:40:55
{$out}

310:デフォルトの名無しさん
07/04/19 23:54:37
{$safe}


311:265
07/04/19 23:58:02
$failename =~ s/^/zettaipath\/;

312:303
07/04/20 00:05:38
みなさま マジでありがとうです
こんな初心者をささえてくれてありがとお つω;

313:デフォルトの名無しさん
07/04/20 01:32:59
なんかうまく言えました

314:デフォルトの名無しさん
07/04/20 03:42:05
うまく言えないけれど宝物だよ

315:デフォルトの名無しさん
07/04/20 03:53:44
僕たちはできる!! できるんだ!!

316:デフォルトの名無しさん
07/04/20 03:54:26
最高ですか!!?
最高です!!!

317:デフォルトの名無しさん
07/04/20 12:14:51
プラス思考のスレはここですか?

318:デフォルトの名無しさん
07/04/20 15:30:27
プラス指向プログラミング POP

319:デフォルトの名無しさん
07/04/20 19:25:20
@http = $_ =~ /s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/g;
print FILEA @http;
このような記述をしたら、
Variable "@http" is not imported at http-client.pl line 53.
Variable "@http" is not imported at http-client.pl line 54.
Global symbol "@http" requires explicit package name at http-client.pl line 53.
Global symbol "@http" requires explicit package name at http-client.pl line 54.

と言われました。
これは何のエラーですか!?

320:デフォルトの名無しさん
07/04/20 22:19:47
@httpを括弧でくくってください

321:デフォルトの名無しさん
07/04/20 23:21:12
>>319
Variable "@http" is not imported については、perldiagをどうぞ。
というか、「何の」もなにもperlが出しているエラーなんだからまずはここで調べるべし。
URLリンク(perldoc.jp)

とりあえず、use strictなのに @http が生で使われているのが原因ですので、パッケージを明示的に
指定して使うか、my宣言すればいいのでは。

322:デフォルトの名無しさん
07/04/21 23:17:55
PDFを解析したいんですが、どのような方法で読み込んでいったらいいと思いますか?
ちなみに、PDFの仕様として:

・改行文字はCR,LF,CRLF,のどれでもよい。
・文字列内での改行文字はそのままのかたちで残さなければならない。
・文字列内で(見た目のために)改行したいときは \改行文字 とする。

read(FILE, $buf, 512) ってのもめんどくさそうだし、できれば while(<FILE>) で
済ましたいんですが、意味のある改行もあるしなぁ。。。


323:デフォルトの名無しさん
07/04/22 00:20:39
>>322
何をしたいのか知らんが、まずCPANでPDF関係のモジュールを
サーチしたほうがいいね。
あなたがしたいことを既に実現しているモジュールがあるかもしれないし、
少なくとも、改行文字の扱い方については、ソースの中にお手本が
あると思うし。

324:303
07/04/22 04:50:29
303ですが またまた超初心者な質問です。

requier './jcode.pl';

sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis'); }

ってコードがあったのですが
&jcode の後ろについている ' の意味がわかりません。

もしかして
&jcode::convert(*msg,'jis');
と同義ですか?

エディターの色分けが気持ち悪くなるので直したいです。教えてエロい人 Orz

325:デフォルトの名無しさん
07/04/22 05:35:13
Perl4

326:デフォルトの名無しさん
07/04/22 05:37:45
>>324
エロい人よりマニュアルに頼ろうよ。

<q cite="URLリンク(www.kt.rim.or.jp)
古いパッケージ区切り子はシングルクォートでしたが、
現在はダブルコロンを使うのが推奨されています。
</q>

URLリンク(mikeneko.creator.club.ne.jp)

327:324
07/04/22 11:13:18
なるほど! ありがとうございました ><

Jcodeの使い方も含めて勉強してきます ><ノ

328:デフォルトの名無しさん
07/04/22 14:43:25
CPAN でインストールする際に以下のようなメッセージが出て失敗します。

Undefined subroutine &Compress::Zlib::gzopen called at /usr/local/lib/perl5/5.8.8/CPAN.pm line 5721.

何をインストールしても大体このエラーが出て失敗します。

Zlib は、
/usr/local/lib/perl5/site_perl/5.8.8/Compress/Zlib.pm
にあって、サブルーチン gzopen もありました。

また、@INC に /usr/local/lib/perl5/site_perl/5.8.8 は含まれていました。

どこに問題があるか分からないのですが、教えてもらえないでしょうか。

環境は、
OSX 10.4.9 で Perl 5.8.8 を /usr/local/bin にインストールしました。

329:デフォルトの名無しさん
07/04/22 16:09:08
>>328
あえて /usr/bin/perl ではなく /usr/local/bin/perl を使いたいわけね?
で、実際に使ってる(環境変数 PATH で優先的に参照される)のは /usr/bin/perl ではなく、
/usr/local/bin/perl ってことに間違いはない?

330:デフォルトの名無しさん
07/04/22 16:35:51
>>329
レスありがとうございます。

>あえて /usr/bin/perl ではなく /usr/local/bin/perl を使いたいわけね?
はい。ソースコードからインストールしたらそこにインストールされたので、
/usr/local/bin/perl を使っています。

>で、実際に使ってる(環境変数 PATH で優先的に参照される)のは /usr/bin/perl ではなく、
>/usr/local/bin/perl ってことに間違いはない?
間違いないはずです。
which perl で確認しました。

CPAN.pm の該当箇所をみると、
$CPAN::META->has_inst("Compress::Zlib") で判定した後に、
Compress::Zlib::gzopen を呼び出していました。
そこで gopen がないとなる理由がよく分かりません。

331: ◆TWARamEjuA
07/04/22 17:40:08 BE:2287837-2BP(6823)
>>330
> >で、実際に使ってる(環境変数 PATH で優先的に参照される)のは /usr/bin/perl ではなく、
> >/usr/local/bin/perl ってことに間違いはない?
> 間違いないはずです。
> which perl で確認しました。
$env
してみると判るけれども標準ではpathが通っていないと思うですです。
PATH=/bin:/sbin:/usr/bin:/usr/sbin
@MacOSX 10.4.9

もっぺん確認してみよう♪

♯tu-ka未だに5.8.6のままなんだよなぁ。。。(´・ω・`)
$ perl -v

This is perl, v5.8.6 built for darwin-thread-multi-2level
(with 3 registered patches, see perl -V for more detail)

332:デフォルトの名無しさん
07/04/22 17:55:38
>>331
レスありがとうございます。

$env
で確認してみましたが、先頭に/usr/local/binがありました。
PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin

こうなるように、以前./bash_profile に追加しました。
となると、原因は不明でしょうか?
インストールの仕方が悪かったのかなあ。

333:デフォルトの名無しさん
07/04/22 20:53:01
CPANなんてまともに動作すると思うほうがおかしい。
手動で入れろ。

334:デフォルトの名無しさん
07/04/22 21:21:50
>>323 THX
PDFファイルのすべてを把握するのが目的です。

CPANをみたところ、PDFのテキストや書誌情報を抽出したりするためのAPIは用意されてる
のですが、もっと低レベルなパーサーがないようです。。

各種トークンが出現するたびにイベントを起動するような奴がほしいんですが。
HTML::ParserのPDF版でPDF::Parserみたいな感じの奴です。


335:デフォルトの名無しさん
07/04/22 23:26:59
日曜潰してまだ分からないので、どなたか助けてください\(ToT)/
UTF-8でURIエスケープされた文字列を、アンエスケープするPerlの処理でけつまづいてます。

元の文字列をURIエスケープした文字列がサーバ側まで来ているのは確認しました。
「質問」→「%E8%B3%AA%E5%95%8F」だとか、「ü」→「%C3%BC」だとか。

これを
$utf8str =~ s/%([a-f\d]{2}/pack('H2',$1)/egi;
しても、正しくアンエスケープされない(文字化けする)のです。
UTF-8が可変バイトなのが曲者なのでしょうか。。。

ググった先(URLリンク(oshiete1.goo.ne.jp))の
$utf8str =~ s/%(e[a-f\d])%([a-f\d]{2})%([a-f\d]{2}/pack('H2',$1).pack('H2',$2).pack('H2',$3)/egi;
してもやはりだめでした。

336:デフォルトの名無しさん
07/04/22 23:56:33
>>333
むあじっすか。

337:デフォルトの名無しさん
07/04/22 23:59:22
>335

use Encode qw/from_to/;
my $str = '%E8%B3%AA%E5%95%8F'; # utf8の'質問'をエスケープ
(my $dec = $str) =~ s/%([a-f\d]{2})/pack 'H2', $1/egi;
from_to($dec, 'utf8', 'cp932'); # Winのコマンドプロンプトで表示するのでcp932にしてる
print $dec;

とりあえずこれで動いてるけど? ブラウザに出してるんなら、Shift_JISって解釈されてるとかじゃない??

338:デフォルトの名無しさん
07/04/23 00:01:31
>>335
> $utf8str =~ s/%([a-f\d]{2}/pack('H2',$1)/egi;
$1のための括弧が閉じられてません。

あとは、UTF-8に対応したEditorで開いてないとかでしょうか。
上の式で正しくアンエスケープされました。


339:デフォルトの名無しさん
07/04/23 00:35:06
括弧閉じ忘れでごめんなさいorz
>>337さんのスクリプトを実行したところ、文字化けしませんでした。
また、from_toする前でも、ファイルにリダイレクトして、
そのファイルをエディタで開いても同様に文字化けしていませんでした。

しかし、サーバに持って行ってブラウザに結果を出すと文字化けしてしまいます。
エディタはUTF-8に対応していて、Perlスクリプトもutf-8で保存して、
use utf8; use open ":utf8"; use open ":std";して、
print "Content-type: text/html; charset=utf-8\n\n";
いるのですが、
>>337さんのものでprint $dec;でもprint $str;でも駄目(文字化け)でした。
環境はWin XP SP2 + IE7、[表示]-[エンコード]でもUTF-8であることを確認しているのですが。。

度々で申し訳ないのですが、他に何か怪しい箇所がありますでしょうか?

340:デフォルトの名無しさん
07/04/23 00:49:03
#!/usr/bin/perl

my $str = '%E8%B3%AA%E5%95%8F';
(my $dec = $str) =~ s/%([a-f\d]{2})/pack 'H2', $1/egi;

print "Content-Type: text/plainl; charset=utf-8\n\n";
print $dec;

__END__

とりあえず手元だとこれで動いてる。まずは問題の発生する最小限のコードまで切り詰めてみ?

341:337
07/04/23 01:17:20
ありがとうございました!解決しました。
use open ":std";が余計でした(よく分からないのに「おまじない」で書くのは駄目でしたね)。
問題のスクリプトから上記を除いて、かつ、
自分で作って読んでいるモジュールからも上記を除きました。
本当にありがとうございます!

342:デフォルトの名無しさん
07/04/23 01:18:56
自分(↑)は>>337さんでなくって>>335でした。お目汚しでごめんなさい。
標準入出力を使わないなら、use open ":std";等は確かに不要でした。

343:335
07/04/23 03:15:36
事後報告がてら・・・
use open ":std";を外せばアンエスケープで文字化けしないものの、
今度は後続処理でUTF-8な文字を処理できないという問題がありました。

結局、以下のサイトを参照して、
URLリンク(naoya.dyndns.org)
use open ":std";は残したままで、アンエスケープ処理の後に
utf8::decode($str);でUTF8フラグを落とせば、
スクリプトへのUTF-8文字列の受け渡しも、後続処理も、うまく行きました。

夜更けにお答えくださって、本当にどうもありがとうございました。
これで安心して眠れそうです。

344:デフォルトの名無しさん
07/04/23 18:08:16
■ Perl言語 ■ 何でも質問コーナー ■
URLリンク(mixi.jp)
Perlに関すること、cgiに関すること
なんでも質問できるコーナーです(たとえばApacheとかでもOKとします!)
(Web系であればOK)

ルール:
Google検索で調べてわかるようなことでも質問してもOKです
(初心者のうちは、どの情報を取捨選択したらイイのかわからないと思うので)
回答してくださるかたは、暖かく質問者を迎えてやってください
o(^^o) (o^^)o



345:デフォルトの名無しさん
07/04/23 18:19:57
そのトピック自体はどうでもいいんだが
コミュニティのタイトルとか説明文が凄く気になって仕方が無い。

346: ◆TWARamEjuA
07/04/23 19:56:34 BE:3485748-2BP(6823)
コミュニティの名前
 PERL言語 CGI言語

コミュニティの説明
 perl言語 cgi言語のコミュニティです

だそうです。。。

347:デフォルトの名無しさん
07/04/24 04:11:19
Web系NGなこのスレとうまく連携していければいいですねo(^^)o

348:デフォルトの名無しさん
07/04/24 08:17:44
未だにCGIが(ry

349:デフォルトの名無しさん
07/04/24 10:36:14
ダメそうなコミュだなw

350:デフォルトの名無しさん
07/04/24 22:51:58
どうしようもない質問の数々に、「ちったぁマニュアル読んでください!」と、
最後に管理者がキレるに1票。

351:デフォルトの名無しさん
07/04/25 02:27:30
いやあ管理人もろくすっぽ読んでないんじゃないか?


352:デフォルトの名無しさん
07/04/25 11:12:27
実は、管理人自身が2ちゃんねるで質問したところ、
「ググれカス」だの「マニュアル嫁」みたいな回答しか
返ってこなかったので、管理人にやさしく教えてくれる
ところが欲しかったんじゃないの?

353:デフォルトの名無しさん
07/04/25 12:06:40
>>352
もちろんそうでしょ。
そうじゃなきゃルール書きの冒頭が「Google検索で調べて
わかるようなことでも」で始まるわけないっすよ。

354:デフォルトの名無しさん
07/04/25 12:33:51
モヒカン族はお断りです><

355:デフォルトの名無しさん
07/04/25 17:38:48
モヒカン族の土地に侵入してきたくせに、大きい顔をするな

356:デフォルトの名無しさん
07/04/25 19:00:43
座り込んで動かない、口だけ達者なでっぷり太ったモヒカン族ほど
役に立たないものはない。

川に流してしまいたい。

357: ◆TWARamEjuA
07/04/25 20:55:45 BE:980633-2BP(6824)
不法投棄しちゃダメです♪

358:デフォルトの名無しさん
07/04/25 21:32:05
食肉に加工するというのはどうだろう

359:デフォルトの名無しさん
07/04/25 22:08:09
強くなれ!! と願いを込めて、子供たちに食べさせるとよいね。


360:デフォルトの名無しさん
07/04/25 23:13:46
弱者の肉なんかいくら食べても強くなれないよ

361:デフォルトの名無しさん
07/04/25 23:27:06
食べるのなら、戦場で最前線に立つモヒカンを食べよう。

362:デフォルトの名無しさん
07/04/26 09:20:12
   / : 》:、∩
  (===○=)/  センセー
__ /  ⇔ /     話しについてけませーん
\⊂ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄||

363:デフォルトの名無しさん
07/04/26 22:17:39
>>346
CGI言語と来たか・・・。

本当に作ってしまって混乱させるというのはどうか?
もちろんその言語はクライアントマシンの限られた
中でしか使えず、 Web の CGI になんて使えないのだ。


364:デフォルトの名無しさん
07/04/26 22:18:42
Common Graphics Interface とかいう紛らわしいグラフィック操作用言語を新たに作る。


365:デフォルトの名無しさん
07/04/26 23:07:10
parrot上で走らせたらもっと混乱の元に。

366:デフォルトの名無しさん
07/04/26 23:15:11
コモン グラフィックス インタープリター

池袋で乗車してきた女の子がハロプロエッグの子とかたかまりこ

367:デフォルトの名無しさん
07/04/27 11:39:27
ついでだ。IT言語というのも作ってしまえ。


368:デフォルトの名無しさん
07/04/27 11:57:03
そろそろここは質問箱だということを思いだそう。

369:デフォルトの名無しさん
07/04/27 15:28:36
そういえば Perl の質問がないなあ・・・。


370:デフォルトの名無しさん
07/04/27 15:34:31
Chanto Gugure Internet de


371:デフォルトの名無しさん
07/04/27 17:29:18
perlってグーグル八分されてるんだってね

372:デフォルトの名無しさん
07/04/27 18:13:20
WindowsでDOSコマンドの結果を取り込むには、
どうすればよろしいでしょうか?例えば、
dir c:\trash
の結果を取り込もうとしても、次のスクリプトではうまくいきません。

$files = `dir c:\\trash`;
print "The files are $files\n";


373:デフォルトの名無しさん
07/04/27 18:43:53
GW前に出された宿題で質問が増えるから大丈夫w

374:デフォルトの名無しさん
07/04/27 18:53:55
>372
手元だとそれでうまくいってるけど。

375:372
07/04/27 20:04:12
>>374
すみません。書き忘れていました。>>10にある先頭の5行を入れていました。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";

「use open IO => ":encoding(cp932)"; 」の行を削除して
次のように修正すると動きました。
use Encode;
$orgfiles = `dir c:\\trash`;
$files = decode('cp932', $orgfiles);
print "The files are $files\n";


376:デフォルトの名無しさん
07/04/27 21:23:44
>>372

例によって cmd.exe /c dir ... じゃない?


377:デフォルトの名無しさん
07/04/27 21:24:53
失礼、関係なかったのね。


378:デフォルトの名無しさん
07/04/27 21:35:08
>371
記号が多いから、とか?

379:デフォルトの名無しさん
07/04/27 22:21:10
>>378
うんにゃ、LWPのUAがはじかれる件でしょ?


380:デフォルトの名無しさん
07/04/27 22:23:19
>>378
Perlで書かれたボットの多くがLWPのデフォルトUser-Agentをそのまま名乗って
おり、403を食らうようになった。当然だがUAを変えれば通れる。


381:デフォルトの名無しさん
07/04/27 22:24:27
Google八分ってのは、Googleの検索結果に出なくなる話だから、
今回のそれとは違うよな。


382:デフォルトの名無しさん
07/04/27 22:30:29
新しく覚えた言葉を使ってみたかっただけだろ
そう責めるな

383:デフォルトの名無しさん
07/04/28 00:19:39
perlのモジュールって一気にアップデートできないの?
それとも使う奴だけ手動でアップデートさせるしか方法ない?

384:デフォルトの名無しさん
07/04/28 00:39:19
>383
cpanシェルでupgrade

385:378
07/04/28 01:18:47
Perlに限らないけど、プログラミング言語の仕様として存在する演算子や記号は検索しづらいよなあ。

386:デフォルトの名無しさん
07/04/28 03:22:17
不満を抱えるものが改善する。それが基本である。

387:デフォルトの名無しさん
07/04/28 05:09:49
でもそれを誰かが改善したらPythonっぽい何かになるからPythonでいいよねw

388:デフォルトの名無しさん
07/04/28 17:56:47
比較演算子は記号じゃなくて文字列にすりぁいいんだよな
Pealのeqとかみたいにさ

389:デフォルトの名無しさん
07/04/28 19:26:07
>>380
なったと言っても数年前からだよ。
今頃騒いでるやつらはアンテナが低すぎると思ったのだった。

390:デフォルトの名無しさん
07/04/29 01:57:47
struct {
 char len1;
 char word1[len1];
 char len2;
 char word2[len1];
 char len3;
 char word3[len1];
}

みたいな構造の可変長のバイナリなデータがあるんですが、
これをperlで綺麗でかっこよく展開する方法ってないですか?

今は下のようなことをしてるのですが、なんか見辛いし汚いので…

$data = "\4ABCD\3EFG\7HIJKLMN";

($len1,$data) = unpack("Ca*",$data);
($word1,$data) = unpack("a${len1}a*",$data);
($len2,$data) = unpack("Ca*",$data);
($word2,$data) = unpack("a${len2}a*",$data);
($len3,$data) = unpack("Ca*",$data);
($word3,$data) = unpack("a${len3}a*",$data);

print "$word1\n$word2\n$word3\n";

391:デフォルトの名無しさん
07/04/29 03:40:49
少なくともループ構造にするべきだと思う

392:デフォルトの名無しさん
07/04/29 04:06:37
>>390
perldoc -f pack して目を皿のようにして熟読せい。

The "/" template character allows packing and unpacking
of strings where the packed structure contains a byte
count followed by the string itself. You write
*length-item*"/"*string-item*.



393:デフォルトの名無しさん
07/04/29 05:12:56
>>392
あああああ、そんなテンプレートがあったんですね。
日本語の5.6ベースのman見てたので気づきませんでした…
ありがとうございます。

394:デフォルトの名無しさん
07/04/30 02:59:39
>>393
あ、すまん。
5.6からの拡張だと思ってたが、違ったか(393には問題ないみたいでよかった)。

395:デフォルトの名無しさん
07/05/01 17:38:05
ファイル内の文字列を置換するスクリプトを書いているところなのですが、
「置換する」「置換しない」(飛ばす)「残り全て置換」「キャンセル」という
処理を行うにあたって、見つけた文字列を置換せずに飛ばして次を置換する
方法が思いつきません。置換しないテキストは適当な文字列に置換しておいて
最後に戻すという方法も考えたのですが、あまりスマートではないと思いまし
た。何かよい方法があったら、お知恵をお貸しください。

while($text =~ /($regexp)/) {
if($all == 0) {
$before = $1;
$after = $1;
$after =~ s/$regexp/$replace/m;
print "置換前:\n$before\n置換後:\n$after\n";
do {
print "置換する? [y]es [n]o [a]残り全て [g]キャンセル ";
$key = <STDIN>;
chomp($key);
} while ($key ne "y" and $key ne "n" and $key ne "a" and $key ne "g");
if($key eq "y"){
$text =~ s/$regexp/$replace/m;
}elsif($key eq "n"){
# ここをどうする?
}elsif($key eq "a"){
$text =~ s/$regexp/$replace/gm;
$all = 1;
}else{ exit; }
}elsif($all == 1) {
$text =~ s/$regexp/$replace/gm;
}
}


396:395
07/05/01 17:39:43
補足です。$textはファイルの内容、$regexpは置換前の文字列、$replaceは
置換後の文字列です。

397:デフォルトの名無しさん
07/05/01 17:51:02
>>395
ヒント: posと\G

perl -e '$x = "aaaaaa"; pos($x) = 2; $x =~ s/\Ga/x/; print $x,"\n";'
aaxaaa


398:395
07/05/01 21:09:08
ありがとうございます、無事できました。コードはこのようになりました。(たぶん問題ないはず…)
$p = 0;
while($text =~ /\G(?:.*\n)*?.*?($regexp)/gm) {
$p = pos($text) - length($1);
pos($text) = $p;
if($all == 0) {
$before = $1;
$after = $1;
$after =~ s/$regexp/$replace/m;
print "置換前:\n$before\n置換後:\n$after\n";
do {
print "置換する? [y]es [n]o [a]残り全て [g]キャンセル ";
$key = <STDIN>; chomp($key);
} while ($key ne "y" and $key ne "n" and $key ne "a" and $key ne "g");
if($key eq "y"){
$text =~ s/\G$regexp/$replace/m;
pos($text) = $p + length($after);
}elsif($key eq "n"){
pos($text) = $p + length($before);
}elsif($key eq "a"){
$text =~ s/\G$regexp/$replace/gm;
$all = 1;
}else{
exit;
}
}elsif($all == 1) {
$text =~ s/\G$regexp/$replace/gm;
}
}


399:デフォルトの名無しさん
07/05/01 21:31:38
\Gの使い方がおかしいような
最後の全置換は絶対うまくいかんだろ

400:デフォルトの名無しさん
07/05/01 22:01:18
せっかく書いたんだからたぶんとかいってないで動かしてみるべきだな。

401:395
07/05/01 22:02:38
すみません、やっぱ問題がありました。置換位置\Gが正規表現に含まれている
と、置換される文字列に改行が含まれている際に、オプション"g"をつけても
複数置換してくれなくなってしまうのですが、どうすればいいんでしょうか。

perl -e '$text = "a\na\na"; $text =~ s/\Ga/b/gm; print "$text\n";'
結果:
b
a
a

perl -e '$text = "aaa"; $text =~ s/\Ga/b/gm; print "$text\n";'
結果:
bbb

perl -e '$text = "a\na\na"; $text =~ s/a/b/gm; print "$text\n";'
結果:
b
b
b

402:デフォルトの名無しさん
07/05/01 22:23:56
\Gは置換文では使わないほうがいいよ。代入されるとposがリセットされてしまうから
あとを置換しながらposを保持することはできないのでコピーを作ることを考えてみては
自分ならこう書く

my $replaced_text;
pos $text = 0;

while (pos $text < length $text) {
 if ($text =~ m/\G $regexp/gcsx) {
  # ここで入力による分岐処理を行う



 }
 elsif ($text =~ m/\G(.+?) (?=$regexp)/gcsx) {
  $replaced_text .= $1;
 }
 else {
  $text =~ m/\G (.*)/gcsx;
  $replaced_text .= $1;
 }
 





403:デフォルトの名無しさん
07/05/01 22:28:17
s///gが一種のループなのでこんな手もある。
my $mode;
$text =~ s{($regexp)}{
my $r;
if (!defined $mode) {
my $key;
do {
print "置換する? [y]es [n]o [a]残り全て [g]キャンセル ";
$key = <STDIN>;
chomp($key);
} while ( $key ne "y"
and $key ne "n"
and $key ne "a"
and $key ne "g" );
if ($key eq 'y') {
$r = $replace;
} elsif ($key eq 'n') {
$r = $1;
} elsif ($key eq 'a') {
$mode = 'a';
} else {
$mode = 'g';
}
}
if ($mode eq 'a') {
$r = $replace;
} elsif ($mode eq 'g') {
$r = $1;
}
$r;
}gme;

404:395
07/05/01 23:34:11
>>402-403
おお、これはすごい、正規表現でループができるんですね。
>>403の方法できれいなスクリプトになりました。ありがとうございます。

405:デフォルトの名無しさん
07/05/02 03:13:40
CPANシェルについてなんですが、
インストールするごとに[1]とか[2]とか増えるのはなんなんでしょうか?


406:デフォルトの名無しさん
07/05/02 03:44:02
>>405
現在実行したコマンドを識別するIDみたいなもの。
何に使ってるかまでは見てないけど。
ちなみに↓とやるとIDを変えてしまうこともできる。特に意味はない。
cpan[1]> ! $CPAN::CurrentCommandId = 100;

407:デフォルトの名無しさん
07/05/02 05:56:50
>>406
レスありがとうございます。
そうなんですか。

なんか Bundle::CPAN をインストールしてからそうなったような気がしたので、
間違えたかと思いました。
そのような情報ってどこで得ているのでしょうか?

408:デフォルトの名無しさん
07/05/02 09:35:32
モジュール(lib/CPAN.pm)のコードを読む。

409:デフォルトの名無しさん
07/05/02 14:03:43
>>406
知らないけど、ヒストリ用では?

よくUNIX用のシェルであるんだけど、 ! の直後にその番号入れて
実行するとその番号のコマンドが動くんだよ。全く同じなら再入力
する必要がないの。(更に後ろに :s/// のようなのを付けて文字列
置換できたりもする。 !30:s/aa/bb/ みたいな。全てのシェルが
同じこと出来るかどうかは知らないが)。



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch