トップページ⇒tech
1001コメント344KB

Perlについての質問箱 17箱目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/06/04(土) 16:31:48
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。

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

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

http://www.perl.org/get.html
● 2005/03/17現在の最新版: 5.8.7
● 2005/03/17現在の開発版: 5.9.2
0153デフォルトの名無しさん2005/06/11(土) 10:39:39
>>151
される。
0154デフォルトの名無しさん2005/06/11(土) 10:45:17
>>145
これは?
@nullpo = <GATT>;
0155デフォルトの名無しさん2005/06/11(土) 11:03:54
>>152
折れも尻たーい。 バブルが弾けて、会社クビになって、奥さんに捨てられて。。ってとこまで
知ってるけど、彼程度の腕なら再就職先を見つけるのは困難ではないし。。

でも、Perl 6は5年くらい出る出ると言われていた気がするけど、未だ出る気配すらないね。
0156デフォルトの名無しさん2005/06/11(土) 13:26:41
>>153
なるほど。これは close し忘れにくくなって良いっすね。
0157デフォルトの名無しさん2005/06/11(土) 14:15:58
WindowsXPでActivePerl5.8.4を使っています。5.8.7が出たので更新しようと思ったのですが、
XSを使ったモジュール(Cコンパイラを使うやつ)は再インストールしないといけないでしょうか。
0158デフォルトの名無しさん2005/06/11(土) 16:24:13
>>147
>>151
>>153
>>156
そこで Ruby ですよ
0159デフォルトの名無しさん2005/06/11(土) 17:41:13
まあ、Perl のプロセスが終了すれば全ハンドルは閉じられるわけだが。
全然関係ないけど。
0160デフォルトの名無しさん2005/06/11(土) 19:10:03
ああ、確かに関係ないな
0161デフォルトの名無しさん2005/06/11(土) 20:40:43
( ´_ゝ`)フーン
0162デフォルトの名無しさん2005/06/12(日) 02:19:11
rubyやpythonが仕事で使えない(言語能力ではなく嫌がられるってこと)ので
しぶしぶperlに戻ってきました。っつても以前はperl4の機能しか使ってなかったんで
もう一度お勉強しなおしたらスゲー面白くて最近ハマってきた。
いい言語かどーかは置いといて、オモレーよperl
0163デフォルトの名無しさん2005/06/12(日) 02:32:04
おもしろくねーよ。

おもりろりんな言語って言うのは、C++やLispのことを言うのだ。
0164デフォルトの名無しさん2005/06/12(日) 04:01:44
perlでへんな癖付くと他の言語に戻ったときにそれを取り除くのが大変
0165デフォルトの名無しさん2005/06/12(日) 04:56:48
あなたのeval使ったバリバリの変態コードを見せてください
0166デフォルトの名無しさん2005/06/12(日) 08:00:03
s??
                ,-、 nn
.r-、 _00           /::::'┴'r'
.|::::'´::::r┘  !「`L00、|.l└ク_;厂  /
.|::::「|:::|    l| |Ln:::r┘|.l _lニユ、 ./
. ̄└r''"´]_ l| | r゙=゙┐ |└ァ::/ /  /.
、ヽ、 ,ゞ´_::::| l| |「二:::7 .|.l └′/  / /
. \\`´ |:::|. l| l 〈::/  、 !     '/
     \ ̄  l
?,@_{'.',qq{\n},"'",q q/q,q q q}=0..4,s,(.),$_{$1},gs,s,(\d)\1,$1+1,eg,tr,0-9,,cd;
s,(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)
,(($1-$2*4+$3*2+$4+$5+$6+$7+$8+$9*7-3)%7+51).'.',exg,print eval;
0167デフォルトの名無しさん2005/06/12(日) 10:44:33
暇人
0168デフォルトの名無しさん2005/06/12(日) 10:56:49
Shift_jisにおいて半角全角の数字を正規表現マッチさせるにはどうすればいいでしょうか?
[\d(\x82[\x4f-\x58])]
というクラス内においてクラスを使おうとするとエラーになります。
何か上手い方法ってありますか?
0169デフォルトの名無しさん2005/06/12(日) 11:05:42
変換すれば
0170デフォルトの名無しさん2005/06/12(日) 11:08:43
>>168
/((?:\d|\x82[\x4f-\x58])+)/
0171デフォルトの名無しさん2005/06/12(日) 11:09:24
[\d(\x82\x4f)(\x82\x50)(\x82\x51)(\x82\x52)(\x82\x53)(\x82\x54)(\x82\x55)(\x82\x56)(\x82\x57)(\x82\x5\
8)]{10}
やっぱりこうするしかないのかな。カッコ悪いけど。
0172デフォルトの名無しさん2005/06/12(日) 11:13:10
>>170
ありがとうございます。カッコがなぜ二重に必要なのか分りませんが、それ使わせてもらいます。
0173デフォルトの名無しさん2005/06/12(日) 11:20:09
あ、っていうか普通にこれでいいんすね。
(\d|\x82[\x4f-\x58]){10}
{}←これってクラスにしか使えないのかと勝手に思い込んでました。すみません。
0174デフォルトの名無しさん2005/06/12(日) 12:12:09
>>172
いや、matchした連続した数字部分を参照したいかな、と思ったから。
0175デフォルトの名無しさん2005/06/12(日) 12:27:52
>>174
どもです、OKです。
/((?:\d|\x82[\x4f-\x58]){10})/
(?:.....)というのはマッチした部分的文字列をを
$1というのに保存しないでしないという意味っすね。

こうすることで全体の10文字が手に入ると。"+"なら一文字以上の
任意の長さの結果が手に入ると。うーん、Perl素晴らしい。
0176デフォルトの名無しさん2005/06/12(日) 16:13:31
(゚Д゚) 宇宙語だ!宇宙からの交信が届いた!!
01771622005/06/12(日) 17:49:31
>>163
Lisp。クロージャ、遅延評価、ストリームなどキーワードはオモロそうだなーと思うが
lisp自体が アホなのでさっぱりわからん。
perl使いに分かるように lispの面白さを広告してみてくれ。
01781622005/06/12(日) 17:51:10
>>177
まぁ、自分で書かないとわからんとか言われるんだろうな・・・。
0179デフォルトの名無しさん2005/06/12(日) 18:22:48
>>178
> まぁ、自分で書かないとわからんとか言われるんだろうな・・・。

大学でやらされましたよ。人間インタープリタ。
0180デフォルトの名無しさん2005/06/12(日) 22:56:49
UTF-8なら2バイト文字のマッチングも大丈夫?
それともEUCにするべき?
0181デフォルトの名無しさん2005/06/13(月) 00:13:59
use encoding
0182デフォルトの名無しさん2005/06/13(月) 00:39:06
>>180
UTF-8 なのに 2バイト文字とはこれいかに!?
0183デフォルトの名無しさん2005/06/13(月) 00:41:00
質問箱じゃなくて雑談スレみたいなのないの?
01841802005/06/13(月) 01:00:29
>>181
それは怖いから許して

>>182
それもそうね。日本語という意味です。
0185デフォルトの名無しさん2005/06/13(月) 01:32:14
>>183
伝統的に「質問箱」となっているだけで、雑談もかまわないとおも
雑談スレは過去何度か経ったが、雑談だけじゃ話が続かないからな

WebProg板に行けばPerl6スレ等もう少し雑談よりのスレも沢山あるがな
0186デフォルトの名無しさん2005/06/13(月) 02:16:40
Perl6なんてもう消えたも同然だろ
0187デフォルトの名無しさん2005/06/13(月) 10:13:13
use encodingの何が怖いのかわからない
0188デフォルトの名無しさん2005/06/13(月) 10:20:05
こわがりすぎー
0189デフォルトの名無しさん2005/06/13(月) 10:31:04
怖がり杉
0190デフォルトの名無しさん2005/06/13(月) 10:38:45
動いてたコードにuse encoding "...";
って入れただけで動かなくなった。
0191デフォルトの名無しさん2005/06/13(月) 11:06:26
DBMにしまってるデータをhtmlに一覧表示(例;アドレス一覧)したいんですが、
上手く1データ(日付・名前・アドで1行)ずつでんのです。
プログラム初心者でよくわからんのです。
拾い方教えてください。
0192デフォルトの名無しさん2005/06/13(月) 11:35:42
>>191
>>4
0193デフォルトの名無しさん2005/06/13(月) 18:53:50
現在Perl勉強中の初心者です。

TKモジュールを使って日本語混じりデータの処理をしているのですが、
使えそうな、デバッカーを教えてください。

しばらく前に perl -d:?????? perl.pl でデバッカが使える
とあるWebで目にしました。しかしそのページをブックマーク
し忘れてしまいました。

OSはWindows XP で、Perlは 5.8.6 です
0194デフォルトの名無しさん2005/06/13(月) 18:59:06
>>193
デバッカって何?
0195デフォルトの名無しさん2005/06/13(月) 19:00:03
>>193
perldoc perldebug

perl -d script.pl # CUIデバッガ 標準添付
perl -d:ptkdb script.pl # GUIデバッガ CPANからインストールする必要あり
0196デフォルトの名無しさん2005/06/13(月) 19:09:19
>>195
ありがとうございました。ptkdb ですね。たしかに簡単にInstallできて
さくっと動きました。便利です。たすかりました。

>>194
知らないなら黙って居ろよ ボケェ
0197デフォルトの名無しさん2005/06/13(月) 19:18:12
>>194
> デバッカって何?

意地悪い
0198デフォルトの名無しさん2005/06/13(月) 19:19:25
>>193
> デバッカーを教えてください。

>>194
> >>193
> デバッカって何?

>>195
> # CUIデバッガ 標準添付
         ^^


>>196よ、見てるこっちの方が恥ずかしいので勘弁してください。(*ノノ)
0199デフォルトの名無しさん2005/06/13(月) 19:26:37
>>194
> デバッカって何?

デバック、デバッカ ――
能力に欠けるプログラマを検出する上で重要なキーワード/概念。
もちろんこれは、デバッグ/デバッガの読み間違いであるが、その読み間違
いを長期間に渡って続けている者は、プログラミングの現場から速やかに
排除されるべきである。
頻繁に「デバッグ」「debug」などの文字列を目にしているはずの現場
において、それでも「デバック」と言い続けているということは、認知
能力に極めて重大な欠陥がある可能性が高いからである。
読んだものをそのまま認識し、タイプすることが何よりも求められるプ
ログラミングという作業に、これほど不適切な人間はいない。
0200デフォルトの名無しさん2005/06/13(月) 19:28:22
>>197
いや、「デバッカ」でググって、ろくな情報が無いと
ブーたれてるバカがいるから、これは大事だよ。
0201デフォルトの名無しさん2005/06/13(月) 19:30:26
>>200
まあ、「>193 デバックでなくてデバッグな」ぐらいの優しさは標準装備しておこうぜ。
02022012005/06/13(月) 19:35:09
>>196
しかし、この態度はいくらなんでもいかんですな。
やーいデバッカデバッカデバッカデーイ。
0203デフォルトの名無しさん2005/06/13(月) 19:38:28
デバッカ野郎はバグメーカー。

あの野郎、iとjの識別ができないわ、Oと0をごたまぜにするわ、
テキスト書かせりゃ 「メーカ―」とか平気で書いて、チェック
させても気づかないわで、川に突き落としてやりたいと本気で思った。
0204デフォルトの名無しさん2005/06/13(月) 19:52:59
ここはおばかなインタネツですね

De-Bug という言葉の意味も発音も知らないんだ

In-Bug してろよ
0205デフォルトの名無しさん2005/06/13(月) 19:55:32
ノハヽ   DE BACK! BACK IN!
   (*´∀`)   
   (  つ ☆ノハヽヽ
    ) ,ィ⌒|G|*‘ o‘リ
   (_(__人__,つ 、つ
0206デフォルトの名無しさん2005/06/13(月) 19:59:57
ソースのメーカーで「ブルドック」なんてのもあるからな。
ラベルには、英語で Bulldog って書いてあるんだが。
栃木の「ツインリンクもてぎ」もそう。英語では TWIN RING となってる。
まぁ、一種の社会現象ってことか。
0207デフォルトの名無しさん2005/06/13(月) 21:12:50
頭!頭!
0208デフォルトの名無しさん2005/06/13(月) 22:20:50
逆に、「ビックカメラ」を「ビッグカメラ」と呼んで、「どう? おれ賢い?」と
悦に入っている痛いやつもときどきいるよな。

まあ、あれは恐るべき罠と評価してもいいかもしんないが。
0209デフォルトの名無しさん2005/06/13(月) 22:34:25
プロバイダー -> プロバイザー
ウォーニング -> ワーニング
ナルポ -> ヌルポ
0210デフォルトの名無しさん2005/06/13(月) 23:05:35
はいはい。ほら、ペールの話に戻って。
0211デフォルトの名無しさん2005/06/13(月) 23:21:49
Perl5でOOPができたら最高なのになぁ。
0212デフォルトの名無しさん2005/06/13(月) 23:23:10
素朴な質問なのですが、$_に適切なファイル名を入れた状態で
$file_is_exist = 'exist' if -e;
は成功するのに
$file_is_exist = -e ? 'exist' : 'not exist';
の -e は括弧がないなんてケシカランと怒られ、検索パターンがどうのと怒られます。
なんでなのでしょうか??
0213デフォルトの名無しさん2005/06/14(火) 00:13:30
>>205
りしゃこに変なことするのやめてください
0214デフォルトの名無しさん2005/06/14(火) 00:16:29
-eのあとの?が?:演算子の?ともパターンマッチの?...?の
開始の?ともとれるわけだが、どちらにもとれる場合は
項になるほう(この場合はパターンマッチの?...?)優先
になる。よくひっかかるのでwarning対象になっていて
カッコで明示しろといわれているわけだ。で、?...?の
最後の?が見つからないので検索パターンがどうこうと
いうエラーもついでに出る。

Warning: Use of "-e" without parentheses is ambiguous at 〜
Search pattern not terminated at 〜

なおエラーについて質問するときは勝手に翻訳しないで
エラーメッセージをありのまま写すのが基本なので以後
注意されたい。


02152122005/06/14(火) 00:42:14
>>214
ん? おお!!
?PATTERN?なんて初めて知ったよ。便利そうですね。ありがとうです。
だけど
$file_is_exist = -e ? 'exist' : 'not exist' ?;
とやっても同じ警告はでてしまうだよ。(-e ?abc? でも -e /abc/でもでる)
?..?の結合度よりも -e ? の結合の方が強いのかな? (-e ? は -e $_ より強い?)
0216デフォルトの名無しさん2005/06/14(火) 01:28:40
>>215
どちらの場合もカッコで明示することを推奨しているので
warningは出すということじゃないかと。

/についてもこれは割り算の2項演算子でもあるのでおなじ
あいまいさがあるしね。

同じマッチでも -e m:abc: にすればあいまいさがなくなる
ので出なくなるはずだよ。
0217デフォルトの名無しさん2005/06/14(火) 01:57:07
こうすりゃいいだけじゃないのかと

$file_is_exist = -e $_ ? 'exist' : 'not exist'
0218デフォルトの名無しさん2005/06/14(火) 02:06:17
二つの文字列の先頭から一致する部分を取り出すスマートなやり方はないでしょうか?
以下のような文字列なら'abc'を返すような。

$a = 'abc123';
$b = 'abc345';

こんなやり方しか思いつかないです… orz

$i = 1;
$i++ while( substr($a, 0, $i) eq substr($b, 0, $i) );
print substr($a, 0, --$i);

0219デフォルトの名無しさん2005/06/14(火) 03:47:20
スマートというよりトリッキーだがPerlらしいやり方
$a = 'abc123'; $b = 'abc456';
chop $a until $b =~ /\A\Q$a/;
print $a;
0220デフォルトの名無しさん2005/06/14(火) 04:05:19
>>219
おぉ、感激しますた!
先頭一致に捕らわれて、後ろから削る発想がなかったです。
エスケープされてる部分の意味が分からないのでまた調べてみます。

newbieなもんでいろいろな書き方ができるperlに戸惑ったり面白がったりです。
ありがとうございます。
0221デフォルトの名無しさん2005/06/14(火) 07:25:23
先頭からの一致ならindex使ったほうが速いんじゃないかな。
$a = 'abc123'; $b = 'abc456';
chop $a until index($b, $a) >= 0;
print $a;
0222デフォルトの名無しさん2005/06/14(火) 07:26:33
間違えた
$a = 'abc123'; $b = 'abc456';
chop $a until index($b, $a) == 0;
print $a;
0223デフォルトの名無しさん2005/06/14(火) 08:56:12
ActivePerl 5.8.7 Build 813 で、次のコードをデバッガ(-d オプション)で
実行しようとすると、クラッシュするんだけど…(OS=Win98SE)
= = = = =
use encoding 'shiftjis';
print "m9(^Д^)プギャー\n";
= = = = =
  ↓
日付 06/14/2005 時刻 08:53
PERL のページ違反です。
モジュール : MSVCRT.DLL、アドレス : 0197:7801127c
Registers:
EAX=02dd85a0 CS=0197 EIP=7801127c EFLGS=00010297
EBX=0174c17c SS=019f ESP=0153f708 EBP=0153f710
ECX=00000001 DS=019f ESI=02dd859c FS=3b8f
EDX=00000000 ES=019f EDI=0174c17c GS=0000
Bytes at CS:EIP:
8b 44 8e fc 89 44 8f fc 8d 04 8d 00 00 00 00 03
Stack dump:
0156ef74 00000004 0153f730 2806605a 0174c17c 02dd859c 00000004 0155424c 00000004
02d9d18c 0153f75c 28012870 0155424c 0156ef74 02dd859c 00000004

-d 無しなら、正常に実行される。
なんでだろう? 前のバージョンでもそうだった。
皆さんのところでも、エラーになる?
0224デフォルトの名無しさん2005/06/14(火) 09:05:19
>>223
Win98SEか・・・
まずOSのアップグレードからしてみよか。
02252232005/06/14(火) 09:24:35
>>224
ダメです。WinXP でも、全く同じように落ちました。
http://49uper.com:8080/html/img-s/62461.gif
02262232005/06/14(火) 09:33:43
頭にきたので、Linux(TL10D)でもやってみました。
Shift-JIS / EUC-JP の両方で。
こっちは、全然問題なし。
ActivePerl のバグってことですかね?
0227デフォルトの名無しさん2005/06/14(火) 09:48:52
>>226
報告乙。
うちはまだbuild810のまんまだ。
02282272005/06/14(火) 09:59:15
ちなみにmsvcrt.dllの古いのを放り込んだらどうなる?
02292232005/06/14(火) 10:17:50
>>228
98SEで、MSVCRT.DLLをインストールCDのバージョンに戻してみたけど、ダメ。
----------
PERL のページ違反です。
モジュール : MSVCRT.DLL、アドレス : 0197:78010848
Registers:
EAX=02dd80d6 CS=0197 EIP=78010848 EFLGS=00010297
EBX=0174cf7c SS=019f ESP=0153f708 EBP=0153f710
ECX=00000001 DS=019f ESI=02dd80d2 FS=461f
EDX=00000000 ES=019f EDI=0174cf7c GS=0000
Bytes at CS:EIP:
8b 44 8e fc 89 44 8f fc 8d 04 8d 00 00 00 00 03
Stack dump:
0156ef74 00000004 0153f730 2806605a 0174cf7c 02dd80d2 00000004 0155424c 00000004
02d9d39c 0153f75c 28012870 0155424c 0156ef74 02dd80d2 00000004
----------
さっきのと落ちたアドレスは違うけど、現象は同じ。
XPでは試してないけど、どうせ同じでしょうな。
02302272005/06/14(火) 10:53:09
そういや810でも、デバッガ使うと何かの標準モジュールで転けてたなあ。
0231デフォルトの名無しさん2005/06/14(火) 11:01:19
既にBUG DBにあるね。日付からいってここ見てる人かな。登録乙でした。

ttp://bugs.activestate.com/show_bug.cgi?id=39261
0232デフォルトの名無しさん2005/06/14(火) 12:52:29
詳しい人に質問!パスワード入室管理付のBBS借りてるんだけど、
このパスワードって簡単に破れたり、BBSの中身見れたりするの?

教えて!
0233デフォルトの名無しさん2005/06/14(火) 13:21:27
>>232
激しく板違い。
0234デフォルトの名無しさん2005/06/14(火) 13:24:58
>>232
WebProg板へGo!
あと具体的にどの BBS かわからないと答えようがない。
0235デフォルトの名無しさん2005/06/14(火) 15:58:09
232=ミスターデバッカ
0236デフォルトの名無しさん2005/06/14(火) 17:55:26
Perlってインラインアセンブラあるんですか?
0237デフォルトの名無しさん2005/06/14(火) 19:34:29
>>221-222
今ごろサンクスコ!!
結局こうしてみました→chop $a while index $b, $a;
嗚呼もうなんだかこの一行に惚れました気持ちえぇですたまらんです。

>>236
いろんなプラットフォームの上で走ってるから難しくないですかね?
インラインAppleScriptとかあるからあってもヘンってことはないのかな。
0238デフォルトの名無しさん2005/06/14(火) 19:46:07
ある
0239デフォルトの名無しさん2005/06/14(火) 19:53:32
>>237
その気持ちよさ加減がPerlの魔力。
0240デフォルトの名無しさん2005/06/14(火) 20:05:46
>>236
無い事も無い
ttp://search.cpan.org/~neilw/Inline-ASM-0.03/ASM.pod

Inline系のモジュールにはCとかTkとかBefungeなんてのまであるから、
調べてみると結構楽しいよ
02412402005/06/14(火) 20:08:44
Tkじゃ無いorz
Tclの間違い
0242デフォルトの名無しさん2005/06/14(火) 20:56:45
2chのdatを読み込むにはどうしたらいいの?
0243デフォルトの名無しさん2005/06/14(火) 21:08:20
lwp::simpleでgetしてforeachとspliteでお好きなように処理。
0244デフォルトの名無しさん2005/06/14(火) 22:19:32
>>243
激しくありがとう。
0245デフォルトの名無しさん2005/06/14(火) 22:26:30
すいません、今までutf8で保存していたperlのスクリプトがあるんですが、
それに、「shift-jisのテキストファイルに日本語の文字列を追記する」処理をほどこすことになりました。

で、そのまま
open(OUT, ">> $file");
 binmode(OUT,"shift-jis");
 print OUT "$_\n";
close(OUT);

みたいにshift-jisへのエンコードを追加したりしたんですが、
うまくいきません…。

どなたかアドバイスのほどよろしくおねがいします。
0246デフォルトの名無しさん2005/06/14(火) 22:57:40
外してるかもしれませんが。

binmode(OUT,":encoding(shiftjis)");
0247デフォルトの名無しさん2005/06/14(火) 23:32:31
>>246
直りました!ありがとうございます
0248デフォルトの名無しさん2005/06/15(水) 05:26:09
配列をforeachでループさせたとき、順番は必ず
番号順になりますか?例外はありますか?
ちなみにハッシュは規則性はないと聞いております。
0249デフォルトの名無しさん2005/06/15(水) 08:08:51
順番どおりです。仕様で決まってます。
0250デフォルトの名無しさん2005/06/15(水) 16:28:29
あるディレクトリにファイルいっぱいあって、それらのファイルのおしりの空
行を取り除くにはどうすればいいですか?空行は一行とは限りません 。
0251デフォルトの名無しさん2005/06/15(水) 16:42:24
>>250
成功する限り chomp しまくって失敗したら抜けるループ
0252デフォルトの名無しさん2005/06/15(水) 17:17:05
>>251
ループを抜けた時、最終行の改行コードが無くなってるので、
書き出す前に復活させる必要があるね。
それなら、$data =~ s/\n+$/\n/; の方が速そうな気がするが…
もちろん $/ = ""; での話。
■ このスレッドは過去ログ倉庫に格納されています