2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:05/03/17 13:45:32

"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.6
● 2005/03/17現在の開発版: 5.9.1

2 :デフォルトの名無しさん:05/03/17 13:52:12
● 過去ログ

1 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 http://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 http://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 http://pc5.2ch.net/test/read.cgi/tech/1105953092/

3 :デフォルトの名無しさん:05/03/17 13:52:21
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873110378/

[オンラインマニュアル]
Perldoc.com: http://www.perldoc.com/
perldoc.jp: http://www.perldoc.jp/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/

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

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

4 :デフォルトの名無しさん:05/03/17 14:40:18
4ね

5 :デフォルトの名無しさん:05/03/17 15:01:02
6はまだですか?

6 :デフォルトの名無しさん:05/03/17 15:08:57
http://marc.theaimsgroup.com/?l=openbsd-misc&m=111038859611508&w=2

> Besides, I can't believe someone is advocating Perl on the grounds of
> readability.

Right. Perl is a write-only language...


7 :デフォルトの名無しさん:05/03/17 16:01:02
初心者です。教えてください。
Webのあるボタンを押したら、Perlのプログラムが走行するように
したいのですが、やり方がよく分かりません。
HTMLの"onclick="コマンドを使えばいいのでしょうか。
onclick="xxxx/xxxx/funyafunya.pl"
てな感じでしょうか?
教えて〜〜〜!


8 :デフォルトの名無しさん:05/03/17 16:17:39
>>7
>>1

まぁ、CGIですらないな

9 :デフォルトの名無しさん:05/03/17 16:19:59
ううむ。
それさえ、よくわからん・・・。
でも、教えてくだされ〜〜!


10 :デフォルトの名無しさん:05/03/17 16:46:39
('A`)

11 :デフォルトの名無しさん:05/03/17 18:37:06
まだですか〜〜!


12 :デフォルトの名無しさん:05/03/17 18:48:10
シリアルキー解析集「ALTEA」
大好評発売中!

http://openuser10.auctions.yahoo.co.jp/jp/user/dancexxx1960?


市販SOFTやオンラインSOFTのパスワード集です。
オークション関係から画像・OS・表計算・CAD・・・・etc
国内・国外のあらゆる分野のSoftを解析済です。


これを初めて手にされた時には、驚愕される事でしょう。
そして・・・手当たり次第にインストールを始める筈ですw
パソコンをご使用の方なら、必ず!満足されると思います。

解析結果のデータベースには15,000点を越えるパスワードが入ってます。
このパスワード集から検索するだけで、登録や制限解除が出来てしまいます。
シェアウェアを購入して、正規登録したのと同じ状態になります。
余りにもデータが多すぎる為、辞書引のようなパスワード検索SOFTで提供します。

シェアウェア以外にもパッケージ版をVectorなどでオンライン販売してるSOFTにも
多数対応しています。これらをダウンロードして無期限に試用する事も可能です(^^;

WindowsXPやOfficeなどのCDキー(プロダクトキー)ジェネレーターを使えば複数のパソコンに
インストールする事も可能です。デスクトップとノートPCなど2台以上持ってる場合は特に有効ですね。

オンラインSOFTを購入した経験は有りますか?
ありとあらゆる分野の優れたSOFTが、数多くありますよね。
しかし、ほとんどが試用期間や機能制限をして、「気に入ったら購入してください」です。

もう少し使いたいが使用期限切れで、削除・・・再インストールを繰り返していませんか?


13 :デフォルトの名無しさん:05/03/17 23:35:17
ブラクラ?

14 :デフォルトの名無しさん:05/03/18 07:28:30
13桁の数字だけにマッチさせるような正規表現はできますか?

15 :デフォルトの名無しさん:05/03/18 09:00:00
>>14
できます。

16 :デフォルトの名無しさん:05/03/18 09:06:41
>>14
length $hoge == 13 and $hoge !~ /[a-zA-Z_]/
こうか?

17 :デフォルトの名無しさん:05/03/18 10:06:19
/\d{13}/

18 :デフォルトの名無しさん:05/03/18 10:28:02
>>17
1234567890123abcde = 真


19 :デフォルトの名無しさん:05/03/18 10:55:22
perlでディレクトリ内の最新のファイルを取得したいのですが、どのようにすればよいでしょうか。
ディレクトリ内には20050318.pngのように日付をファイル名とするファイルがあり、その中で最新のファイルのファイル名を取得したいのです。

20 :デフォルトの名無しさん:05/03/18 11:04:50
>>19
いや・・・
普通に、もっとも数の大きいファイル名を選べばいいだけじゃないの?
ファイル名一覧を取得してソートしてさ・・・

21 :デフォルトの名無しさん:05/03/18 11:47:24
>>20
最大のものをピックアップするだけでしょ。

22 :デフォルトの名無しさん:05/03/18 12:37:35
だな。キーワードも揃ってんだし、後は自分で試行錯誤するべきだな。
ソース提示はこいつのためにならん

23 :デフォルトの名無しさん:05/03/18 12:44:26
質問です

<key>kNumber</key>
<integer>6</integer>
上のようなxmlファイルの一部分の書き換えをしたいと思っています。
最初に書いたスクリプトは以下のようなものです

use strict;
my $pref = "file.xml";
my $i = 0;
my $text;
open PL,"+<$pref" or die;
while (<PL>){
if (/kNumber/){
$i = 1;
next;
}
if ($i == 1) {
s/<integer>\d+<\/integer>/<integer>0<\/integer>)/;
$i = 0;
}
} continue {
print PL;
}
close PL;

<integer>に囲まれてる"6"を変更しているのですが、
標準出力だと成功しているにも関わらずファイルに書き込むと
うまくいきません。
この場合どのようにすればいいのでしょうか?

24 :デフォルトの名無しさん:05/03/18 12:46:44
`ls -t *.png|head -1`

25 :デフォルトの名無しさん:05/03/18 13:24:42
>>23
まず別の一時ファイルに書き出してから rename で置き換えるようにしる。
もしくは、一旦 XML の内容を変数にためてファイルを truncate してから書き出すか。

26 :デフォルトの名無しさん:05/03/18 14:03:59
>>23
XML::Simpleを使う手があるぞ

27 :デフォルトの名無しさん:05/03/18 14:20:22
ありがとうございます。
同じファイルを書き換えるのは結構大変なものなんですね・・・
変数にためてtruncateをやってみたら先頭に^@が山ほどついた
ファイルが出来上がってしまいました。

my $pref = "file.xml";
my $i = 0;
my $text;
open PL,"+<$pref" or die;
while (<PL>){
if (/kNumber/){
$i = 1;
next;
}
if ($i == 1) {
s/<integer>\d+<\/integer>/<integer>0<\/integer>)/;
$i = 0;
}
} continue {
# print;
$text .= $_;
}
truncate(PL,0);
#system("/bin/echo > $pref") ;
print PL $text;
close PL;

ゴミを除いた結果と標準出力の結果は良好なんですが、
どうもファイルに書き込む際に先頭にゴミが入ってダメでした。
truncateはきちんと動作していました。
ありがとうございます。目先を変えてXML::Simpleを試してみます。

28 : :05/03/18 14:22:52
サブルーチンに複数の連想配列を渡すやり方を教えてください。

-----
$A{'A'}=100;
$B{'B'}=200;

&view(%A,%B);

sub view()
{
my (%x,%y)=@_;
print "1:$x{'A'}\n";
print "2:$y{'B'}\n";
}

-----
結果は
1:100
2:
となります。呼び元の連想配列Bのキーを変えて
 $B{'B'}=200
⇒$B{'A'}=200
とすると結果は
1:200
2:
となり、sub view内での第1引数の値が変わっているように見えます。
view内での受け取り方my(%x,%y)=@_の問題のように思えますが、
第1引数と第2引数を別々に受け取るにはどうしたらいいのでしょうか。

29 :デフォルトの名無しさん:05/03/18 14:33:07
>>28
> サブルーチンに複数の連想配列を渡すやり方を教えてください。
$A{'A'}=100;
$B{'B'}=200;

&view(\%A,\%B);

sub view {
my ($rx,$ry)=@_;
print "1:$rx->{'A'}\n";
print "2:$ry->{'B'}\n";
}


30 :デフォルトの名無しさん:05/03/18 14:34:37
>>28
> となり、sub view内での第1引数の値が変わっているように見えます。
> view内での受け取り方my(%x,%y)=@_の問題のように思えますが、
> 第1引数と第2引数を別々に受け取るにはどうしたらいいのでしょうか。

サブルーチンの引数は、べろんとリストに展開されて渡されるだけ。

31 :28:05/03/18 14:55:27
>>29
リファレンスで呼び出すんですね。
スカラーならリファレンス指定しなくてもいいのに
連想配列だと必要とは。。。いまいちすっきりしないです。

>>30
それは理解できるんですが、キャストのイメージが
他言語に比べ自由すぎて理解しづらいのです。
この例でも連想配列で渡したのだから連想配列変数に
直接代入できてもよさそうなものですし。

32 :デフォルトの名無しさん:05/03/18 15:50:14
>>31
それには伝統的な理由(ry

引数に指定された連想配列は 配列に展開されてサブルーチンに渡されるらしいんだが、
この方式には問題があってな……引数をどこで区切ったらいいか、perl は分からなくなるんだ。

まあ、そこが可愛くも(ry

33 :デフォルトの名無しさん:05/03/18 16:17:28
>>27
すまん、言ってなかったが seek(PL, 0, 0); してから truncate してちょ。

34 :デフォルトの名無しさん:05/03/18 16:21:19
>>31
リファレンスはスカラー値。

35 :デフォルトの名無しさん:05/03/18 16:33:26
へんてこな仕様だとは思う。
Cで可変長引数の関数をベタベタに書いたときみたいな感じ。

36 :デフォルトの名無しさん:05/03/18 18:14:59
前ヌレ消費しろよ

37 :デフォルトの名無しさん:05/03/19 20:25:25
けっこう長いことPerlを使ってたが、
リファレンス先の変数が消滅しても領域が解放
されないことを、今日初めて知ったよ・・・
今まで、Cのポインタみたく使ってたよ・・・
ショックだ・・・もうPerlやめよう・・・

38 :デフォルトの名無しさん:05/03/19 21:12:15
どうぞ

39 :デフォルトの名無しさん:05/03/19 22:51:10
>>37
たしか、いつ開放するかはPerlさんまかせだったと思う
必要になったら、Perlさんが開放してくれる
undefは破棄する関数だけどメモリを開放するとは限らないと。


40 :デフォルトの名無しさん:05/03/19 22:53:36
質問させてください。
0〜10までの数字入力で、
10を超える数字や、文字を入力したりするとエラーとする処理はできるのですが、
入力で、01とか、00000とか入力されると、そのまま処理されてしまいます。
先頭の余計な0を削る方法はないでしょうか?

41 :デフォルトの名無しさん:05/03/19 22:56:56
>>39
嘘教えるなよ。ちゃんとmyを使ってれば不要になった時点(リファレンスカウントが0になった時点)で破棄される。
俺はこれがRubyとの最大の違いだと思ってるくらいだ。

循環参照にさえ気をつければマークスイープのGCより遥かに強力だぞ。

42 :デフォルトの名無しさん:05/03/19 23:05:14
メモリ領域の開放の話だろ

>マークスイープのGCより遥かに強力だぞ
何故?


43 :デフォルトの名無しさん:05/03/19 23:20:26
>>37>>39の話は全然関係ない話じゃん。
>>39はただのアホウ。

44 :デフォルトの名無しさん:05/03/19 23:27:25
>>43
はいはい。悪ぅございました。
ちゃんと調べてきたよ。

45 :デフォルトの名無しさん:05/03/19 23:30:36
ちなみに、マークアンドスイープアルゴリズムは今後のPerlに実装されるかもしれないってさ。

46 :デフォルトの名無しさん:05/03/19 23:59:11
>>44
調べたのは感心だが、GCの動作の違いから
コードの書き方にどれだけ決定的な違いが生じるか、
ってのを感得しないと意味がないぞ。
Perl認定試験みたいなもんでもありゃ、用語覚えは役に立つかもしらんが。

47 :デフォルトの名無しさん:05/03/20 05:04:46
(・∀・)Perl認定試験
ものすごい変態コードを読み解くパズルみたいな試験なのだ!。

48 :デフォルトの名無しさん:05/03/20 12:16:58
ソースの暗号化をするソフトは知っているんですが。

記述によってソースを暗号化することは出来るのでしょうか?

49 :デフォルトの名無しさん:05/03/20 12:43:41
うん

50 :デフォルトの名無しさん:05/03/20 12:47:59
その方法を教えてください。

51 :デフォルトの名無しさん:05/03/20 13:58:33

何故?

52 :デフォルトの名無しさん:05/03/20 14:20:27
同じサーバ使ってる人にソース見られちゃうよー
(つд⊂)エーンって感じだったりして。

53 :デフォルトの名無しさん:05/03/20 18:38:56
暗号化したところでほとんど無意味
(実行時には展開されなくてはならないため)
バイトコードに変換した方がよっぽど効果的だろうな

54 :デフォルトの名無しさん:05/03/20 20:18:45
バイトコードもコンパイラが単純だとすぐ
ソースに戻されちゃうからね。

ソース状態でも常人には読めない暗号の
ようなコードが最強。


55 :デフォルトの名無しさん:05/03/20 20:26:14
qrpff.plみたいなのか

56 :デフォルトの名無しさん:05/03/20 21:57:30
XORHTMLみたいなのって
簡単にするとどういう手順で暗号化されているのかな?

出力する全文をそれと同じ手順を踏ませりゃいいのかと思いきや。

57 :40:05/03/20 22:36:20
すみません、誰かアドバイスくれる方いませんか・・・

58 :デフォルトの名無しさん:05/03/20 22:43:48
/^[^\D0]\d*$/

59 :デフォルトの名無しさん:05/03/20 22:44:17
>>57
> 先頭の余計な0を削る方法はないでしょうか?
それなら
$var =~ s/^0+//;
でできるが、その前に

> 0〜10までの数字入力で、
> 10を超える数字や、文字を入力したりするとエラーとする処理はできるのですが、
> 入力で、01とか、00000とか入力されると、そのまま処理されてしまいます。

このエラー処理がすでに間違っている。

60 :40:05/03/20 23:08:13
>>58
ありがとうございます。
文字列として処理しないといけないんですね・・・・
ってか、コンソールから文字を受け取る時点で数字も文字列扱いになるんでしょうけど・・・

>>59
ありがとうございます。
エラー処理が間違ってる・・・
うーん、どの部分でしょうか?

61 :デフォルトの名無しさん:05/03/21 00:46:29
>>60
エラー処理の考え方が間違っているってこと
まず、自分がどんな処理をしたいのかを考えて、
それから、そのためにはどんな入力である必要があるかを考えてみてごらん。


62 :デフォルトの名無しさん:05/03/21 01:33:21
0とか書いてるのが最大のエラーだな


63 :デフォルトの名無しさん:05/03/21 01:46:41
>>60
> うーん、どの部分でしょうか?
どの部分も何も
> 10を超える数字や、文字を入力したりするとエラーとする処理はできる
のなら、
01は数値としては1だし、00000は数値としては0なんだから、
そのエラー処理とやらにひっかかるはずだと言っているのだよ。

64 :デフォルトの名無しさん:05/03/21 02:06:42
>>63の言ってる意味がわからないのは俺だけか?

>01は数値としては1だし、00000は数値としては0なんだから、
これは意味がわかる。

>そのエラー処理とやらにひっかかるはずだと言っているのだよ。
なぜだ?
0〜10の数字なら処理するように作りたいんだろ?
で、数値として、1やら0がエラー処理にひっかかるんだ?

65 :デフォルトの名無しさん:05/03/21 03:33:36
>>64
> 入力で、01とか、00000とか入力されると、そのまま(エラー)処理されてしまいます。
では?

66 :デフォルトの名無しさん:2005/03/21(月) 10:10:25
とりあえずその気色の悪い全角数字を止めれ

67 :デフォルトの名無しさん:2005/03/21(月) 12:30:11
もしかして全角数字を入れたらエラーになるって事?

68 :デフォルトの名無しさん:2005/03/21(月) 13:45:22
もういいよ、これやるから質問者も回答者も落ち着け

$num =~ /^(?:[0-9]|10)$/


69 :デフォルトの名無しさん:2005/03/21(月) 21:59:57
require 'foo.pl';
とした時に、foo.plが存在しないと即↓のようなエラーが出てしまうのですが、

Can't locate foo.pl in @INC (@INC contains: /etc/perl /usr/lib/perl5/site_p
erl/5.8.5/i386-linux /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_per
l /usr/lib/perl5/vendor_perl/5.8.5/i386-linux /usr/lib/perl5/vendor_perl/5.
8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.5/i386-linux /usr/lib/per
l5/5.8.5 /usr/local/lib/site_perl .) at bar.pl line 1.

このエラーメッセージを任意のメッセージに変更する事などはできますか?

それとも、
unless (-e 'foo.pl') {
  print "何か気の効いたエラーメッセージ\n";
}
こんな感じにしないといけないでしょうか??

70 :デフォルトの名無しさん:2005/03/21(月) 22:12:45
eval{
 require "foo.pl";
}:
if($@) {
 die "うんこ漏れそう";
}

71 :Miss!:2005/03/21(月) 22:13:28
s/:/;/;

72 :デフォルトの名無しさん:2005/03/21(月) 22:17:27
eval で囲んどくとか。

73 :デフォルトの名無しさん:2005/03/21(月) 22:18:00
ありゃ。出遅れまくり。すまん。

74 :69:2005/03/21(月) 22:21:54
>>70 >>72
ありがとうございます
これでいけそうです

ちなみに、参考までに聞いておきたいんですが、
requireのエラーをevalで捕捉する、っていうやり方はごく一般的なものなんでしょうか?

75 :デフォルトの名無しさん:2005/03/21(月) 22:28:05
二人中二人が同じ方法を提示したからねぇ?

76 :デフォルトの名無しさん:2005/03/21(月) 22:28:16
eval で囲んで if ($@) でキャッチするのは、
Perl での例外処理のイディオム。

77 :69:2005/03/21(月) 22:40:01
了解です
ありがとうございました。。

78 :デフォルトの名無しさん:2005/03/21(月) 22:51:36
クックブック12.2によると、モジュール読み込みが実行時じゃなくて
コンパイル時に行なわれるよう、evalをBEGINのブロックでくるんで
やるのがおばちゃまモアベターよ、とありますな。

21 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)