[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 05/09 22:28 / Filesize : 164 KB / Number-of Response : 561
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:17:36 ]
"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。

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

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

www.perl.org/get.html
● 2009/02/09 現在の最新版: 5.10.0

▼ 前スレ
Perlについての質問箱 38箱目
pc11.2ch.net/test/read.cgi/tech/1221967332/

リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-6 あたり

33 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:49:49 ]
perlは簡潔に書いたときに可読性が増すように設計された言語だと思う。
ほかの言語だと、したい処理を表現するのに余計なことを書き込まなくてはいけない。
その余計なことはプログラムの流れにとって不自然なので注釈が必要になる。
25はほかの言語の仕様に毒されていてプログラムに無駄が多いんだろうね。
perlが可読性に乏しいと主張する人は単にperlについての知識が乏しいだけだ。

34 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 21:22:44 ]
Perlをよく知ってる人はより完結に書けるけど、あまり知らなくても
知ってる知識だけでプログラムが出来ちゃうところがPerlのいいところだと思う


35 名前:デフォルトの名無しさん [2009/02/13(金) 21:28:43 ]
でもuse strictしてないのとか、goto使ってるのとか、
ファイル1枚で絵巻物みたいに長いのは勘弁してください。

36 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 12:14:44 ]
Active perl にてwperlを使用してコマンドプロンプトを開かないようにしたいのですが
ソース内でシステムコマンド(たとえば`tasklist`とか)を使うとプロンプトが一瞬開きます。
これを開かないようにする方法ってありますか?

37 名前:9 mailto:sage [2009/02/15(日) 00:40:34 ]
>>10
>>12
ずいぶん亀になってしまいましたが・・・
ありがとうございます。
おかげさまでうまくいったデス。

38 名前:デフォルトの名無しさん [2009/02/15(日) 05:33:13 ]
Perl で、バイナリーデータを検索するにはどうしてますか?
1Mぐらいのデータを読んで、特定のデータを検索するのですが、
最初、index を使っていたら、これは、\r\nを1文字と解釈するようで、
位置がずれてしまいます。
代わりになる関数を探したけど、見つからないです。

39 名前:デフォルトの名無しさん [2009/02/15(日) 08:14:08 ]
>>38
Windowsで使ってるでしょ?

特殊変数の$/に「\n」を代入してから検索してみ?

40 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 12:01:37 ]
>>38
バイナリを扱うなら \r や \n といった論理的な表現を使わず \x0D や \x0A を使え。
print index join('', map chr, 0..31), "\x0A"; # 10

www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify

41 名前:デフォルトの名無しさん [2009/02/15(日) 12:08:27 ]
>>40
1行目は重箱の隅で本件とは関係なし。
2行目はなんなの?

$/ = "\n";
print index($a,$b);

で済む問題。



42 名前:デフォルトの名無しさん [2009/02/15(日) 13:07:18 ]
Perl始めて数日の初心者です
ActivePerlでWindowsでやっているのですが、Webで見つけたサンプルが
use strict;
use warnings;
use HTML::ExtractContent;
use LWP::UserAgent;

となっているのですが、モジュールのインストールの方法がまったくわかりません。
HTML::ExtractContentというのはsearch.cpan.org/dist/HTML-ExtractContent/
ここからダウンロードできたのですが、その先をどうしたらよいのでしょうか
LWPというのはとりあえずppmからインストールできました

43 名前:デフォルトの名無しさん [2009/02/15(日) 13:08:54 ]
>>42
>su
>password: ********
> cpan
:
:
[1]cpan>install HTML::ExtractContent

おしまい。

44 名前:42 [2009/02/15(日) 14:45:18 ]
コマンドプロンプトを開いて
install HTML::ExtractContent
と入力しエンターを押すとたくさんズラーっとでてきて最終的に

NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0xff'
Stop.
TARAO/HTML-ExtractContent-0.05.tar.gz
nmake test -- NOT OK
//hint// to see the cpan-testers results for installing this module, try:
reports TARAO/HTML-ExtractContent-0.05.tar.gz
Running make install
make test had returned bad status, won't install without force
Failed during this command:
ROBIN/Want-0.18.tar.gz : make NO
RCLAMP/Class-Accessor-Lvalue-0.11.tar.gz : make_test NO
TARAO/HTML-ExtractContent-0.05.tar.gz : make_test NO

cpan >

と表示されました。
インストールが完了したと思ったのでサンプルプログラムa.plを実行すると

C:\Documents and Settings\SX3WX06MA\デスクトップ>perl a.pl
Can't locate HTML/ExtractContent.pm in @INC (@INC contains: C:/Perl/site/lib C:/
Perl/lib .) at a.pl line 3.
BEGIN failed--compilation aborted at a.pl line 3.

となってしまいました
これはインストールが失敗したということでしょうか
もしかして、ダウンロードしたモジュールを特別な場所に移動してから
cpan>install HTML::ExtractContent
をしなければいけないのでしょうか

45 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 14:50:18 ]
>>44
> これはインストールが失敗したということでしょうか

そう書いてありますが。

46 名前:デフォルトの名無しさん [2009/02/15(日) 15:33:12 ]
>>44
cpanのログを読んでどこでcpan installがつまづいたか自力で探すしかないね。

47 名前:デフォルトの名無しさん [2009/02/15(日) 15:36:46 ]
追記。
d.hatena.ne.jp/KNOPP/
の一番最後の方を読むと幸せになるかもしれん。
ただWindowsだからどうなのかは知らん。

> Class-Accessor-Lvalue
> File-Slurp
> をPPMであらかじめいれておき、

そのあと cpan >installしてみたらどーなる?

48 名前:デフォルトの名無しさん [2009/02/15(日) 15:39:14 ]
もしかしてコンパイル環境がないからコケてるのか?
ぽつぽつとスマソ。

49 名前:38 [2009/02/15(日) 21:14:22 ]
>>39
ありがとうございました。
$/なる変数は、初めて知りました。

しかし、どうやら原因は、ほかでしたw。
FTP転送の際に、改行を勝手に変換してたため、\r\nが、\nだけになってたことでした。
これで、2文字が1文字扱いされてるなってw

50 名前:デフォルトの名無しさん mailto:binmode(sage) [2009/02/15(日) 21:16:42 ]
>>38
indexや正規表現を使ってる。
文字列がutf8に汚染されないように気をつけている程度かな。

51 名前:デフォルトの名無しさん [2009/02/15(日) 21:22:34 ]
>>50
それだとバイナリにindexや正規表現を使っちゃいけないように読める。



52 名前:50 mailto:sage [2009/02/15(日) 21:56:57 ]
しまった元ファイルが壊れていたってオチか。

>>51
言われてみればそう読める。
指摘tnx.

ついでに >>36
方法はあるけど、それなりに難しそう。
GUIアプリからコンソールアプリを実行 でググると吉。
もしかしたら既存モジュールがあるかも。

53 名前:42 [2009/02/15(日) 23:00:58 ]
>>47
ついさっきまでCentOS5をインストールしてCPANで試してもうまくいかず絶望していましたが、
書き込みを見てリンク先の指示通りにやったら無事プログラムが動きました。
本当にありがとうございました。いくら感謝しても感謝し切れません。

54 名前:デフォルトの名無しさん [2009/02/16(月) 11:55:30 ]
>>53
おお動いたか、よかったな。少し心配してたw

55 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 22:19:33 ]
>>36
>>50

僕もよく知らないのだが、下のはどうかな?

use Win32::OLE;
my $WshShell = Win32::OLE->CreateObject("WScript.Shell");
$WshShell->Run('tasklist', 0);

56 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 07:10:12 ]
パッケージの外から変数を覗き見たいです
ググったところ、グローバル変数ならシンボルテーブルとかいうものを検索すれば見られそうな感じですが、
レキシカル変数は無理なのでしょうか

57 名前:デフォルトの名無しさん [2009/02/17(火) 09:16:53 ]
>>56
なぜそんなことが必要な状況になったかが問題だと思う。

58 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 09:32:52 ]
>>56
つPadWalker

59 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 13:26:55 ]
>>57
デバッグのときにあまり本体を汚さずに中の変数を覗きたいんですよ
最終的には一行書くだけで自動的に変数をトレースしたいです

>>58
それ素晴らしく完璧ですね
ありがとうございます


60 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 14:03:35 ]
>>57
知らないならレスしないでください

61 名前:デフォルトの名無しさん [2009/02/17(火) 14:25:23 ]
知ってるがお前の態度が気に入らない。



62 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 14:36:07 ]
>>61
後出しみっともない


63 名前:デフォルトの名無しさん [2009/02/17(火) 15:42:16 ]
>>62
コピペにマジレスみともない。

64 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 15:49:58 ]
>>63
そう思うならやるなよ


65 名前:デフォルトの名無しさん [2009/02/17(火) 16:31:29 ]
>>64
いつまでもみっともない。

66 名前:デフォルトの名無しさん [2009/02/17(火) 17:50:44 ]
>>65
必死だな!

67 名前:デフォルトの名無しさん [2009/02/17(火) 18:40:21 ]
>>66
>>66

68 名前:デフォルトの名無しさん [2009/02/17(火) 18:41:46 ]
キモイ、粘着、IDストーカー、
もう返信しないで下さい。キモいです。

69 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 19:08:44 ]
なにこのスレ

70 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 23:44:42 ]
文字列取得の質問です

"a,b,c:ABC,d,e,DEF"ghi

のような文字列があった場合に、

ABC(コロンとカンマの間)
DEF(カンマとダブルクオテーションの間)

の文字を取得するにはどのようにすればよいでしょうか?

indexとsubstrを駆使してみましたが、
カンマやダブルクオテーションが複数あるため
indexの位置が正しく取得できずに断念しました。

71 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 23:51:51 ]
>>70
っ[パターンマッチ]



72 名前:デフォルトの名無しさん [2009/02/18(水) 00:29:51 ]
>>71
ありがとうございます。

$tmp =~ /:(.+)\,/;

のようにやってみましたが、下記の結果になってしまいました。

$1⇒「ABC,d,e」

後ろのカンマのマッチを無視するにはどのようにすればよいでしょうか?

73 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 00:39:30 ]
>>72
(.+?)で最小マッチングできるよ

74 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 00:50:47 ]
>>73
ABC ⇒ /:(.+?)\,/
DEF ⇒ /.+\,(.+?)"/

↑で、うまくいきましたー。
ありがとうございました

75 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 06:44:36 ]
呼び出したモジュールから、本体の出力命令 ( print とか die とか )を察知して
内容を置換して出力し直すことは可能でしょうか

76 名前:デフォルトの名無しさん [2009/02/18(水) 07:48:50 ]
可能です。

77 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:57:23 ]
>>76
どうもです

78 名前:75 mailto:sage [2009/02/18(水) 23:09:04 ]
どうやら print をオーバーライドするのが一番手っ取り早そうですね
ですが、perl はサポートしてないんですよね
実現してるモジュールなんかはありますでしょうか

79 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 01:33:04 ]
>>78
親切な僕が変態 ReplacePrint.pm をそれっぽく書いたげたお。
die のほうはせっかく例外投げてんだから catch してあげて。

使い方:
use ReplacePrint;
print "string\n";

# ここから ReplacePrint.pm
package ReplacePrint;
use strict;

sub TIEHANDLE { bless [], $_[0] };

sub PRINT {
my $self = shift;
my @str = @_;
for (@str) {
s/$/ is replaced/;
print STDOUT;
}
}

my $out;
open *OUT, ">", \$out;
my $stdout = select(OUT);
tie *OUT, "ReplacePrint";
1;


80 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 03:00:45 ]
ありがとうございます
まだファイルハンドルあたりやtaiについての知識が薄いので、
ここ2,3日で実験しながら学びたいと思います
また何か分からないことがあると思うので、
よろしくお願いします

81 名前:79 mailto:sage [2009/02/19(木) 22:56:32 ]
>>80
正直、想定外の好反応にあわててる僕がいるお。
外野からの「こんなひどいことするくらいなら設計見直したほうがいい」系のツッコミを期待してたので。
>>79 は猛烈にやっつけで、行儀の良くないことをいくつもやっている点が「変態」の所以。
なのでこのまま流用したりすると後でひどい目にあうことうけあい。
ヒント程度にしておくのが吉です。



82 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 00:25:08 ]
Mooseっていったん適当なクラスにrole付加したら、あとでそのrole使わないようにってできないの?

83 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 09:24:24 ]
:>>81
:viaレイヤ使うといいのかもしれない。使ったことないけど。

84 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 10:12:57 ]
StringRandomモジュールを使用せずに2chのIDのようにランダムな文字列を生成するにはどうすればよいでしょうか?

85 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 11:43:28 ]
その程度のプログラムも書けないのは全くプログラミングの勉強が
不足しているのでもうすこし勉強しましょう。

86 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 14:09:07 ]
>>84
っ[Digest]

87 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 14:28:40 ]
解決しました。ありがとうございました。勉強してきますorz

88 名前:デフォルトの名無しさん [2009/02/20(金) 18:27:25 BE:1369512858-2BP(150)]
UTF-8のテキストファイルから">"一文字を正規表現で検索して置き換えたいのですが、
s/>/test/g
とやってもうまく検索できません
EUC-JPへのエンコードなどしてみたのですが、そうすると他の文字が一部文字化けなどしてしまい更に
面倒なことになったので、できれば文字のエンコードなしで日本語の置き換えをしたいです
Dumpで表示した\xxxなどの形式で検索もしてみましたが、うまく置き換えできませんでした

日本語の置き換えに何かいい方法はないでしょうか?
置き換えしたい文字は">"だけです。

89 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 18:31:12 ]
なんといういやがらせ


90 名前:88 [2009/02/20(金) 18:56:00 ]
自己解決しました
index関数とsubstr関数で置換できました

91 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 18:58:52 ]
とあるプログラムの一部に書かれてたんですが
これはどういう意味なんでしょう?

# untaint
$0 =~ /^(.+)$/;
my $self = $1;

$0でスクリプト自身のファイル名を取ってきて
正規表現に掛け、マッチしたものを別の変数に入れてますけど、
これだと$0と$selfは一緒なものが入る気がするんですが・・・。



92 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 19:21:24 ]
>>91
志村〜、コメント、コメント

汚染されたデータからパターンマッチで部分文字列を取り出すことで
汚染を取り除いている(=untaint)のだが、汚染とは何かとか言い出すと
長くなるので「perl 汚染」でぐぐっていろいろと調べてみるといいよ。

93 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 20:02:26 ]
$0が汚染されてたらスクリプト自体が実行出来ないもんじゃねえの?
(汚染チェックの重要性は十二分に解ってはいるんだけど)

94 名前:91 mailto:sage [2009/02/20(金) 21:38:11 ]
>>92
レスありがとうございます。
なるほど、不正なコマンド含んでたりするものを取り除いてるわけですね。

でもこの正規表現だと任意の文字列にマッチしてしまって取り除いたりは
できないような気もしますが・・・。一回正規表現を通して見かけだけ汚染を
取り除いたとみなしてるんでしょうか。

まぁ調べる方針はわかったのでもう少し調べてみます。どうもでした。

95 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 23:19:11 ]
.*は何にでもマッチしちゃうので、全くその通り。無理矢理に汚染フラグを
取り除いただけです。よい子は真似しないこと!


96 名前:デフォルトの名無しさん [2009/02/21(土) 18:23:38 ]
perl -e 'use strict;my%H;sub A{@H{qw/A B C/}=(1,2,3);return \%H};*H=A();print "$H{C}\n"'
perl -e 'use strict;my%H;sub A{my %H@H{qw/A B C/}=(1,2,3);return \%H};*H=A();print "$H{C}\n"'

この二つ
上は何故かコンパイルも通り、意図したようにデータも返すことが出来る
下は一見すると正しい文法だし問題もないように見えるけどなぜかデータを取得できない
原因がわかる人いますか?

97 名前:デフォルトの名無しさん [2009/02/21(土) 18:24:12 ]
下は
perl -e 'use strict;my%H;sub A{my %H;@H{qw/A B C/}=(1,2,3);return \%H};*H=A();print "$H{C}\n"'
の間違いです。スマソ

98 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 20:00:22 ]
>>96-97
スコープが違うから。
上はサブルーチンの外側で宣言した %H に代入している。
下はサブルーチンの内側で宣言した %H に代入している。

型グロブはパッケージ変数。

99 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 20:18:27 ]
>>98
なるほど
パッケージレベルのmy変数はどの関数からも見えるんですね
あと型グロブはmy変数とは異なるパッケージ変数と。勉強になりました

100 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 11:53:36 ]
ここ(kage.monazilla.org/system_DOLIB100.html)を参考に
●ログインするプログラムを書いてみました。
しかし、認証に失敗して、以下のセッションIDが返ってきます。
SESSION-ID=ERROR:ppppppppppp
何かアドバイスお願いします。

※IDとパスワードはここではダミーのものとしていますが
実際には自分自身のIDとパスワードを使用しています。

use strict;
use Socket;
use FileHandle;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);

my $id='id';
my $pw='password';
my $ua = LWP::UserAgent->new;
$ua->agent('DOLIB/1.00');
$ua->default_header('X-2ch-UA' => 'Hoge/1.00');
my $url='https://2chv.tora3.net/futen.cgi';
my %form = ('ID'=>$id,'PW'=>$pw);
my $req = POST($url,[%form]);

101 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 12:51:19 ]
>>100
手元で検証してみたが、サーバ側のバグかもしれない
IDパラメータの「@」が「%40」にエンコードされていると認証に失敗した



102 名前:101 mailto:sage [2009/02/22(日) 12:58:44 ]
さっきのレスがわかりにくいかもしれないので…
futen.cgiに渡すパラメータは通常
ID=mail@domain.jp&PASS=password
って風になるんだけど、これが
ID=mail%40domain.jp&PASS=password
という風に渡すと、なぜか認証に失敗する。
本来は後者でも%40が@にデコードされた結果、認証が成功していないといけないのだが…

あ、>>100のコードでおかしいところ発見。
my $req = POST($url,[%form]);

my $req = POST($url,\%form);

103 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 13:12:46 ]
>>102
・エンコードしない。
・[%form]→\%formに修正。

再度実行してみましたけど、認証に失敗・・・orz

104 名前:101 mailto:sage [2009/02/22(日) 13:20:31 BE:1092302674-2BP(1)]
>>103
いや、プログラムが間違ってるわけじゃなくて、サーバ側の実装がおかしいんです。
で、一応の回避策ですが、
\%form

Content => "ID=$id&PW=$pw"
に修正すればうまくいくかと思います。

P.S.
サーバ側のバグについて
qb5.2ch.net/test/read.cgi/operate/1225876082/591
にて問い合わせています

105 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 14:11:11 ]
お〜っ、勃ってる。
辛抱強く DAT 落ちしたログ持って待ってた甲斐があった。


…単なるログコレクターみたいなもんなんだけど…。

106 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 19:02:42 BE:318384566-PLT(54324)]
大昔から知られてる問題

107 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 19:48:03 ]
  ↑
すぐそういうことを言う・・・
たまたま知ってたから自慢したいだけやろ。

108 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 20:13:00 ]
>>107
そういう風に嫉妬むきだしの解釈するのは感心しませんね。

>>106さんは、自分がたまたま読んでいなかったばかりに、素早く問題点を
指摘してあなたがたに無駄働きさせないことが出来なくてすいませんと
言いたかったんですよ。

109 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 20:18:33 ]
後出しジャンケンみっともない

110 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:12:06 ]
>>104
解決しました。
ありがとうございました。


111 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:36:02 ]
仮想配列の中に'abc'が存在するかどうか確認する方法はありますか?



112 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:40:11 ]
exists

113 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:40:20 ]
仮想配列って何ですか

114 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:40:39 ]
「仮想配列」

115 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 23:51:08 ]
先っぽの皮が半分だけ剥けてるヤツだろ。
手で引っぱって全部剥けるなら心配いらん。

116 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 03:18:46 ]
>>106
>switch.layer3.asia が稼動してる際に SNMPv2c の一般的な読み取りコミュニティ名で
>リクエストを送ると、どこかのツリーの下に私の携帯電話番号が現れますよ

layer3.asia/

痛いw


117 名前:デフォルトの名無しさん [2009/02/24(火) 03:02:56 ]
perlに限った事じゃないかも知れない(前置き)
klassというのをたまに見掛けるけど、これはどういった意図で使ってるの?
ある程度の頻度で見掛けるので、一定の合意があるのかと思って聞いてみました。


118 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 03:29:04 ]
classが予約語の言語でclassの類似物を作った場合とか
funktionなんてのもよく見るね

119 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 13:22:48 ]
フォームから読み出したデータを処理したいのです。
読み出したデータの名前はa1からa10までで、それを$a1から$a10に入れたいのですが、

$form = new CGI;
$a1 = $form -> param('a1');
$a2 = $form -> param('a2');

…と、a10まで順番に書いていかなければならないんでしょうか。
すっきりした書き方があれば、教えて下さい。

120 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 13:25:44 ]
>>119
そもそも変数名に通し番号をつけるセンスをなんとかすべきだな。
配列使えよ。

121 名前:デフォルトの名無しさん [2009/02/24(火) 13:32:09 ]
$form = new CGI;

foreach(0..10){push(@a, $form->param('a' . $_))}

でいいんじゃね?ゼロからだけど@aの添え字にあわせるため。



122 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 14:00:14 ]
>>119
${"a$_"} = $form->param("a$_") for 1..10;

123 名前:デフォルトの名無しさん [2009/02/24(火) 14:13:51 ]
変態が好きなら0-9にしようぜ

push(@a,$form->param($_))for a0..a9;


124 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 14:23:55 ]
というか、パラメタにつく数字は2桁超えるならa00-a10と言う風に桁をそろえようぜ。
ソートする時とか上のような技法が使えないから。

125 名前:119 mailto:sage [2009/02/24(火) 14:41:12 ]
>>120-124
配列なんて考えもしませんでした…思いついたところで、
今度は「配列に入れたいんですが」と泣きついていたように思いますが。
桁数にも気をつけます。

ありがとうございました。

126 名前:デフォルトの名無しさん [2009/02/24(火) 14:45:13 ]
>>124
ラマ本は買った?
www.amazon.co.jp/dp/4900900818
昔のラマ本の方が分かりやすかったな・・・。

127 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 14:45:31 ]
>>125

128 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 14:47:47 ]
さらにごめん。さっきの中古本だった。3版になってるのね。
www.amazon.co.jp/dp/4873111269

129 名前:デフォルトの名無しさん [2009/02/24(火) 17:06:30 ]
BigFloatで以下などが正確に計算出来ないのですが、何故なのでしょうか?

print Math::BigFloat->new('436611485')->fdiv('2074', 3)->bstr, "\n";
# 211000 と表示されてしまう

130 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 17:24:37 ]
つprint Math::BigFloat->new('436611485')->bdiv('2074')->bstr, "\n";

fdivじゃなくてbdivだよな。bdivの二番目の引数は精度だから精度3桁で計算合ってるよ。

131 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 18:44:14 ]
jcode(ver 2.7) で誰か知ってたらおしえてください。

utf8の文字列(フラグ付き)で、 'あ' という文字を 650字程度より
多い状態で、sjis に変換すると 途中から、????? と文字化けします。

Jcode.pm ってバイト数の制限があるのでしょうか。

どなたか知っていたら教えてください。





132 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 18:54:10 ]
>>131
とりあえずざっと目通した?
search.cpan.org/~dankogai/Jcode-2.07/Jcode.pm
search.cpan.org/~dankogai/Encode-2.31/Encode.pm

133 名前:デフォルトの名無しさん [2009/02/24(火) 23:21:18 ]
Perlの実行エラー時に、エラーの発生したファイル名と行番号が表示されますが、
それに加えて、呼び出し元(さらに呼び出し元の呼び出し元なども)の関数を表示できるような機能ってありますか?

&aaa();
sub aaa{ &bbb(); }
sub bbb{ &ccc(); }
sub ccc{ &ddd(); } #ここでエラー

たとえば、上のようなプログラムで、関数 ddd が定義されていないとき、
「Undefined subroutine &main::ddd called at test.pl line XX.」というエラーが出ますが、
このエラーの呼び出し元が bbb でさらにその呼び出し元が aaa であることが
エラーメッセージで表示されると助かります。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<164KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef