Perlについての質問箱 43箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/02/19(金) 16:47:06"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。
CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://pc11.2ch.net/php/)
CGI の質問は答えが Perl と全然関係ない話に帰着する場合が
多かったりするので WEB プログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
http://www.perl.org/get.html
● 2010/02/19 現在の最新版: 5.10.1
▼ 前スレ
Perlについての質問箱 42箱目
http://pc12.2ch.net/test/read.cgi/tech/1257139591/
リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-7 あたり
0002デフォルトの名無しさん
2010/02/19(金) 16:47:21Perl プログラミング講座: ttp://www.site-cooler.com/kwl/perl/
[本]
リャマ: ttp://www.oreilly.co.jp/books/9784873114279/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/books/detail/4-7561-3057-7.shtml (修正)
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/
[オンラインマニュアル]
最新のドキュメント: ttp://search.cpan.org/dist/perl/
perl5.8.x のドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi (停止中)
perldoc.jp: ttp://www.perldoc.jp/
perldoc.com: ttp://www.perldoc.com/
0003デフォルトの名無しさん
2010/02/19(金) 16:47:26CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/
[テクニック]
Perl メモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perl のページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perl の小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl 5.8 Unicodeメモ]
ttp://www.rwds.net/kuroita/program/Perl_unicode.html (修正)
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004デフォルトの名無しさん
2010/02/19(金) 16:47:31# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;
# 次に、あなたが実行したい処理の内容を入れて下さい。
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1. の行を入れると、DOS 窓への日本語出力は簡便になりますが、
# ソースファイル名に非 ANSI 文字が含まれる場合に die 文の出力が失敗します。
# ※2. OS に渡す文字列(ファイル名,dos コマンドのオプションなど)は、
# この例のように cp932 でエンコードする必要があります。
0005デフォルトの名無しさん
2010/02/19(金) 16:47:341 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/
16 http://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 http://pc8.2ch.net/test/read.cgi/tech/1117870308/
18 http://pc8.2ch.net/test/read.cgi/tech/1121804136/
19 http://pc8.2ch.net/test/read.cgi/tech/1126977805/
20 http://pc8.2ch.net/test/read.cgi/tech/1131286411/
0006デフォルトの名無しさん
2010/02/19(金) 16:47:3621 http://pc8.2ch.net/test/read.cgi/tech/1134327348/
22 http://pc8.2ch.net/test/read.cgi/tech/1138519327/
23 http://pc8.2ch.net/test/read.cgi/tech/1141742901/
24 http://pc8.2ch.net/test/read.cgi/tech/1146022352/
25 http://pc8.2ch.net/test/read.cgi/tech/1149259409/
26 http://pc8.2ch.net/test/read.cgi/tech/1153412251/
27 http://pc8.2ch.net/test/read.cgi/tech/1157874614/
28 http://pc8.2ch.net/test/read.cgi/tech/1162273941/
29 http://pc11.2ch.net/test/read.cgi/tech/1166708139/
30 http://pc11.2ch.net/test/read.cgi/tech/1173880452/
31 http://pc11.2ch.net/test/read.cgi/tech/1181500187/
32 http://pc11.2ch.net/test/read.cgi/tech/1186995713/
33 http://pc11.2ch.net/test/read.cgi/tech/1192463997/
34 http://pc11.2ch.net/test/read.cgi/tech/1199977642/
35 http://pc11.2ch.net/test/read.cgi/tech/1208674881/
36 http://pc11.2ch.net/test/read.cgi/tech/1215569470/
37 http://pc11.2ch.net/test/read.cgi/tech/1218449440/
38 http://pc11.2ch.net/test/read.cgi/tech/1221967332/
39 http://pc12.2ch.net/test/read.cgi/tech/1234181856/
40 http://pc12.2ch.net/test/read.cgi/tech/1243631674/
0007デフォルトの名無しさん
2010/02/19(金) 16:47:3941 http://pc12.2ch.net/test/read.cgi/tech/1249581780/
42 http://pc12.2ch.net/test/read.cgi/tech/1257139591/
0008デフォルトの名無しさん
2010/02/21(日) 10:33:231,2,7
1,3,2
という(X,Y,値)というメッシュ(グリッド)データがあって
例えば座標が1ごとに値があるのを、5毎にして今までの値を平均して入れるというのを組みたいのですが
どうすればよいでしょうか?
どう処理して良いかわからず困っています。
0009デフォルトの名無しさん
2010/02/21(日) 10:56:545ごとのメッシュを作っておいてそこにコピーする、というのは何となく思いついたんだけど、
「今までの値の平均」っていうのがよくわからんな。
0010デフォルトの名無しさん
2010/02/21(日) 11:19:03...
};
if (@_){
...
}
って感じで例外処理できるっていろんなとこに書いてるけど、これがサブルーチンの中で既に@_の中埋まってたりする場合evalの最後でundef(@_)とかしなきゃいけないの?
なんか他にいい方法ない?
00118
2010/02/21(日) 11:41:27今までの値の平均というのは5ごとのメッシュにした場合そのメッシュには
(1,2),(1,3),(1,4),(1,5)(2,1)・・・・・(5,5)のそれぞれのメッシュの値の平均を入れたいんです。
この場合このメッシュは変換後(2,5、2,5)の座標となって上記の平均が値となるようにです。
0012デフォルトの名無しさん
2010/02/21(日) 11:42:26@_ じゃなくて $@ じゃないのか?
0013デフォルトの名無しさん
2010/02/21(日) 13:19:22ありがと...orz
0014デフォルトの名無しさん
2010/02/21(日) 15:22:580015デフォルトの名無しさん
2010/02/21(日) 16:14:532.5×{1+INT(座標)}で変換すりゃいーんじゃないか
0016デフォルトの名無しさん
2010/02/21(日) 16:15:38座標÷5
0017デフォルトの名無しさん
2010/02/21(日) 16:21:2600188
2010/02/21(日) 17:06:36おお、座標の変換は出来そうですね。
あとはそれで値を平均していくというのができればいいのですね。
>>17
forでsumとって25で割るっていうのは値の平均ですよね?
二次元配列に入れるのは座標ですか?
0019デフォルトの名無しさん
2010/02/21(日) 21:45:13リファンレスな
0020デフォルトの名無しさん
2010/02/21(日) 22:19:11>If you want to get at a slice (part of a row) in a multidimensional
>array, you’re going to have to do some fancy subscripting. That’s
"multidimensional array"
確かに二次元って言葉は出て込ない(通常 Array of Array って書くから)
>リファンレス
??
0021デフォルトの名無しさん
2010/02/21(日) 22:20:20◯Array of arrays
0022デフォルトの名無しさん
2010/02/21(日) 22:23:080023デフォルトの名無しさん
2010/02/21(日) 22:24:400024デフォルトの名無しさん
2010/02/21(日) 22:25:380025デフォルトの名無しさん
2010/02/21(日) 22:25:560026デフォルトの名無しさん
2010/02/21(日) 22:26:100027デフォルトの名無しさん
2010/02/21(日) 22:30:050028デフォルトの名無しさん
2010/02/22(月) 05:55:040029デフォルトの名無しさん
2010/02/23(火) 16:40:49自己満足してる初心者がいるな
0030デフォルトの名無しさん
2010/02/24(水) 16:02:17$res->content =~ /$recstr/)) {
service_set($v, $r, "up");
&ld_debug(2, "check_http: $$r{url} is up\n");
return $SERVICE_UP;
}
service_set($v, $r, "down");
&ld_debug(3, "Headers " . $res->headers->as_string);
&ld_debug(2, "check_http: $$r{url} is down\n");
return $SERVICE_DOWN;
こんなコードあるんだけど
if ($res->is_success の箇所で
Can't call method "is_success"って出てて処理が停止しちゃうんだけど
とりあえず続行させるにはどうすればいいの?
0031デフォルトの名無しさん
2010/02/24(水) 16:05:22003230
2010/02/24(水) 20:26:30Perlってそもそも変数に原始性はもってないものなの?
ECCメモリ使ってないせいなのかな?
0033デフォルトの名無しさん
2010/02/24(水) 20:34:59じゃなきゃ、こっちが分かるわけないだろ。
0034デフォルトの名無しさん
2010/02/24(水) 21:58:330035デフォルトの名無しさん
2010/02/24(水) 22:09:350036デフォルトの名無しさん
2010/02/24(水) 22:55:420037デフォルトの名無しさん
2010/02/24(水) 22:59:360038デフォルトの名無しさん
2010/02/25(木) 00:12:20ref $resをprintするだけでいいけどな。
0039デフォルトの名無しさん
2010/02/25(木) 16:40:460040デフォルトの名無しさん
2010/02/26(金) 11:49:00>>34 お母さんかよ!
>>35 お兄ちゃんかよ!
>>36 家庭訪問の先生かよ!
>>37 たまたま居合わせた水道屋かよ!
>>38 とりあえず呼ばれてきた親戚かよ!
>>39 とりあえず呼ばれてきたお巡りさんかよ!
0041デフォルトの名無しさん
2010/02/26(金) 12:11:250042デフォルトの名無しさん
2010/02/26(金) 20:45:28最終的にhogeに値をセットするんなら最初にhogeに対して指定した制約(Foo)が適用されるんじゃないの?
俺が素人だからかもしれんが何がしたいのかよくわからん
0043デフォルトの名無しさん
2010/02/28(日) 09:44:33たとえばhttp://hogehoge/hoge.jpgを自動でダウンロードする場合です。
0044デフォルトの名無しさん
2010/02/28(日) 09:51:130045デフォルトの名無しさん
2010/03/01(月) 00:00:24Googleグループもスパムが飛んでるし
0046デフォルトの名無しさん
2010/03/01(月) 01:51:130047デフォルトの名無しさん
2010/03/01(月) 02:48:27requireで実行した処理に引数を送りつけるにはどうしたら良いでしょうか?
requireで実行でなくても構わないんですが、
1: 実行中に外部から文字列 (フィル名と引数) を受け取る。
2: その文字列をrequireして返って来た内容を処理する。
と言うのがしたいのです。
コマンドとかではなくて、同じプロセス内で実行できたらいいなと思ってます。
004847
2010/03/01(月) 03:27:24eval( qq[ local \@_ = @外部から受け取った引数\; \n] . $openで読んだファイル内容 );
とやるのはあまりに強引でしょうか?
0049デフォルトの名無しさん
2010/03/01(月) 05:19:14あ、新PerldocJPだった
年末に空中分解したような感触を受けたんだけど
0050デフォルトの名無しさん
2010/03/01(月) 06:02:22分解以前に、始まってるようにも見えなかったが
0051デフォルトの名無しさん
2010/03/01(月) 21:58:270052デフォルトの名無しさん
2010/03/02(火) 23:17:420053デフォルトの名無しさん
2010/03/03(水) 09:05:510054デフォルトの名無しさん
2010/03/03(水) 13:30:51>>53
12月に5.12が出ると思ったら難航しているみたいだから使っているよ、5.11.5を。
0055デフォルトの名無しさん
2010/03/03(水) 19:38:03こんなかんじのコードがあるんですけど$varに括弧を付ける意味ってなんですか?
0056デフォルトの名無しさん
2010/03/03(水) 19:45:270057デフォルトの名無しさん
2010/03/03(水) 19:57:36ありがとうございます。
ググってもうまく探せなかったので助かりました。
0058デフォルトの名無しさん
2010/03/04(木) 02:00:321 →0001
100 →0100
1000→1000
s/〜/〜/;
で一発で置換するには〜の部分はどう書けばいいですか?
0059デフォルトの名無しさん
2010/03/04(木) 02:03:100060デフォルトの名無しさん
2010/03/04(木) 02:39:020061デフォルトの名無しさん
2010/03/04(木) 03:09:270062デフォルトの名無しさん
2010/03/04(木) 03:14:540063デフォルトの名無しさん
2010/03/04(木) 03:15:300064デフォルトの名無しさん
2010/03/04(木) 03:20:21そういう使い方ができるのがPythonなんんだから
0065デフォルトの名無しさん
2010/03/04(木) 03:23:50print( substr("0000" . "100", -8, 8 ) . "\n");
print( substr("0000" . "1000", -8, 8 ) . "\n");
0066デフォルトの名無しさん
2010/03/04(木) 04:05:45my $formated_str = sprintf( %04d, $str );
$formated_str =~ tr/0-9/0-9/;
文字コードは書かれてないから知らん
0067デフォルトの名無しさん
2010/03/04(木) 04:21:09utf8::is_utf8($_) or die "死ね";
s{ (?<!\d) (\d{1,3}) (?!\d) }{
my $is_zenkaku = $1 =~ tr/0-9//;
( $is_zenkaku ? '0' : '0' ) x ( 4 - length $1 ) . $1;
}egx;
0068デフォルトの名無しさん
2010/03/04(木) 05:05:06ということで俺は つsprintf
0069デフォルトの名無しさん
2010/03/04(木) 16:44:31$_ = "1〜1000の整数の先頭に0を付け加えて、4桁にしたい ";
1 while(s/(?<![0-9])([0-9]{1,3})(?![0-9])/0$1/g);
規制一時解除記念カキコ。
0070デフォルトの名無しさん
2010/03/08(月) 06:52:00p(); #=> Undefined subroutine &main::p called at - line 2.
これは print 関数の厳密なエイリアスは作れないということでしょうか
0071デフォルトの名無しさん
2010/03/08(月) 10:49:27作れないかどうかはわからないが、コードだけ見ると名前空間の::がないからでは?
*{__PACKAGE__."::p"}
0072デフォルトの名無しさん
2010/03/10(水) 12:16:30# perl のパスを指定
$send="00000000000\@docomo.ne.jp"; # デフォルト送信先
while (<>){
$content .= $_;
m/^Content-Length: (\d+)$/;
if ( m/^$/ ){ # 本文は調べない
while (<STDIN>){
$content .= $_;
}
}
}
open(SENDMAIL,"|/usr/bin/sendmail $send");
print SENDMAIL $content;
close(SENDMAIL);
exit;
Perlを勉強中で、上記を使って自分の携帯からメールを送りそのまま返信
(転送)するプログラムを作ろうとしています。
実際にメールを送るとサーバーには届いているのですが、返信をしてくれ
ません。記述で間違っている箇所があれば教えてください。
0073デフォルトの名無しさん
2010/03/10(水) 12:33:34・受信したメールを適当なファイルに格納するプログラム
・適当な内容のメールを送信するプログラム
を別々に書くところからはじめるのをお勧めする。
0074デフォルトの名無しさん
2010/03/10(水) 23:23:28ちゃんとヘッダを作ってないのに /usr/bin/sendmail を
使うのはよくない。
0075デフォルトの名無しさん
2010/03/11(木) 01:57:19007672
2010/03/11(木) 09:21:14上手くいきました。記述は全然変えていないのですが、.plで作成してサーバー
で変更をしていたのがよくなかったようです。
原因がわからず解決まで半日もかかってしまいましたorz
上のコードは社内でperlができる人のを真似たものでした。
0077デフォルトの名無しさん
2010/03/11(木) 17:54:42私が作りたいと思っているプログラムが
「携帯Aから(絵文字などを含む)メールを受け取り、携帯Bに転送する」
というものなのですが、>>72で書いたコードではデコメは良いのですが
絵文字が全て〓に化けてしまいました。
サーバーで受け取った時点で〓に置換されてしまうので、送る各キャリ
アに合わせて文字コードを変換しなくてはならないとわかりました。
ttp://cgipon.specters.net/labo/it_emoji.htmlで紹介されているサン
プルを試してみたりしているのですが、上手く変換してやることができ
ずにいます。 どのような方法を試してみればよいでしょうか?
0078デフォルトの名無しさん
2010/03/11(木) 19:35:500079デフォルトの名無しさん
2010/03/11(木) 21:27:100080デフォルトの名無しさん
2010/03/12(金) 01:59:19> どのような方法を試してみればよいでしょうか?
どこが悪いのか突き止めて、そこを修正するといいよ。
0081デフォルトの名無しさん
2010/03/12(金) 07:40:31テキストファイルの一部を置換したいんですが、よく文字化けしてしまいます
>>4を使ったplファイルを別途用意せず、バッチファイルへの記述だけで
文字化けに対応する方法はないでしょうか?
perl -pe s/"置換前文字列"/"置換後文字列"/ "置換前.txt" > "置換後.txt"
0082デフォルトの名無しさん
2010/03/12(金) 09:30:44>>78
全てを試したのではないのですが〓に変換されたのは、ほぼ全ての絵文字
でした。
>>79
SoftBankではないです、言われてみれば〓はSoftBankのロゴなんですね。
>>80
上記のサイトのサンプルの関数を通して変化しなかったので、他のサイト
を一生懸命探していました。
絵文字はこんなに難しかったのですね
0083デフォルトの名無しさん
2010/03/12(金) 11:35:37perl -Mencoding=xxx かな。
PERLIOとかPERL_ENCODINGは効かないのか...
0084デフォルトの名無しさん
2010/03/13(土) 03:58:23ありがとうございます
が、恥ずかしながらうまく使えません・・・
以下みたいなのとは根本的に使い方が違うんでしょうか?
perl -Mencoding=sjis -pe s/"置換前文字列"/"置換後文字列"/ "置換前.txt" > "置換後.txt"
0085デフォルトの名無しさん
2010/03/13(土) 06:34:220086デフォルトの名無しさん
2010/03/15(月) 18:34:27my $subject_encoded =
is_imode($email_to)
? '=?SHIFT-JIS?B?' . MIME::Base64::encode_base64( encode( 'x-sjis-docomo', $subject ), '' ) . '?='
: is_softbank($email_to)
? '=?UTF-8?B?' . MIME::Base64::encode_base64( encode( 'x-utf8-softbank', $subject ), '' ) . '?='
: is_ezweb($email_to) ? encode( 'x-sjis-kddi-auto', $subject )
: '=?ISO-2022-JP?B?' . MIME::Base64::encode_base64( encode( 'iso-2022-jp', $subject ), '' ) . '?=';
UTF-8文字列の$subjectを上記を使ってエンコードしたいのですが、文字
化けしてしまいます。Encode::Guessで確認するとasciiに変換されていま
した。使い方に間違いがあるでしょうか?よろしくお願いします。
0087デフォルトの名無しさん
2010/03/16(火) 09:11:14どの携帯キャリアの分岐だったのか、encode_base64を通す前が問題なのか
通した後が問題なのか、ぐらいは切り分けてから質問しろよ。
0088デフォルトの名無しさん
2010/03/16(火) 14:21:01これをつけて.plファイルを実行すると、
下記のようなエラーが多く出ます。どう対応すればいいでしょうか_?
use strict をつけないと特にエラーは出ません。
Global symbol "$xxxx" requires explicit package name at xxxx.cgi line 16.
0089デフォルトの名無しさん
2010/03/16(火) 14:55:14「use strict を付けた状態でエラーにならないように書け」ってこと。
変数にmy付けてスコープを明確にせよ
0090デフォルトの名無しさん
2010/03/16(火) 15:10:35thanks
0091デフォルトの名無しさん
2010/03/16(火) 18:26:58不十分でした、すみません。
キャリアはdocomoなのでis_imodeの分岐を通っています。
encode_base64の前と後、どちらに問題があるのかつかめていない状
態です。
utf-8にデコードした文字列をそこに通すだけで良いのかと考えてしま
っていたのですが、使い方を間違っているようです。
絵文字について調べてEncode::JP::Mobileを見つける事ができたので
すが、携帯から受け取ったメールをそのまま返信するというコードに、
どう当てはめていけばよいのかわからずに苦戦中です。
0092デフォルトの名無しさん
2010/03/16(火) 20:46:44単に化けたというんじゃなくて、具体的に$subjectがこれこれのときに
結果がこうなって化けてますというのを示して欲しい。
0093デフォルトの名無しさん
2010/03/16(火) 21:20:56PostgresqlのXML型へ代入しようとするとエラーが出ます。
DBIx::Class::ResultSet::update_or_create(): DBI Exception:
DBD::Pg::st execute failed: ERROR: operator does not exist: xml = unknown
LINE 1: ...fo_id = $1 AND me.program_type_id = $2 AND me.res = $3 AND m...
^
HINT: No operator matches the given name and argument type(s).
You might need to add explicit type casts.
XML型への代入にキャストが必要だということはわかったのですが、
具体的にどうすればよいのか、ググってもマニュアル読んでも見つかりません。
賢い方、どうかご教示ください。
0094デフォルトの名無しさん
2010/03/17(水) 09:17:32レスありがとうございます。
ttp://yanor.net/wiki/?%E6%90%BA%E5%B8%AF
こちらのメール送信を参考にさせてもらっています。
my $email_to = '[email protected]';
MIME::WordDecoder->default(
MIME::WordDecoder->new([
'*' => sub{jcode(shift)->sjis},
]
)
);
#メール読み込み準備
my $parser = new MIME::Parser;
$parser->output_to_core(1);
$parser->tmp_recycling(1);
$parser->use_inner_files(1);
my $entity = $parser->parse(\*STDIN);
my $subject = decode('MIME-Header', $entity->head->get('Subject'));
上記のようにして$subjectを抜き出して、>>86を通しています。
このままですと、日本語は大丈夫で絵文字が全て〓となってしまいます。
0095デフォルトの名無しさん
2010/03/17(水) 10:24:53$subjectの値がどう文字化けしたかを示せと。
俺の予想では「このプログラムに入る前から絵文字が
〓に置き換わっている」だけどなw
0096デフォルトの名無しさん
2010/03/17(水) 11:31:02入出力結果はほしいね。
0097デフォルトの名無しさん
2010/03/17(水) 11:54:10debugで確認して
「今日の天気は[雲の絵文字]です」が「莉頑律縺ョ螟ゥ豌励・縲薙〒縺・」
となっていました。
>俺の予想では「このプログラムに入る前から絵文字が
>〓に置き換わっている」だけどなw
受け取った段階で〓ということでしょうか?
0098デフォルトの名無しさん
2010/03/17(水) 11:57:560099デフォルトの名無しさん
2010/03/17(水) 12:58:07このメモはクライアント側のメーカー名でこれは、CGIで取得できます。
この値をcookie に保存したいと考えています。
CGI::Cookie は理解しています。
1. expiration date
2. domain
3. path
4. secure flag
とクッキーには項目がありますが、どのあたりにいれてやればいいでしょうか?
また、具体的にどのように、セットすればいいでしょうか?
また、 %cookies = fetch CGI::Cookie;とすることで、
ハッシュに格納できることは理解しております。
0100デフォルトの名無しさん
2010/03/17(水) 13:04:28どれもハズレ
0101デフォルトの名無しさん
2010/03/17(水) 13:11:57memo=メモ内容
って普通に情報を記録すればいいんでないの?
0102デフォルトの名無しさん
2010/03/17(水) 13:51:05thank you,
>id=ID情報
>memo=メモ内容
このあたり、もう少しソースコードも交えて教えてください
よろしくお願いします。
0103デフォルトの名無しさん
2010/03/17(水) 14:11:170104デフォルトの名無しさん
2010/03/17(水) 14:16:35http://search.cpan.org/dist/CGI.pm/lib/CGI/Cookie.pm
質問見る限り、Cookieについて理解がないようだからもう少しCookieというものについて調べたほうがいいよ。
0105デフォルトの名無しさん
2010/03/17(水) 14:39:40Ty
>>
>> # Create new cookies and send them
>> $cookie1 = new CGI::Cookie(-name=>'ID',-value=>123456);
>> $cookie2 = new CGI::Cookie(-name=>'preferences',
>> -value=>{ font => Helvetica,
>> size => 12 }
このSYNOPSISでは、
# Create new cookies and send them
# fetch existing cookies
の2通りの例が示してあるのですね。
で新たにくっきを作るときが上のコードですね。
>>$cookie1 = new CGI::Cookie(-name=>'ID',-value=>123456);
これを
$cookie1 = new CGI::Cookie(-name=>'ID',-value=>123456,-memo=>めもしたいこと);
って感じにしてもいいのでしょうか?
0106デフォルトの名無しさん
2010/03/17(水) 15:05:59他の言語がわかってる人向けのperlの教科書みたいのないですか?
0107デフォルトの名無しさん
2010/03/17(水) 15:06:20CGI::Cookie is object oriented. Each cookie object has a name and a value. The name is any scalar value. The value is any scalar or array value (associative arrays are also allowed).
0108デフォルトの名無しさん
2010/03/17(水) 15:11:56実際に試してみたらいいんですよ
[14:58]% perl -MCGI::Cookie
new CGI::Cookie(-name=>'ID',-value=>123456,-memo=>めもしたいこと);
Unrecognized character \xE3 in column 51 at - line 1.
ほら、エラーになる。日本語のところでエラーになってる。
日本語をシングルクォートでくくっても、
[15:03]% perl -MCGI::Cookie -MData::Dumper
$cookie1 = new CGI::Cookie(-name=>'ID',-value=>123456,-memo=>'めもしたいこと');
warn Dumper $cookie1;
$VAR1 = bless( {
'value' => [
123456
],
'name' => 'ID',
'path' => '/'
}, 'CGI::Cookie' );
欲しい結果にはなってないと。って感じで自分で試さないとレス貰えないよ。
0109デフォルトの名無しさん
2010/03/17(水) 15:38:26thanks
Data::Dumper;
こんな便利なモジュールがあるんですね、ありがとうございます。
>>[15:03]% perl -MCGI::Cookie -MData::Dumper
このあたり、perl -M で二つのモジュールを指定してどのような処理を行いるかすこしわからないのですが調べてみます。
0110デフォルトの名無しさん
2010/03/17(水) 16:05:19すみません、ダンプするにはどうしたらよいのでしょうか?
0111デフォルトの名無しさん
2010/03/17(水) 16:13:46によりますと、クッキーの情報に関して、
>> set-cookie = "Set-Cookie2:" cookies
>> cookies = 1#cookie
>> cookie = NAME "=" VALUE *(";" set-cookie-av)
>> NAME = attr
>> VALUE = value
>> set-cookie-av = "Comment" "=" value
>> | "CommentURL" "=" <"> http_URL <">
>> | "Discard"
>> | "Domain" "=" value
>> | "Max-Age" "=" value
>> | "Path" "=" value
>> | "Port" [ "=" <"> portlist <"> ]
>> | "Secure"
>> | "Version" "=" 1*DIGIT
>> portlist = 1#portnum
>> portnum = 1*DIGIT
となっております。クッキーに関しては、
>>ttp://www.thinkit.co.jp/free/article/0604/7/8/
を読みました。
>>101のアドバイスによる、
>>id=ID情報
>>memo=メモ内容
>>って普通に情報を記録すればいいんでないの?
ですが、これは、どうも、new CGI::Cookie 内に書くところがないような気がします。
どこに書いてやればいいでしょうか?
アドバイスお願いします。
0112デフォルトの名無しさん
2010/03/17(水) 16:14:080113デフォルトの名無しさん
2010/03/17(水) 16:30:46>>108の文章を読めばわかるはずだが、そのやり方ではできない。
WEBでサービスを利用してると、IDと一緒にパスワードも記録するってのはたまに見かけるでしょ?
>>101はIDと一緒にメモを記録しておこうってだけだよ。
#!/usr/bin/perl
use strict;
use CGI qw/:standard/;
use CGI::Cookie;
# 記録
my $cookie1 = new CGI::Cookie(-name=>'id', -value=>"ID");
my $cookie2 = new CGI::Cookie(-name=>'memo', -value=>"MEMO");
print header(-cookie=>[$cookie1,$cookie2]);
# 読取
my %cookies = fetch CGI::Cookie;
my $id = exists $cookies{'id'} ? $cookies{'id'}->value : "none";
my $memo = exists $cookies{'memo'} ? $cookies{'memo'}->value : "none";
print "id: $id\n";
print "memo: $memo\n";
CGIとして実行すると、初回はnone、2回目以降はIDとMEMOが表示される。
0114デフォルトの名無しさん
2010/03/17(水) 16:54:30レスありがとうございます。
早速unpackの使い方を調べて
@chr = unpack("H*", $subject);
print "@chr\n";
を試してみました。結果は空白です。やっぱり変な変換のされ方を
してしまっているのかもしれません。
0115デフォルトの名無しさん
2010/03/17(水) 17:05:22thank you
理解できました。
0116デフォルトの名無しさん
2010/03/17(水) 17:10:35ワイド文字列をunpack 'H*'に食わせると各文字の下位8bitしか
出てこないので、俺はこんな感じの自作サブルーチン
使ってる。
sub hexdump {
my($s) = @_;
$s =~ s/(.)/sprintf "[%x]", ord($1)/ge;
return $s
}
0117デフォルトの名無しさん
2010/03/17(水) 17:17:38それは>>86のプログラムに食わす前の$subjectの値が空白だったということか?
そんなら〓はどっから出てくんだよ。なんかおかしくね?
0118デフォルトの名無しさん
2010/03/17(水) 17:18:220119デフォルトの名無しさん
2010/03/17(水) 17:29:42>>86を通る前の表示が記述ミスしていました。
「今日の天気は[雲の絵文字]です」が「cae56e29176f1367590a」となって
いて、同じ方法で>>86後の$subject_encodedをダンプすると空白になって
しまいました。
0120デフォルトの名無しさん
2010/03/17(水) 17:45:06雲の絵文字があるはずの7文字目の文字コードの下2桁が
13ってことだな。
雲はU+E63F
〓はU+3013
なのですでにその時点で〓になってる疑いが濃厚。
ttp://www.nttdocomo.co.jp/service/imode/make/content/pictograph/basic/index.html
0121デフォルトの名無しさん
2010/03/17(水) 18:41:41文字コードを調べたらUTF-8で3013は〓でした。perlを置くサーバーにメール
が届いた段階で〓に変えられているのでは、>>86を通しても…
〓にしないでメールを受け取る方法があるのでしょうか?
0122デフォルトの名無しさん
2010/03/17(水) 20:17:550123デフォルトの名無しさん
2010/03/17(水) 23:34:13gmailぐらいの交渉力があれば個別対応してもらえるけど、普通は
無理なんじゃないかなぁ。
0124デフォルトの名無しさん
2010/03/18(木) 09:14:35まずは自社サーバーで〓に変換されていない状態で受け取れないと無理ですね。
同じようなプログラムに挑戦した方が結構いるのかと思っていました。
0125デフォルトの名無しさん
2010/03/18(木) 13:38:39クライアントがサーバーに対して
GET リクエストを出します。
この際、クライアントは、
GET xxxx HTTP/1.1
User-Agent:test1
とUser-Agent のヘッダを追加します。
つまり、クライアントからのリクエスには、上のUser-Agnet
のヘッダが含まれています。
サーバー上のパールプログラムの中でで、このUser-Agent の
test1 を変数として保持したいのですが、具体的な実装方法に
ついてアドバイスをお願いします。
0126デフォルトの名無しさん
2010/03/18(木) 13:50:15$ENV{HTTP_USER_AGENT}
0127デフォルトの名無しさん
2010/03/18(木) 14:10:35ありがとうございます。
0128デフォルトの名無しさん
2010/03/18(木) 14:35:34Host: 192.16
Connection: close
User-Agent:
x-ModelName: pp-pppp
x-SDKVersion: 1.1.1
リクエストヘッダが上のようにあり、この中で特殊な、x-ModelName
の pp-pppp を取得したいと考えています。
しかし、
ttp://ja.wikipedia.org/wiki/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0#HTTP.E7.92.B0.E5.A2.83.E5.A4.89.E6.95.B0
をみますと、これに該当する環境変数がありません。
この場合、どうやって、pp-pppp を取得できますでしょうか?
0129デフォルトの名無しさん
2010/03/18(木) 15:07:57板違い
>>126みたいに板違いなのに回答するとこうやって図にのるのでみんなやめようね
0130デフォルトの名無しさん
2010/03/18(木) 16:00:44どこの板に質問すればいいでしょうか?
0131デフォルトの名無しさん
2010/03/18(木) 16:03:03>>1読め
0132デフォルトの名無しさん
2010/03/18(木) 16:03:13>>1読め
0134デフォルトの名無しさん
2010/03/19(金) 10:18:39改行コードを変換したいんですが
・次行の先頭が 'A' で始まる場合のみ、行末の改行を削除
これを
perl -pe 's/\nA//g'
とやっても期待した結果になりません(全く完全に何も置換されない)
環境はCygwin1.7です。
0135デフォルトの名無しさん
2010/03/19(金) 10:42:540136デフォルトの名無しさん
2010/03/19(金) 10:54:200137デフォルトの名無しさん
2010/03/19(金) 10:59:03>>134 s/\n(?=A)//sg
0138デフォルトの名無しさん
2010/03/19(金) 15:57:58perl -p0e 's/\n(?=A)//g'
0139デフォルトの名無しさん
2010/03/20(土) 06:01:460140デフォルトの名無しさん
2010/03/20(土) 06:21:570141デフォルトの名無しさん
2010/03/20(土) 08:43:370142デフォルトの名無しさん
2010/03/20(土) 08:56:410143デフォルトの名無しさん
2010/03/20(土) 09:02:41finishとかprocessedとか、どうもしっくり来なかった
0144デフォルトの名無しさん
2010/03/26(金) 13:04:37なりますのでここで質問させてもらいます。
ttp://search.cpan.org/~gaas/libwww-perl-5.834/lib/HTTP/Request.pm
によりますと、
$r = HTTP::Request->new( $method, $uri, $header_ref, $content )
で三番目の引数が、reference to an HTTP::Headers object or a plain array
reference of key/value pairs.
とリフェレンスになっております。
Can't call method "clone" on unblessed reference at C:/Perl/lib/HTTP/Message.pm
line 32.
*たしかに、message.pm 内では、$header = $header->clone;
となっております。
my %header = ('User-Agent' => 'test_Agent','Content-Type' => 'application/x-www-form-urlencoded');
my $header_ref = \%header;
と三番目の引数をセットしています。
ttp://ftp.ics.uci.edu/pub/websoft/libwww-perl/archive/1999h1/0500.html
解決方法は、このあたりに書いてあるとおもうのですが、どのように三番目の引数をセットしてやればいいでしょうかアドバイス願います。
0145デフォルトの名無しさん
2010/03/26(金) 13:20:33HTTP::Headersのオブジェクトにしたら良いよ
my $h = HTTP::Headers->new('User-Agent' => 'test_Agent','Content-Type' => 'application/x-www-form-urlencoded');
この$hを第三引数に。
0146デフォルトの名無しさん
2010/03/26(金) 13:22:28my @header = ('User-Agent' => 'test_Agent','Content-Type' => 'application/x-www-form-urlencoded');
my $header_ref = \@header;
0147デフォルトの名無しさん
2010/03/26(金) 13:25:15if (ref($header) eq "ARRAY") {
$header = HTTP::Headers->new(@$header);
}
else {
$header = $header->clone;
}
0148デフォルトの名無しさん
2010/03/26(金) 13:50:13解決いたしました。
>>145
オブジェクトを指定してうまく動作しました。
>>146
plain array reference を読み間違えておりました。配列であってハッシュではありませんでした。
>>147
アドバイス ありがとうございました。
0149デフォルトの名無しさん
2010/03/27(土) 00:11:17バッククオートを使用しているのですが、
コマンドの文字列に$を含むような場合(環境変数とか)に
変数として展開されないようにする方法ってありませんでしょうか。
0150デフォルトの名無しさん
2010/03/27(土) 09:38:32またはperlipc(1)の例にあるsafe backtick
# add error processing as above
$pid = open(KID_TO_READ, "−|");
if ($pid) { # parent
while (<KID_TO_READ>) {
# do something interesting
}
close(KID_TO_READ) || warn "kid exited $?";
} else { # child
($EUID, $EGID) = ($UID, $GID); # suid only
exec($program, @options, @args)
|| die "can't exec program: $!";
# NOTREACHED
}
0151デフォルトの名無しさん
2010/03/27(土) 16:02:53俺はまだ勉強してないんだけど
モダンPerlの利点って何があるのか簡潔に書け。
0152デフォルトの名無しさん
2010/03/27(土) 17:14:040153デフォルトの名無しさん
2010/03/27(土) 17:42:380154デフォルトの名無しさん
2010/03/27(土) 18:45:16いまさらPerl4互換とかないわー
0155デフォルトの名無しさん
2010/03/27(土) 18:49:09localとか使うん?
0156デフォルトの名無しさん
2010/03/27(土) 19:38:50http://www2n.biglobe.ne.jp/~kajino/perl4ref/
0157デフォルトの名無しさん
2010/03/27(土) 19:48:28sub func
{
local($x, $y)=@_;
まあ慣れなんだけど
0158デフォルトの名無しさん
2010/03/27(土) 20:10:320159デフォルトの名無しさん
2010/03/27(土) 20:21:09JavaとかPHPとか他の言語は自動的に局所変数だ
0160デフォルトの名無しさん
2010/03/28(日) 09:35:47$_[0]とかを直接使ってるw
0161デフォルトの名無しさん
2010/03/28(日) 13:56:500162デフォルトの名無しさん
2010/03/28(日) 14:03:110163デフォルトの名無しさん
2010/03/28(日) 14:04:47CPANでCtypeで検索しろ
0164デフォルトの名無しさん
2010/03/29(月) 11:12:090165デフォルトの名無しさん
2010/03/29(月) 12:40:00できれば日本語で・・・
ぐぐっても、圧縮/解凍のやりかたしか出てない;;
0166デフォルトの名無しさん
2010/03/29(月) 16:31:31「圧縮/解凍のやりかた」以外の何を知りたいのか
具体的に書くべきだろうな、そういう時は。
「マニュアルに書かれている内容が理解できないので
噛み砕いて教えて下さい」って言ってるのと同義なんだから。
http://search.cpan.org/dist/Archive-Zip/lib/Archive/Zip/FAQ.pod
http://search.cpan.org/dist/Archive-Zip/lib/Archive/Zip.pm
0167デフォルトの名無しさん
2010/03/29(月) 16:48:45すみませんでした。
具体的にやりたいのは、画像ファイルを無圧縮ZIPに固めておき、それを解凍せずにブラウザに表示したいのです。
ローカルファイルを開いたハンドルから表示するのは出来たので、
ZIP内のファイルのハンドルが取れれば、出来そうなのですが・・・
my $zip = Archive::Zip->new('test.zip');
my $fh = $zip->open('hoge.jpg');
みたいに出来たらな・・・と。
0168デフォルトの名無しさん
2010/03/29(月) 19:22:43お望みの物はArchive::Zip::MemberReadかい
0169デフォルトの名無しさん
2010/03/30(火) 15:14:12ありがとうございます。
早速調べて試してみたのですが、Not a GLOB reference のエラーが出ます。perl は初めてなので、なにか勘違いしていると思いますが、それがどこかわかりません。
#!/usr/bin/perl
use Archive::Zip;
use Archive::Zip::MemberRead;
$imgtype = 'jpeg';
#// file �@
# open(IMG, "./1.jpg") or die;
#// zip �A
$zip = Archive::Zip->new('./1.zip');
$IMG = Archive::Zip::MemberRead->new($zip, "1.jpg");
#// イメージ表示
binmode $IMG;
binmode STDOUT;
print "Content-type: image/$imgtype\n\n";
print while (<$IMG>);
#// 画像クローズ
close($IMG);
#// 終了
exit(0);
�@を生かし、�Aを殺すとうまくいきますが、逆だと binmode $IMG の箇所でNot a GLOB referenceとなります
0170デフォルトの名無しさん
2010/03/30(火) 16:28:22ハッシュをblessしただけの普通のオブジェクトだから
ファイルハンドルとしては使えない。あくまで同じような
メソッドが用意してあるだけの普通のオブジェクト。
binmodeとかはムリ。
IO::Stringみたいにグロブにtieしていろいろがんばれば
なんとかなるけどそこまではやってないようです。
0171デフォルトの名無しさん
2010/03/30(火) 16:55:00そういう方向で修正していって見ます。
わざわざ中をのぞいていただき、ありがとうございました。
0172デフォルトの名無しさん
2010/03/31(水) 21:16:21$zip->contents(FILENAME);
0173デフォルトの名無しさん
2010/04/01(木) 11:14:51テンポラリファイルを使用する形で出来上がっていましたが、$zip->contents(FILENAME)を使用することで
「ファイルの書き込み→読み込み→出力」が、「ファイルの読み込み→出力」にすることが出来ました。
画像の縮小をさせるとレスポンスが遅いのですが、玄箱には重過ぎるのでしょう。
まだフロント(iアプリ)はテスト用でしか試してませんが、なんとか目処がつきました。
ありがとうございます。
0174デフォルトの名無しさん
2010/04/01(木) 17:09:070175デフォルトの名無しさん
2010/04/01(木) 17:12:590176デフォルトの名無しさん
2010/04/01(木) 17:31:06あとはCPANとかでいろいろ探しまくる作業が残りの半分。
0177デフォルトの名無しさん
2010/04/01(木) 17:40:50どの本ですか?
アマゾンなどのリンクください。
プログラミング言語Perlマスターコース
プログラミングPerl
という本なら見つかるのですが
0178176
2010/04/01(木) 17:43:19オライリーのらくだ絵の本。Perl開発者が書いたやつ。
0179デフォルトの名無しさん
2010/04/01(木) 19:04:290180デフォルトの名無しさん
2010/04/01(木) 19:14:030181デフォルトの名無しさん
2010/04/01(木) 19:30:190182デフォルトの名無しさん
2010/04/01(木) 23:06:190183デフォルトの名無しさん
2010/04/01(木) 23:17:350184デフォルトの名無しさん
2010/04/01(木) 23:57:330185デフォルトの名無しさん
2010/04/02(金) 00:19:10初心者にすすめるもんじゃないよありゃ
0186デフォルトの名無しさん
2010/04/02(金) 02:40:11Perl6なんて本当は完成させたくないんだよ。
綺麗すぎる言語は退屈だ。
0187デフォルトの名無しさん
2010/04/06(火) 00:05:27ファイルリストに記載されているファイルのみを
別のディレクトリにコピーしたいのですが、
どのようなコードを書けばよいのでしょうか?
ファイルリストを読み込み、$file_listで1文字ずつ表示させる状態にして、
system("cp $file_list $dir_name");とやっているのですが、うまくいきません。
0188デフォルトの名無しさん
2010/04/06(火) 00:16:52print `cp $file_list $dir_name`;
エラーがあるならこれで分かるんじゃないか
0189デフォルトの名無しさん
2010/04/06(火) 00:31:120190デフォルトの名無しさん
2010/04/06(火) 04:09:320191デフォルトの名無しさん
2010/04/06(火) 20:19:04任意の文字列を返すにはどうすればよいでしょうか?
例えばDateTimeモジュールはDateTime->now()でオブジェクトを取得しますが、
scalar($now)すると現在時間が文字列で返ってくるのですが、
こういうのはどう実装すればよいでしょうか?
0192デフォルトの名無しさん
2010/04/06(火) 20:38:04print $now; とか my $datestr = "$now"; で文字列になることを言ってるんなら、overload
0193デフォルトの名無しさん
2010/04/08(木) 01:08:37use overload ( 略
'""' => '_stringify',
略
0194デフォルトの名無しさん
2010/04/10(土) 00:38:14どなたかヒントでも頂けるとありがたいです。
WWW::Mechanize でCSVをダウンロードします。
その後print や Encode::decode などすると「Wide character ....」 と表示されました。
UTF8フラグが立っているのかと思い、Encode::encode("utf8",$data_str) などして、
ファイルを保存して開いてみると文字化けしてしまいます。
エディタはEmacsでエンコード指定して開き直したりもしてみました。
本当に試行錯誤して、encodeやdecodeのいろんな指定をしてみましたがダメでした。
しかしブラウザからCSVをダウンロードするとエクセルできちんと開きますし、
Emacs で UTF-8 で開くことが出来ます。
正直、分かりません・・・。
0195デフォルトの名無しさん
2010/04/10(土) 00:43:240196デフォルトの名無しさん
2010/04/10(土) 01:25:59わかってないなら弾の言う通りに書けよ。
0197194
2010/04/10(土) 02:00:29ブラウザで落とすとUTF8になっているので、ファイルはUTF8なんだと思うんですが。。
Mechanizeのcontent には独特なエンコードルールが有るんでしょうか?
contentのデータをencodeするのがマズイのかな。
0198デフォルトの名無しさん
2010/04/10(土) 02:23:11my $content = $res->decoded_content(charset => 'none'); # $res isa HTTP::Response
で生データ取れるからそれをそのまま保存するなりすればいいかと。
0199デフォルトの名無しさん
2010/04/10(土) 02:42:18バイナリエディタで中身見ればいいのに
0200デフォルトの名無しさん
2010/04/10(土) 02:54:08思うってなんだそりゃw
自分で見てから判断しれよ
0201デフォルトの名無しさん
2010/04/10(土) 04:20:49とりあえずDevel::Peekなりでdumpしてutf8flagが立ってるかどうかをちゃんと確認した方がいい。
曖昧なまんまの推測だと答えも推測になるからなかなか答えにたどり着かんよ
0202デフォルトの名無しさん
2010/04/10(土) 05:28:58iso-8859-1なんじゃねえの?
0203デフォルトの名無しさん
2010/04/11(日) 00:35:300204デフォルトの名無しさん
2010/04/11(日) 00:42:17スクレイピングのマナーとか心構えとかは参考になるけどな
0205デフォルトの名無しさん
2010/04/14(水) 19:52:51Perlで書かれたプログラムを実行するとラクダの形で文字列が出力され、
そのプログラム自体もラクダの形に揃えられていたものをみたのですが、
探してみてもなかなかみつかりません。
少ない情報ですが、お分かりの方はいませんでしょうか?
0206デフォルトの名無しさん
2010/04/14(水) 20:21:480207デフォルトの名無しさん
2010/04/15(木) 23:32:19ディレクトリ階層を優先してまびくようにするにはどうしたらいいでしょうか?
例:
$url = "http://www.abc123.net/abcdefg/hijklmn/opqrstu/vwxyz/foo1234.html" ←65文字
$url = omiturl($url, 50);
print $url;
この結果としてこんな感じにしたいです
http://www.abc123.net/ ... /vwxyz/foo1234.html ←47文字
0208デフォルトの名無しさん
2010/04/16(金) 00:36:20use URI;
sub omiturl {
my $uri = URI->new(shift);
my $maxlen = shift;
my $repl_q = quotemeta(my $repl = "...");
my $path = $uri->path;
until (length "$uri" <= $maxlen) {
$path =~ s,\A/(?:$repl_q/)?[^/]+,/$repl, or last;
$uri->path($path);
}
return "$uri";
}
手っ取り早くURI使ってるから$replに半角スペースとか使うと%20にされちゃうんで、
そのへん気に入らなかったら適当に直してくれ
0209デフォルトの名無しさん
2010/04/16(金) 04:53:00便利につかわさせて頂きます。
ありがとうございました。
0210デフォルトの名無しさん
2010/04/16(金) 05:59:51のようなクエリ文字列 or フラグメントの長いURLを>>208に通すと無限ループするな
見た感じだとマッチしなくなった時点でループを抜けるように書かれてると思うけど、なぜだろう
0211デフォルトの名無しさん
2010/04/16(金) 06:53:08例えば文字の長さを10とかやったら絶対無限ループ
0212208
2010/04/16(金) 10:08:30untilを↓に差し替えで無限ループは回避できるはず。>>207がまだ見てることを祈る…
for (my $i = 0; length "$uri" > $maxlen and $i < 20; $i++) { # ループ20回で強制的に抜ける
$path =~ s,\A(/(?:$repl_q/)?[^/]+),/$repl, or last;
last if $path eq $1; # マッチするが置換しても内容が変わらない場合抜ける
$uri->path($path);
}
0213デフォルトの名無しさん
2010/04/16(金) 22:26:22static char hoge[128];
write(fd, hoge, 128);
とすれば128バイト分の0x00が書き込まれると思うのですが
perlだとどのように記述すればいいでしょうか?
0214デフォルトの名無しさん
2010/04/16(金) 22:45:340215デフォルトの名無しさん
2010/04/16(金) 22:46:250216デフォルトの名無しさん
2010/04/17(土) 00:38:56>>215
ありがとうございます、繰り返し演算子という奴を使うんですね。
0217デフォルトの名無しさん
2010/04/17(土) 16:23:26my @arr = qw(a b c d e);
my $i = 3;
??? add_elem @arr, $i, "z";
print "@arr"; #=> a b c z d e
0218208
2010/04/17(土) 17:34:110219デフォルトの名無しさん
2010/04/17(土) 18:05:40�d
できました
0220デフォルトの名無しさん
2010/04/21(水) 18:25:44HOGE::FUGAの代わりにHOGE::PIYOを読むように動的に変更したいのですが、
この場合'HOGE/FUGA.pm'ってパス指定しないとうまくいきません。
出来ればHOGE::PIYOのような形式で指定したいのですが、
上手い方法はないでしょうか?
0221デフォルトの名無しさん
2010/04/21(水) 18:26:350222デフォルトの名無しさん
2010/04/22(木) 00:53:15Perlでグラフを書く必要がありGD::Graphというモジュールを発見したので
使おうと思っていろいろ調べました。
その結果、このモジュールは軸を対数表示にすることができない?ようなんですが
この認識であってますかね?
http://search.cpan.org/~mverb/GDGraph-1.43/Graph.pm
0223デフォルトの名無しさん
2010/04/22(木) 00:58:380224デフォルトの名無しさん
2010/04/22(木) 02:12:27軸の目盛り(?)が意図したようにならんのでは?
0225デフォルトの名無しさん
2010/04/22(木) 05:03:240226224
2010/04/22(木) 11:20:420227デフォルトの名無しさん
2010/04/22(木) 19:34:23レスありがとうございます。
描画はそれでいけますが素直にgnuplotのほうが無難かな。
0228デフォルトの名無しさん
2010/04/22(木) 22:51:170229194
2010/04/22(木) 23:50:50use strict;
use warnings;
use utf8;
use Encode;
use Net::Delicious;
my $delicious = Net::Delicious->new({user=>'hoge',pswd=>'fuga'});
my $agent = LWP::UserAgent->new;
foreach my $bookmark ( $delicious->recent_posts ) {
my $url = $bookmark->url();
print utf8::is_utf8($bookmark->description) . "\n";
my $title = Encode::encode('utf8',$bookmark->description);
my $tags = Encode::encode('utf8',$bookmark->tags);
$tags =~ s/([^ ] )/#$1/g;
print $title . "\n";
print $tags . "\n";
print "---------------------------------------------\n";
}
上のようなスクリプトをかきましたが、descriptionが文字化けしてしまいます。
Net::Delicious からとったデータはutfフラグがたっていたので、そのままencodeしました。
UTFフラグがたったものをencodeして文字化けする場合はどのように対処すれば良いでしょうか?
0230デフォルトの名無しさん
2010/04/23(金) 02:37:56試してみたけど文字化けしないな
使い方も問題なさそうだけど
0231デフォルトの名無しさん
2010/04/23(金) 15:55:39cpan moduleがencodeに対応してたりしてなかったりするものを混ぜると
わけわかんなくなる場合がある。
関係してそうなmoduleかたっぱしからupdateしてみ
0232デフォルトの名無しさん
2010/04/23(金) 16:31:43sub new{
my $class = shift;
my $self = {
a => [],
};
return bless $self, $class;
}
----
my $c1 = new TestC;
my $c2 = new TestC;
としたときに $c1 と $c2 の a が同じものになってしまいます。
($c1 で編集すると $c2 も同じになる)
インスタンスごとに配列も別の実態を参照してほしいのですがどうすればよいでしょうか?
0233デフォルトの名無しさん
2010/04/23(金) 16:50:56わかるソースも出せよ。
package TestC;
sub new{
my $class = shift;
my $self = {
a => [],
};
return bless $self, $class;
}
package main;
$c1->{a}->[0] = 100;
printf "c1: %d, c2: %d\n", $c1->{a}->[0], $c2->{a}->[0];
すくなくとも上記で試した限りでは結果は
c1: 100, c2: 0
だった。
0234デフォルトの名無しさん
2010/04/23(金) 16:55:03別物みたいだけど?
package main;
my $c1 = new TestC;
my $c2 = new TestC;
warn '$c1->{a} and $c1->{a}: ' . is_equal($c1->{a}, $c1->{a});
warn '$c1->{a} and $c2->{a}: ' . is_equal($c1->{a}, $c2->{a});
sub is_equal {
my($x, $y) = @_;
($x eq $y) ? 1 : 0;
}
package TestC;
sub new{
my $class = shift;
my $self = {
a => [],
};
return bless $self, $class;
}
1;
====================
$c1->{a} and $c1->{a}: 1
$c1->{a} and $c2->{a}: 0
0235232
2010/04/23(金) 17:05:46すいません、長くなりそうなのではしょってしまいました。
以下を実行すると
c1 2
c2 2
と表示されます。@5.10.0
package TestC;
####new省略
sub push_array{
my $self = shift;
my $a = $self->{a};
push @a, $_[0];
}
sub get_count{
my $self = shift;
my $a = $self->{a};
return @a;
}
package main;
my $c1 = new TestC;
my $c2 = new TestC;
$c1->push_array(1);
$c2->push_array(2);
print "c1 ".$c1->get_count."\n";
print "c2 ".$c2->get_count."\n";
0236デフォルトの名無しさん
2010/04/23(金) 17:18:560237デフォルトの名無しさん
2010/04/23(金) 17:40:450238デフォルトの名無しさん
2010/04/23(金) 17:43:020239デフォルトの名無しさん
2010/04/23(金) 17:44:47から常に同じパッケージ変数が使われてる
あと$a, $bはsortが使う特別な変数なのでそれ以外の用途で使うとろくな目に
会わないからやめとけ。
0240デフォルトの名無しさん
2010/04/23(金) 20:07:590241デフォルトの名無しさん
2010/04/23(金) 20:08:54どんな糞仕様だよと
0242デフォルトの名無しさん
2010/04/23(金) 20:56:57Perlなら妥当な仕様だろ。
0243デフォルトの名無しさん
2010/04/23(金) 21:14:280244デフォルトの名無しさん
2010/04/23(金) 21:26:090245デフォルトの名無しさん
2010/04/23(金) 22:34:24そもそも、降順と昇順の意味がピンと来ない
0246232
2010/04/23(金) 22:44:39色々と得心がいきました。
解決したところで引き続き頭をこねこねしたいと思います。
ありがとうございました。
0247デフォルトの名無しさん
2010/04/23(金) 23:26:38っていう話があってだな
0248デフォルトの名無しさん
2010/04/24(土) 00:01:40なるほど
そう考えると確かにと思わざるを得ない
ただあまり使わない特殊変数は検索かけても引っかかってこないのがウザい
0249デフォルトの名無しさん
2010/04/24(土) 00:03:240250デフォルトの名無しさん
2010/04/24(土) 00:26:590251デフォルトの名無しさん
2010/04/24(土) 01:56:06Windowsのバッチファイルからワンライナーで
msg="おはよう"
から
msg=こんにちは
に置換したいんですが・・・
perl -i.BAK -pe "s/(?<=msg=).*/こんにちは/" hoge.txt
これだとシフトJISで書き込まれてしまうんです。
UTF-8 で書き込む方法があれば教えてください。
0252デフォルトの名無しさん
2010/04/24(土) 10:37:27同じプログラム板じゃないか
Perlの特殊変数は氏ね。絶対に使うな。可読性下がる
http://pc12.2ch.net/test/read.cgi/tech/1141988910/34
34 名前:デフォルトの名無しさん[sage] 投稿日:2006/03/11(土) 22:02:24
特殊変数は、他人や「昔の自分」が書いたソースに出てきても
まったく可読性に影響の無い、数少ない構成要素の一つだろう。
同じ名前の変数には、常に同じ意味を持つものが入ってるんだから。
「これ何のためにあるの?何が入ってるの?」って状態になるのは普通の変数のほう。
0253デフォルトの名無しさん
2010/04/24(土) 14:02:59文字コードがsjisであれば、
perl -i.BAK -pe -MEncode "s/(?<=msg=).*/Encode::from_to('こんにちは','sjis','utf8')/e" hoge.txt
>>252
可読性とか書きようによってはいくらでも良くなるし悪くもなるもんなのに、言語仕様のせいにするのはおかしいよね。
他の言語から見れば、Perlは変数の前に$@%*とか使ったり、特殊変数の意味が理解できないだろうから気持ち悪く映るんだろうけど。
0254デフォルトの名無しさん
2010/04/24(土) 18:26:390255デフォルトの名無しさん
2010/04/24(土) 18:27:430256デフォルトの名無しさん
2010/04/24(土) 20:20:59あと配列もハッシュも中身にアクセスするとき$プリフィクスを要求するのは分かりにくいよね(これはperl6で変更になるけど)
0257デフォルトの名無しさん
2010/04/24(土) 20:23:230258194
2010/04/24(土) 20:59:32Macだといけました。
Windowsだと化けるんだな。。
ppmのモジュールは確かに古かったから、cpanで入れ直してみようかと思います。
ちなみにeshellで出力してるので、winでもcp932にencodeしなくても大丈夫です。
てかこれで途中までは日本語がきちんと表示されます。
0259デフォルトの名無しさん
2010/04/25(日) 01:08:38おれはperl5の方が好きだ
スカラだから$で統一されててわかりやすい
0260デフォルトの名無しさん
2010/04/25(日) 03:03:46例えばデリファレンスで配列を得たけりゃ@$array_refだし
確かにそりゃそうだなぁ
0261デフォルトの名無しさん
2010/04/25(日) 05:23:43配列へのアクセスなのに。
0262デフォルトの名無しさん
2010/04/25(日) 10:58:03そういう思想で作ってあるって習ったから覚えやすかった
0263デフォルトの名無しさん
2010/04/25(日) 14:29:25@mes = ('012345678901234567890123456789', 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほ', いいいいい);
例えばこのようなものを、次のように2つのカラムがあるかのように出力したいのですが、どうしたらできるでしょうか?
OZA- .| 012345678901234567890123
...| 456789
POPPO | あいうえおかきくけこさしすせそたちつてとなにぬ
...| ねのはひふへほ
MASZOE .| いいいいい
こんなのでできるかなと思ったのですが無理でした…
format AAA =
@<<<<<<<<<< | @<<<<<<<<<<<<<<<<<<<<
~~ | @<<<<<<<<<<<<<<<<<<<<
.
よろしくお願いします。
0264デフォルトの名無しさん
2010/04/25(日) 14:47:400265デフォルトの名無しさん
2010/04/25(日) 19:20:18ありがとうございます。すごい勉強になります。
> perl -MEncode -i.BAK -pe "s/(?<=msg=).*/Encode::from_to('こんにちは','sjis','utf8')/e" hoge.txt
だと Modification of a read-only value attempted at C:/Perl/lib/Encode.pm line 195, <> line 280. って叱られるので
perl -MEncode -i.BAK -pe "s/(?<=msg=).*/$s='こんにちは';Encode::from_to($s,'sjis','utf8');$s/e" hoge.txt
でできました!
Jcode使えば少し短くなりました
perl -MJcode -i.BAK -pe "s/(?<=msg=).*/Jcode->new('こんにちは','sjis')->utf8/e" hoge.txt
0266デフォルトの名無しさん
2010/04/26(月) 12:59:430267デフォルトの名無しさん
2010/04/26(月) 14:39:27覚えてると便利:$@ $! $. $/ $? $$
ゴルフやるなら:$\ $, $" $& $` $' @F
0268デフォルトの名無しさん
2010/04/26(月) 21:46:22while(<IN>){
$str .= $_;
}
file内のテキスト全てを、$strというスカラー変数に代入してみました。
ファイルサイズが小さければ問題ないが何万行とかだと代入処理に失敗しますよね?
0269(!>>268)
2010/04/26(月) 22:29:11このヘンの上限というか仕様ってどこか載ってます?
0270デフォルトの名無しさん
2010/04/26(月) 23:29:24それは文法の一部で、特殊変数じゃない
0271デフォルトの名無しさん
2010/04/27(火) 02:49:33open IN,"file";
read IN,$str,-s IN;
0272デフォルトの名無しさん
2010/04/27(火) 03:17:45$str = read_file('filename');
>>268
メモリあれば大丈夫だよ。ただ毎行 .= すると遅い
0273デフォルトの名無しさん
2010/04/27(火) 17:40:54perlはいつからスカラの要素を参照するときに@で参照できるようになったんだ?
my @sca = (1,2,3);
print $sca[1]; // OK...
print @sca[1]; // OK?!
@sca[1] = 'x';
print @sca[1]; // OK?!?!
0274デフォルトの名無しさん
2010/04/27(火) 17:49:04それスカラじゃなくてたまたま1要素の配列スライス。
配列スライス自体はperl4の昔からすでにあった。
それより前はシラネ
0275デフォルトの名無しさん
2010/04/27(火) 17:53:30@sca[0..2] = "a".."c";
print @sca[0..2], "\n", @sca[0, 2], "\n", @sca[0];
0277デフォルトの名無しさん
2010/04/29(木) 21:10:07使えてたスクリプトが急に「問題が発生したため」云々のウィンドウを出して止まるようになった
ファイルが12728あるディレクトリでreaddirをしたのが原因みたい
ファイルの少ないところで使うと問題ない
なんか制限あったっけ
0278デフォルトの名無しさん
2010/04/29(木) 21:25:34260文字あるファイル名のせいだった
0279デフォルトの名無しさん
2010/04/30(金) 17:50:080280デフォルトの名無しさん
2010/04/30(金) 22:56:37http://search.cpan.org/~srezic/Tk-804.028/pod/after.pod
0281デフォルトの名無しさん
2010/05/05(水) 15:50:31PATH C:\hage;%PATH%
と「挿入」したいんですけど、
ワンライナーでできますか?
できるならやり方を教えてください。
0282デフォルトの名無しさん
2010/05/05(水) 16:00:35こんな感じ?
0283デフォルトの名無しさん
2010/05/05(水) 16:07:04perl -e "open my $FH,'<','hoge.bat';my @l=<$FH>;close $FH;open $FH,'>','hoge.bat';print $FH \"PATH C:\\hage;\%PATH\%\n\",@l;"
0284デフォルトの名無しさん
2010/05/05(水) 16:15:23Windowsだとシングルクオートじゃなくてダブルクオートじゃないとだめなんだっけか
でもこのままやると%PATH%が展開されちゃったりするのか?よくわからんから適当に直してくれ
0285デフォルトの名無しさん
2010/05/05(水) 17:13:28できました!ありがとう。
perl -i.BAK -p0 -e "s/^/PATH C:\\hage;%%PATH%%\n/" hoge.bat
0286デフォルトの名無しさん
2010/05/07(金) 01:58:11setup.exe
みたいな塊にまとめたいのですが
何がおすすめでしょうか?
昔単なる実行ファイルだけのときは
innoSetup使ってたけど
0287デフォルトの名無しさん
2010/05/07(金) 07:21:30Perl2EXE
0288デフォルトの名無しさん
2010/05/07(金) 12:04:34「array化」を英語で書くとしたら
「arraylize」「arrailise」「arrailize」、
どれにしたらよいでしょうか?
テキストを読みこんで、それを配列に格納する
というありふれた機能を持つ関数の名前です
下のように使っています
my @list = arraylize ( "list.dat" ) ;
sub arraylize {
my $name = $_[0] ;
open ( FH ,"< $name" ) ;
my @listArray = <FH> ;
close (FH) ;
return @listArray ;
}
他にも、もっと語呂のいい名前があったら教えてください
それ以前に、同じような動作をするものがあったら知りたいです
0289デフォルトの名無しさん
2010/05/07(金) 12:16:00IO::Handleのgetlinesが近いかなぁ。
本題とは関係ないが、せめてopenのエラー処理( or die $!
をつける程度でいいよ)はやっとけ。後で苦労するぞ。
0290デフォルトの名無しさん
2010/05/07(金) 12:27:01readfile なり readlines なりでいいだろ
どうしても array が重要だっつーんなら make_array
0291デフォルトの名無しさん
2010/05/07(金) 12:30:100292デフォルトの名無しさん
2010/05/07(金) 12:35:40my $name = shift ;
open ( my $fh ,"<", $name ) ;
my @listArray = <$fh> ;
close ($fh) ;
return @listArray ;
}
関係ないけど
0293デフォルトの名無しさん
2010/05/07(金) 12:39:50l はどっから出てきたんだよ
0294デフォルトの名無しさん
2010/05/07(金) 13:18:58配列だったらそのまま返したり、
ハッシュだったら key/value をセパレータで繋げた配列を返したり・・・
そこまでやって、初めて arraylize を名乗っていい。
そう思うんだ。
どうでもいいけど
0295デフォルトの名無しさん
2010/05/07(金) 13:37:180296デフォルトの名無しさん
2010/05/07(金) 14:12:49単純にfile2arrayにします
エラー処理や
ファイルハンドルに$fh、
そこのところ貰います
0297デフォルトの名無しさん
2010/05/07(金) 14:42:16@tmp{qw(foo bar baz)} = split(/,/, $_, 3);
push(@result, \%tmp);
みたいなコードがあるんですが、これを %tmp を使わずに一行で済ます書き方ってあるでしょうか。
mapあたりでできそうなんだけど思いつかない…
(foo, bar, baz, 1, 2, 3) なリストを (foo, 1, bar, 2, baz, 3) に変換する関数があればいいんだけど。
0298デフォルトの名無しさん
2010/05/07(金) 14:51:29わざわざ作らんで
use File::Slurp;
my @list = read_file("list.dat");
しなよ。
0299デフォルトの名無しさん
2010/05/07(金) 14:58:34> (foo, bar, baz, 1, 2, 3) なリストを (foo, 1, bar, 2, baz, 3) に変換する関数があればいいんだけど。
List::MoreUtilsになにかあるんじゃ
0300デフォルトの名無しさん
2010/05/07(金) 15:01:31fooxxxbaryyybazzzz
あんまやるもんじゃないな
0301デフォルトの名無しさん
2010/05/07(金) 16:11:01TMTOWTDIと言うけど、杉樽歯泳場猿画五都市と言う名言もあるし
0302デフォルトの名無しさん
2010/05/07(金) 16:17:03use List::MoreUtils qw(zip);
$_ = '1,2,3';
push @result, {zip @{[qw(foo bar baz)]}, @{[split /,/, $_, 3]}};
0303デフォルトの名無しさん
2010/05/07(金) 16:23:58おお! と思って List::MoreUtils の pairwise や mesh が使えるかと思って試してみました。
が、一旦変数に入れないとARRAYとして解釈してくれずダメでした…
#NG
print mesh qw(foo bar baz), (split(/,/, "1,2,3")); # compilation errors
#OK
my @array1 = qw(foo bar baz);
my @array2 = split(/,/, "1,2,3");
print mesh @array1, @array2;
0304デフォルトの名無しさん
2010/05/07(金) 16:25:12入れ違いになりました。
素晴らしい。使わせていただきます。ありがとうございます。
0305デフォルトの名無しさん
2010/05/07(金) 16:35:48>(foo, bar, baz, 1, 2, 3) なリストを (foo, 1, bar, 2, baz, 3) に変換する関数があればいいんだけど。
変数一つ作っていいならこんな関数かな
my @arr = ('foo', 'bar', 'baz', 1, 2, 3);
my $half = $#arr / 2;
my @result = map { +($arr[$_], $arr[$_ + $half + 1]) } (0 .. $half);
0306デフォルトの名無しさん
2010/05/07(金) 17:07:39いったん無名配列への参照[]にして
それを@{}で、参照先の配列に戻して渡している
という理解でいいのかな?
0307デフォルトの名無しさん
2010/05/07(金) 17:10:34そだね
ttp://perl-users.jp/articles/advent-calendar/2008/14.html
0308デフォルトの名無しさん
2010/05/07(金) 17:12:08なんで3行で済ます方法を書いたの?
0309デフォルトの名無しさん
2010/05/07(金) 17:14:06二行だろ
0310デフォルトの名無しさん
2010/05/07(金) 17:18:09何揚げ足とろうとしてんのw
0311デフォルトの名無しさん
2010/05/07(金) 17:32:43foo,xxx,bar,yyy,baz,zzz
>>300よりはマシかなあ…
0312デフォルトの名無しさん
2010/05/07(金) 17:51:55sub zip{ map { $_, shift @{$_[1]} } @{$_[0]} }
print zip [1,2,3],[4,5,6] ;
0313デフォルトの名無しさん
2010/05/07(金) 18:02:250314デフォルトの名無しさん
2010/05/07(金) 21:28:38ヒント:シノラー
0315デフォルトの名無しさん
2010/05/07(金) 22:52:02Net::Twitterとかじゃなくて、純粋にHTTP使ってその辺から学習したいのです
0316デフォルトの名無しさん
2010/05/07(金) 23:18:20サンプル集
0317デフォルトの名無しさん
2010/05/07(金) 23:51:12役にたたなかった
0318デフォルトの名無しさん
2010/05/08(土) 19:37:45http://www.namazu.org/ml/namazu-win32-users-ja/msg01951.html
この問題ってもう解決されています?
0319デフォルトの名無しさん
2010/05/11(火) 00:00:10エクセルから出力した行列状態になっているcvsファイルをPerlに読み込ませて、
@a、@b、@cにそれぞれの行のデータを格納したいです。
なので、二次元配列のようなことをしないといけないと思うのですが、
Perlで二次元配列のような処理をするにはどうすればよいのでしょうか?
また行列状態になっているファイルを配列に格納する他の良い方法はありますでしょうか?
よろしくお願いします。
0320319
2010/05/11(火) 00:14:071 Takehara Shinji 500 600 1300
2 Hatakeyama Takanori 569 795 1560
3 Kouki Kameda 785 889 2695
4 Daiki Kameda 758 784 9000
5 Tomoki Kameda 580 120 984
そして、左から4行目〜6行目にある数値を縦に、
@a、@b、@cに格納し、
$a[0] を参照すると、500
$a[1] を参照すると、569
$b[0] を参照すると、600
$b[1] を参照すると、795
$c[0] を参照すると、1300
$c[1] を参照すると、1560
といった具合にしたいです。
0321デフォルトの名無しさん
2010/05/11(火) 00:16:24・「perl 配列の配列」でググる
・「perl CSV」でググる
0322デフォルトの名無しさん
2010/05/11(火) 00:40:121 #! /usr/bin/perl
2
3 use strict;
4
5 my(@data, @array);
6 @data = (
7 '1 Takehara Shinji 500 600 1300',
8 '2 Hatakeyama Takanori 569 795 1560',
9 '3 Kouki Kameda 785 889 2695',
10 '4 Daiki Kameda 758 784 9000',
11 '5 Tomoki Kameda 580 120 984',
12 );
13
14 foreach(@data){
15 push(@array, [@{[split(/\s+/, $_)]}[3..5]]);
16 }
17
18 local $\ = "\n";
19
20 print $array[0][0]; #=> 500
21 print $array[1][0]; #=> 569
22 print $array[0][1]; #=> 600
23 print $array[1][1]; #=> 795
24 print $array[0][2]; #=> 1300
25 print $array[1][2]; #=> 1560
0323デフォルトの名無しさん
2010/05/11(火) 01:17:33ありがとうございます。
外部からファイルを読み込む場合はどうすればよいのでしょうか?
0324321
2010/05/11(火) 01:45:17だから「perl CSV」でググれと教えたのに。ググれば
”csvファイルを読み込んで配列の配列に変換に変換する”
ttp://d.hatena.ne.jp/perlcodesample/20080728/1217336230
こんくらいすぐに出てくるだろ
0325デフォルトの名無しさん
2010/05/11(火) 01:51:030326デフォルトの名無しさん
2010/05/11(火) 01:53:57use IO::File;
my @data = IO::File->new('data.txt', 'r')->getlines;
chomp @data;
0327デフォルトの名無しさん
2010/05/11(火) 02:04:22my @csv = read_file('hoge.csv');
chomp @csv;
0328デフォルトの名無しさん
2010/05/11(火) 02:19:44[@{[split(/\s+/, $_)]}[3..5]]
は
[(split /\s+/, $_)[3..5]]
のほうがいいよね。この場合に限れば /\s+/, $_ が無くてもよし。
つーかCSVなら最初からText::CSV(_XS)?使えばいいじゃんって話だけど。
0329デフォルトの名無しさん
2010/05/11(火) 02:46:24おお、/\s/まで省略できるのか
初めて知った
ありがt
0330デフォルトの名無しさん
2010/05/11(火) 03:42:18split(/\s+/) だと ('', 'foo', 'bar', 'baz') が返るけど、
引数なしのsplit または split(" ") なら ('foo', 'bar', 'baz') になるってことだけ注意な。
0331デフォルトの名無しさん
2010/05/12(水) 01:12:210332デフォルトの名無しさん
2010/05/12(水) 02:31:390333デフォルトの名無しさん
2010/05/12(水) 13:31:190334デフォルトの名無しさん
2010/05/12(水) 13:35:410335デフォルトの名無しさん
2010/05/12(水) 15:27:05#!/usr/bin/perl
use strict;
use utf8;
use Encode;
use Encode::Guess;
my $cp = "4FAE"; # 「侮」のコードポイント
my $packed = pack("S", $cp);
my $decoded = decode("utf-16be", $packed);
print $decoded, "\n";
my $decoded = decode("utf-16le", $packed);
print $decoded, "\n";
できないです。
0336デフォルトの名無しさん
2010/05/12(水) 15:58:560337デフォルトの名無しさん
2010/05/12(水) 16:16:020338デフォルトの名無しさん
2010/05/12(水) 16:22:45use strict;
use utf8;
use Encode;
use Encode::Guess;
my $cp = "4FAE"; # 「侮」のコードポイント
my $packed = pack("U", hex($cp));
print $packed, "\n";
ありがとうできました。でもwarningがでます。
$ perl cptest2.pl
Wide character in print at cptest2.pl line 9.
侮
$
0339デフォルトの名無しさん
2010/05/12(水) 16:28:58pack("S", $cp)じゃなくてpack("H*", $cp)だろ。
0340デフォルトの名無しさん
2010/05/12(水) 16:32:44wide characterをいきなりprintするとそうなる。
encodeしてバイト文字列にしてからprintするか、
printする前に文字コード指定してレイヤつけとけ。
binmode STDOUT, ':encoding(utf-8)';
0341デフォルトの名無しさん
2010/05/12(水) 16:34:59ありがとうです。
0342デフォルトの名無しさん
2010/05/13(木) 12:34:03これをwindowsで動かせた人いますか?
perlのファイル1つだけのプログラムだからlinuxで動かすのは簡単だったんだけど
windowsではうまく動いてくれない
0343デフォルトの名無しさん
2010/05/14(金) 13:21:02たとえば、a から 97 を得るようなことってできますか??
0344デフォルトの名無しさん
2010/05/14(金) 13:23:280345デフォルトの名無しさん
2010/05/14(金) 13:26:100346デフォルトの名無しさん
2010/05/15(土) 03:08:540347デフォルトの名無しさん
2010/05/15(土) 03:32:340348デフォルトの名無しさん
2010/05/15(土) 03:44:17安心した
やり方を教えてちょ
0349デフォルトの名無しさん
2010/05/15(土) 04:42:200350デフォルトの名無しさん
2010/05/15(土) 06:11:15use strict; use warnings; print "is\nthis\nunko?\n";
use strict; use warnings; print << "END_OF_UNKO";
this
is
unko!
END_OF_UNKO
use strict; use warnings; use HTML::Template;
my $what_is_this = join "", <DATA>;
my $t = HTML::Template->new( scalarref => \$what_is_this );
$t->param('var', "was");
print $t->output;
__DATA__
this
<TMPL_VAR name="var">
unko!
0351デフォルトの名無しさん
2010/05/15(土) 06:50:15use IO::File;
my $fh = IO::File->new('hoge.txt', 'r');
while(my $line = $fh->getline){
print $line;
print "\n" if $line =~ /hoge/;
}
こんな漢字?
0352デフォルトの名無しさん
2010/05/15(土) 09:22:290353デフォルトの名無しさん
2010/05/15(土) 11:21:19一定時間が経過するまで再投稿できないようにしたいです。
0354デフォルトの名無しさん
2010/05/15(土) 11:59:340355デフォルトの名無しさん
2010/05/15(土) 12:24:13# 30秒経過してない場合returnする
return if $g_last_post + 30 > time;
$g_last_post = time;
0356デフォルトの名無しさん
2010/05/15(土) 14:35:57IPのログはとってんだろ?
そこから判定すりゃいい
samba24みたいな手にするって方法もあるな
ちょっと技術がいるかも知れないが
0357デフォルトの名無しさん
2010/05/15(土) 14:55:210358デフォルトの名無しさん
2010/05/15(土) 15:04:37自前でテーブル持つ方が軽い
0359デフォルトの名無しさん
2010/05/15(土) 15:21:540360デフォルトの名無しさん
2010/05/15(土) 15:55:010361デフォルトの名無しさん
2010/05/15(土) 15:58:24クライアントが書き込み後にクッキー捨てたらアウトだと思うんだがそうでもないのか
もうちょっと詳しく
0362デフォルトの名無しさん
2010/05/15(土) 16:01:51長いテキストがあり、100文字目ごとに改行を入れるということです。
分かりにくくて申し訳ありませんでした。
0363デフォルトの名無しさん
2010/05/15(土) 16:17:330364デフォルトの名無しさん
2010/05/15(土) 16:27:54Text::LineFold
>>353,354-359,361,363
板違い http://pc11.2ch.net/php/
0365デフォルトの名無しさん
2010/05/15(土) 16:29:03>>362
>>3
http://www.din.or.jp/~ohzaki/perl.htm#JP_Fold
http://search.cpan.org/search?m=all&q=fold&n=100
>>353
△▲ WebProg 初心者の質問 Part22 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1272872528/
0366デフォルトの名無しさん
2010/05/16(日) 21:25:10if(hoge){ funcAErr(); }
else
{
funcB();
if(fuga){ funcBErr(); }
else
{
funcC();
if(fuga){ resultA(); }
else{ resultB(); }
}
}
こんな感じで事前処理にこけたら弾き、を繰り返して最後の処理で結果Aか結果Bのいずれかを返す、
と言ったコードがあるんですが、これをもっとPerlらしくシンプルに書きたいんだがどう書けばいいだろう……。
(ifネストが実際には3階層ではなく20階層くらいあります)
0367デフォルトの名無しさん
2010/05/16(日) 21:43:55funcA() や funcB() の戻り値は無いのかとか、hoge や fuga が何を判定してるのかとか、
funcAErr() でなく funcErr('A') じゃダメなのかとか、エラー処理後に戻ってくる (if then else
で括る) 必要があるのかとか、Perlらしさ以前の問題だと思う。
0368デフォルトの名無しさん
2010/05/16(日) 21:45:08my @tasks = (
sub { () }, # <= funcA() とかが入る。
sub { () },
sub { () },
sub { () },
sub { () },
sub { () },
sub { 42 }
);
my $argument ;
for ( @tasks ){
my $flag = $_->( $argument ) ;
next if ! $flag ; # エラー処理やりたきゃ、ここを真面に。
print qq{${flag}hoge\n} ;
last ;
}
0369デフォルトの名無しさん
2010/05/16(日) 22:25:07エラー処理はfuncA()、funcB()の中で例外発生させて
全体をevalブロックでくくり、例外をキャッチして処理
エラー以外の分岐は適当に処理をブロックでくくり、last、redoなどでコントロール
eval {
funcA();
funcB();
{
funcC();
if (fuga) { resultA(); last }
resultB();
}
};
if ($err = $@) {
$err->A ? funcAErr() :
$err->B ? funcBErr() :
$err->C ? funcCErr() : Err();
}
0370デフォルトの名無しさん
2010/05/16(日) 22:49:10メール受信時に本プログラムにメールを渡すようにメールサーバは設定しています。
以下ソースの関係している部分です。
----mailimage.pl-----
my $parser = MIME::Parser->new;
#ファイルの一時保存場所を指定
$parser->output_dir('./tmp');
$filename='';
#標準入力からメールを取得
my $entity = $parser->parse(*STDIN);
#添付ファイルがある場合のみ処理
if($entity->is_multipart){
#パートの数(本文と添付ファイルの合計数)
$count = $entity->parts;
#メール本文以外(添付のみ)を取り出し(本文は0番目のため、一番目から取り出し)
for($i = 1; $i < $count; $i++){
#ファイル名を含むパスを取り出し
$path = $entity->parts($i)->bodyhandle->path;
#ファイル名を取り出し
$filename =time. (fileparse($path))[0];
$filenameglobal=$filename;
`./out1 $path outputimg/$filename.bmp`;
}
}
out1というプログラムが画像処理を行うファイルで、第一引数に入力を、第2引数に出力先をとるように作成しています。
mailimage.pl < sample.eml
といった具合に、ローカル環境でeメールファイルを渡してやった場合は正常に動作します。
しかし、実際にメールを受信するとtmpファイルへの保存は行われるのですがout1で得られるべき出力画像が得られません。
どうやら、tmpフォルダに保存される前にout1を呼び出しているようで、入力がない状態になってしまっているようです。
解決策のご提示をよろしくお願いいたします。
また、一度ファイルに保存することなく直接メモリ上で受け渡す方法などもご提示いただけると幸いです。
0371デフォルトの名無しさん
2010/05/17(月) 01:35:340372デフォルトの名無しさん
2010/05/17(月) 01:49:440373デフォルトの名無しさん
2010/05/17(月) 22:55:18*********いろいろ展開されて
Please download the file manually, save it to a directory in %PATH% (e.g.
C:\WINDOWS\COMMAND\), then launch the MS-DOS command line shell, "cd" to
that directory, and run "Nmake15.exe" from there; that will create the
'nmake.exe' file needed by this module.
You may then resume the installation process described in README.
-------------------------------------------------------------------------------
Warning: No success on command[C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site]
MIYAGAWA/XML-Atom-0.37.tar.gz
C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site -- NOT OK
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install
Failed during this command:
MIYAGAWA/XML-Atom-0.37.tar.gz : writemakefile NO 'C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site' ret
urned status 512
cpan>
と表示されてしまいました。とりあえず、nmake.exe はダウンロードしました。
これからどうすればいいでしょうか?
0374デフォルトの名無しさん
2010/05/18(火) 00:12:07今使ってるperlをアンインストールしてActivePerlの最新版をインストールし、PPMを使え
0375デフォルトの名無しさん
2010/05/18(火) 00:23:08ppmならokだけど
0376デフォルトの名無しさん
2010/05/18(火) 05:28:00特にXMLやHTMLのパーサー関連は入らん at Ubuntu
0377デフォルトの名無しさん
2010/05/18(火) 06:13:440378デフォルトの名無しさん
2010/05/18(火) 06:45:12だから俺は使ってない
あとこいつマルチだな
0379デフォルトの名無しさん
2010/05/18(火) 08:46:53XML::Atomもすんなり入ったよ
0380デフォルトの名無しさん
2010/05/18(火) 08:55:060381デフォルトの名無しさん
2010/05/18(火) 10:03:010382デフォルトの名無しさん
2010/05/18(火) 11:48:53リポジトリにこれ加えとけ。
http://trouchelle.com/ppm10/package.xml
0383デフォルトの名無しさん
2010/05/18(火) 12:20:100384デフォルトの名無しさん
2010/05/18(火) 13:26:56elifじゃないのと聞かれたら解答に窮するが、CPPはelifなんだよな
文化によって多少違いはあるが、やはり、母音が続くのが気持ち悪いんだと思う
0385デフォルトの名無しさん
2010/05/18(火) 13:55:38短いし。
0386デフォルトの名無しさん
2010/05/18(火) 15:33:01print "hello world";
と書いてhello.plで保存し、ターミナルで
perl hello.pl
と入力するのはわかったんですが、hello.plはどこに保存すればいいのですか?
環境はMac OS Xです
0387デフォルトの名無しさん
2010/05/18(火) 16:10:27好きな場所
0388デフォルトの名無しさん
2010/05/18(火) 16:28:15今自分がいる場所におけばいい
違う場所に置きたいならフルパスで指定すれば実行できる
0389デフォルトの名無しさん
2010/05/18(火) 16:41:23サンクス
つか、ppmguiにリポジトリのサジェストなんてあったんだな
そこにも載ってたわ
重ねてサンクス
0390デフォルトの名無しさん
2010/05/18(火) 17:56:24perlの前にターミナルの使い方を覚えるためのBash入門を読んだ方が良いかも。
0391デフォルトの名無しさん
2010/05/18(火) 18:42:400392373
2010/05/18(火) 21:37:27なにかヒントありますか?
>>374
>>375
>>379
ストロベリー入れましたけど、Activeパールと同じエラーです。
(nmake をダウンロードして、ダウンしたパッケージをmake して、
それから、再度ACTIVE Perl で,ATOM::XMLしたときとです。
やはり、パッケージが問題なのかな?
cpan> install ATOM::XML
Fetching with LWP:
http://cpan.strawberryperl.com/authors/01ma
Fetching with LWP:
http://cpan.strawberryperl.com/modules/02pa
Fetching with LWP:
http://cpan.strawberryperl.com/modules/03mo
Creating database file ...
Gathering information from index files ...
Populating database tables ...
Done!
Warning: Cannot install ATOM::XML, don't kn
Try the command
i /ATOM::XML/
to find objects with matching identifiers.
0393デフォルトの名無しさん
2010/05/18(火) 21:44:020394デフォルトの名無しさん
2010/05/18(火) 21:49:590395デフォルトの名無しさん
2010/05/18(火) 21:52:020396373
2010/05/18(火) 21:57:06install XML::Atom::Feed
とすると、したみたいになった。これってATOM::XML ってインストールできたのかな
Prepending C:\strawberry\cpan\build\XML-Atom-0.37-H4btN8/blib/arch C:\strawberry
\cpan\build\XML-Atom-0.37-H4btN8/blib/lib to PERL5LIB for 'install'
Installing C:\strawberry\perl\site\lib\XML\Atom.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Base.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Category.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Client.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Content.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Entry.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\ErrorHandler.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Feed.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Link.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Person.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Server.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Thing.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Util.pm
Appending installation info to C:\strawberry\perl\lib/perllocal.pod
MIYAGAWA/XML-Atom-0.37.tar.gz
C:\strawberry\c\bin\dmake.EXE install UNINST=1 -- OK
cpan>
0397デフォルトの名無しさん
2010/05/18(火) 22:13:16ローカルでemlファイル読み込ませるといけるのに、メール受信をトリガに起動するとだめだ・・。
どうして?
0398デフォルトの名無しさん
2010/05/18(火) 22:32:58OKってかいてありますやん
心配なら
$ perldoc XML::Atom
0399デフォルトの名無しさん
2010/05/18(火) 22:34:23XML::Atom と ATOM::XML は全く別のモジュールだ。
(存在すればの話しだが)
お前さんが、いくら XML::Atom を入れたとしても、
ATOM::XML は永久に入らん。
気持悪いったらありゃしない。
0400デフォルトの名無しさん
2010/05/19(水) 12:22:560401デフォルトの名無しさん
2010/05/19(水) 14:46:330402デフォルトの名無しさん
2010/05/19(水) 18:51:090403デフォルトの名無しさん
2010/05/21(金) 21:53:00クソ時間がかかるため、マルチスレッドでやらせようとPerlについて勉強しています。
で、いまんとこ、セマフォで並列処理数を制御し、joinするためだけのスレッドを動かして
かたっぱしからjoinするようにしています。おかげで処理時間は半分以下になったのですが、
これを添削していただけないでしょうか。もっとエレガントなやり方があれば教えていただきたいです。
よろしくおねがいします。
#!/usr/bin/perl
use strict;
use File::Basename;
use File::Path;
use threads;
use threads::shared;
use Thread::Semaphore;
use Codemap;
use SVG;
my $concurrency = 5;
my $semaphore = Thread::Semaphore->new($concurrency);
my $exitflag :shared = 0;
my $jointhreads = threads->new(\&joinThreads);
while (@ARGV) {
my $orig_svg = shift(@ARGV);
$semaphore->down;
threads->new(\&doSplit, $semaphore, $orig_svg);
}
$exitflag = 1;
$jointhreads->join;
exit 0;
0404403のつづき
2010/05/21(金) 21:53:56sub joinThreads {
until ($exitflag) {
foreach my $thr (threads->list) {
if ($thr->tid and !threads::equal($thr, threads->self)) {
$thr->join;
}
}
print "\nThreads joined.\n";
}
}
sub doSplit {
my $semaphore = shift;
my $orig_svg = shift;
my $svg = new SVG($orig_svg);
$svg->setdumpdir("work.d");
if ($svg->modtime() > $svg->splittime()) {
$svg->dump();
print STDERR " $svg->{filename} : splitted\n"
} else {
print STDERR " $svg->{filename} : SKIP\n"
}
$semaphore->up;
}
0405デフォルトの名無しさん
2010/05/22(土) 14:07:11解決策があれば教えていただきたいです。
環境はWindows 7 64bitとActivePerl v5.10.1 64bitです。
use utf8;
binmode STDOUT, ":encoding(cp932)";
print "昨日は10時〜6時まで寝た。\n";
D:\>test.pl
"\x{301c}" does not map to cp932 at D:\test.pl line 3.
昨日は10時\x{301c}6時まで寝た。
0406デフォルトの名無しさん
2010/05/22(土) 14:20:39何故こんなところで作業しているのか
0407デフォルトの名無しさん
2010/05/22(土) 14:54:09FULLWIDTH TILDE (FF5E)
WAVE DASH (301C)
の二種類がある。
0408デフォルトの名無しさん
2010/05/22(土) 14:57:400409デフォルトの名無しさん
2010/05/22(土) 16:10:320410デフォルトの名無しさん
2010/05/22(土) 16:13:53普段から〜が厄介になる
0411デフォルトの名無しさん
2010/05/22(土) 16:15:49俺は生粋のマカーだけど、厄介さが全然分からん。
何かトラブるっけ? "〜"って。
Mac<=>Winのデータ交換とかの話し?
0412デフォルトの名無しさん
2010/05/22(土) 16:21:41Winだと逆向きの波線に見えたり
最近は大丈夫な気はするが
0413デフォルトの名無しさん
2010/05/22(土) 16:31:53昔から機種依存文字問題とか、今はUTF8-macとUTF-8とか
もっと厄介なモンがあるから。
0414デフォルトの名無しさん
2010/05/22(土) 16:54:160415405
2010/05/22(土) 17:06:03>>405はmeadowから打ち込んだ〜は\x{301c}となり、
notepad等から打ち込んだ〜は\x{ff5e}になる事が原因で表示に失敗していました。
\x{301c}はshift_jisでは表示に成功しcp932では失敗しました。
\x{ff5e}はcp932では表示に成功しshift_jisでは失敗しました。
どうやらeucとsjisの〜はutf8の\x{301c}に対応していて
cp932の〜はutf8の\x{ff5e}に対応しているようでした。
なので例えばeucの〜をutf8に変換し、それをcp932に変換すると失敗するようです。
挙動がおかしいと思った元のプログラムではネット上にあるeucのページを取ってきて
utf8に変換し出力時にcp932に変換していたので上記の理由で文字化けしていた様です。
そこでeucをutf8に変換した際に\x{301c}を\x{ff5e}に変換するようにしました。
$utf8data =~ tr/\x{301c}/\x{ff5e}/;
そうしたところprintした際に"\x{301c}" does not map to cp932というエラーも出ず、無事〜が表示されるようになりました。
0416デフォルトの名無しさん
2010/05/22(土) 17:10:300417デフォルトの名無しさん
2010/05/22(土) 19:23:59use utf8は「フツーは使うな」とCPANに書いてあった気がする。
Windowsを呪いながらEncode使え。
#!perl
use Encode;
my $msg = "昨日は10時〜6時まで寝た。\n";
Encode::from_to($msg, 'utf8', 'cp932');
print $msg;
0418デフォルトの名無しさん
2010/05/22(土) 19:39:43理由は?
0419デフォルトの名無しさん
2010/05/22(土) 20:34:20>use utf8は「フツーは使うな」とCPANに書いてあった気がする。
どこに書いてあったの?聞いたことない
0420デフォルトの名無しさん
2010/05/22(土) 21:01:51もしかしてこれの事か?
0421デフォルトの名無しさん
2010/05/22(土) 21:08:00そのEncodeの作者が
>スクリプトはUTF-8で書き、use utf8;するのがモダンPerlのあり方です。
って言ってるけどな。
ttp://blog.livedoor.jp/dankogai/archives/51221731.html
0422デフォルトの名無しさん
2010/05/22(土) 22:19:22$a="aho";
$b="baka";
$str="ahomanukebaka";
$strには$aと$bで"manuke"という文字が挟まれています。
このとき$strからmanukeだけを切り抜くにはどうすればよいでしょうか?
0423デフォルトの名無しさん
2010/05/22(土) 22:24:540424デフォルトの名無しさん
2010/05/22(土) 22:48:06my $a1 = "aho";
my $b1 = "baka";
my $str = "ahomanukebaka";
$str =~ s/$a1(.*)$b1/$a1$b1/;
warn $str; # ahobaka
warn $1; # manuke
0425デフォルトの名無しさん
2010/05/22(土) 23:01:540426デフォルトの名無しさん
2010/05/22(土) 23:16:31あぁ、ごめん。本当はifとかやるけどmanukeが必要なのかどうなのかわからなくて
とりあえず$1に入ってるよって言いたかった
0427デフォルトの名無しさん
2010/05/22(土) 23:22:02できましたありがとうございます!
0428417
2010/05/23(日) 01:13:47それだ。
WWW::Mechanizeでcp932受け付けんからEncode::decode_utf8($massage)とかやってたのに、
use utf8だけで済んだのか・・・・クソアホみたいだわorz
0429デフォルトの名無しさん
2010/05/23(日) 13:00:16繰り返し表れる対象をグループ化したいのですが良いやり方ありますか?
gオプション付けたら行けるかと思ったらダメだった。
my $str = << 'END';
aba
aca
ada
END
$str =~ m{(a[^a]a)\n\n}g; # これだと初めの対象にしかマッチしない
0430デフォルトの名無しさん
2010/05/23(日) 13:23:18g(global?)オプションだけでなく
m(multi line?)オプションもいるんじゃなかったっけ
0431デフォルトの名無しさん
2010/05/23(日) 13:27:20こう?
my @matches = $str =~ m{(a[^a]a)\n\n}g;
0432デフォルトの名無しさん
2010/05/23(日) 13:32:54$str =~ m{(a[^a]a)\n\n}mg;
これも試したけどダメだったんだよね
>>431
おぉ。いけました。
ちなみに=と=~を一緒に書くとわかりにくいので別にする方法ってありますか?
普通のマッチの場合、下みたいに分けたりしてるのだけどそういう方法があれば教えてください
warn $1 if $str =~ m{(a[^a]a)\n\n}g;
0433デフォルトの名無しさん
2010/05/23(日) 13:41:44ifをwhileに変えるだけ
warn $1 while $str =~ m{(a[^a]a)\n\n}g;
0434デフォルトの名無しさん
2010/05/23(日) 13:59:57正規表現に括弧がひとつしかないから、$2と$3は未定義。
ループを回すたびに$1の内容が変わる。
0435デフォルトの名無しさん
2010/05/23(日) 14:09:01push @matches, $1 while $str =~ m{(a[^a]a)\n\n}g;
0436デフォルトの名無しさん
2010/05/23(日) 14:25:050437429
2010/05/23(日) 14:34:43なるほど!ありがとうございます。while使うのかぁ。知らなかった。
perldoc perlreに書いてあるのかなぁって探してみたら書いてあった。勉強になりました。
@matches = ( 'foo' =~ m{ o? }xg );
or
print "match: <$&>\n" while 'foo' =~ m{ o? }xg;
せっかくなのでついでにもう一つ質問ですが、>>430みたいにm付けた場合もやり方がありますか?
0438デフォルトの名無しさん
2010/05/23(日) 14:59:38ないと思う
mは^と$の意味が変わるだけだった気がする
0439デフォルトの名無しさん
2010/05/23(日) 15:51:170440デフォルトの名無しさん
2010/05/23(日) 22:00:35情報1、情報2というのが存在して、情報1にヒットしたときは、情報1と情報2を出力、
情報1にヒットしないときは、無視というような判定をするにはどうすればよいのでしょうか?
0441デフォルトの名無しさん
2010/05/23(日) 22:09:09if (情報1にヒット) {
print 情報1;
print 情報2;
}
0442デフォルトの名無しさん
2010/05/23(日) 22:12:57データ文書の情報1と情報2が別々のところに記載されていてそれができないのです。
元データ文書を晒すので少々お待ちください。
0443デフォルトの名無しさん
2010/05/23(日) 22:24:180444デフォルトの名無しさん
2010/05/23(日) 22:32:12http://uploader.moe.hm/cgi-bin/upload.cgi?mode=dl&file=2067 パス:perl
内容として作家情報と執筆した作品の情報が記載されています。
このファイルでは3名しか載っていませんが、実ファイルは世界中の作家情報が載っているので、
数万単位で同じような情報が載っています。
この中から、SCHOOLの行にUOFTOKYOと書いてある作家の作品だけを抜き出して出力できるようにしたいです。
0445デフォルトの名無しさん
2010/05/23(日) 22:35:100446デフォルトの名無しさん
2010/05/23(日) 22:53:34schoolがuoftokyoの作家の名前を抜き出し、
その名前から違う場所にあるデータを抜き出して出力したいってこと?
大して>>441とやること変わらない気がするな
if (情報1にヒット) {
作家名から情報2を取得;
print 情報1;
print 情報2;
}
こうなるだけじゃない?
0447デフォルトの名無しさん
2010/05/23(日) 22:57:06仰る通りです。
コードを書いているのですが、情報1にヒットした後、
情報2を書き出してやると、UOFTOKYO以外の作家作品情報も出力されてしまい、
どうしていいのか分からない状態です。
0448デフォルトの名無しさん
2010/05/23(日) 23:13:39情報2のデータの取得方法がおかしいんじゃいの?
そっちはどういうデータなの?
0449デフォルトの名無しさん
2010/05/23(日) 23:14:43情報2はWORKSとENDの間の情報です。
0450デフォルトの名無しさん
2010/05/23(日) 23:33:20http://uploader.moe.hm/cgi-bin/upload.cgi?mode=dl&file=2085 パス:perl
0451デフォルトの名無しさん
2010/05/23(日) 23:41:07$line = $_;
なんだこれ
0452デフォルトの名無しさん
2010/05/23(日) 23:48:020453デフォルトの名無しさん
2010/05/24(月) 00:19:550454デフォルトの名無しさん
2010/05/24(月) 00:22:31こんな感じかな。ネストがちょっと気持ち悪くてどうにかしたいけど
http://codepad.org/I7NaSAPC
>>450にソース上がってたのね。見てなかったわ
0455デフォルトの名無しさん
2010/05/24(月) 00:37:05人の書いたコードは難しくて読めないことが多い俺にはちょうど良い読み易さだった
0456デフォルトの名無しさん
2010/05/24(月) 00:53:43while(<>){
$name = $_ if /^NAME/ ;
next if ! ( /UOFTOKYO/ .. /^ID/ || eof );
print $name and undef $name if defined $name ;
next if !(/^WORKS/ .. /^END/ ) ;
print ;
}
細かい所は知らん。
0457デフォルトの名無しさん
2010/05/24(月) 00:57:51◯ /UOFTOKYO/ .. /^END/
0458デフォルトの名無しさん
2010/05/24(月) 01:01:27おぉ。..ってそういう時も使えるのか。フラグ要らなかったな
0459デフォルトの名無しさん
2010/05/24(月) 02:00:3330分位調べてようやく意味が理解出来た。
参考にした物
ttp://ja.wikibooks.org/wiki/Perl/%E6%BC%94%E7%AE%97%E5%AD%90#.E7.AF.84.E5.9B.B2.E6.BC.94.E7.AE.97.E5.AD.90
ttp://books.google.co.jp/books?id=BpdX333gbjkC&lpg=PR4&dq=oreilly%20%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%80%80perl&as_brr=3&pg=PA120#v=onepage&q&f=false
0460デフォルトの名無しさん
2010/05/24(月) 07:33:10個々の意味はわかるけどこうしとくといい理由とかあるんだろうか??
0461デフォルトの名無しさん
2010/05/24(月) 07:38:13Perlベストプラクティスに書いてあった癖で書いちゃう
普通は気にしなくていいと思う
0462デフォルトの名無しさん
2010/05/24(月) 10:06:39気になるのでどういう理由でそう書いてあったか憶えてたら教えてください。
本屋に行くにせよ尼かなんかでポチるにせよ週末になっちゃうので待てないw
0463デフォルトの名無しさん
2010/05/24(月) 17:45:34ttp://books.google.co.jp/books?id=0dRPNtVvoqUC&printsec=frontcover&dq=perl+best+practice&as_brr=3&cd=2#v=onepage&q=正規表現&f=false
で、255ページから読め
0464デフォルトの名無しさん
2010/05/24(月) 17:47:37ttp://books.google.co.jp/books?id=0dRPNtVvoqUC&printsec=frontcover&dq=perl+best+practice&as_brr=3&cd=2#v=onepage&q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE&f=false
0465デフォルトの名無しさん
2010/05/24(月) 19:06:38売上が下がるかもしれないのにオライリージャパンは許容してるの?
0466デフォルトの名無しさん
2010/05/24(月) 19:11:40アメリカでは既に訴えられて裁判になり和解まで行ってるようだけど日本は分からん。
訴えられるまでやりますって感じかもね。
本は実際に手にとって読みたい人がいるからこれは良い宣伝になり売上が伸びる。
ってのもあるだろうけど、これだけで済ます人も多そうだ。
0467デフォルトの名無しさん
2010/05/24(月) 19:15:030468デフォルトの名無しさん
2010/05/24(月) 19:15:180469デフォルトの名無しさん
2010/05/24(月) 22:51:55見るのはgoogleより米amaの方が多いけど。
0470デフォルトの名無しさん
2010/05/24(月) 23:12:24こんなのが只で読めるとは
0471デフォルトの名無しさん
2010/05/24(月) 23:34:58コメントが行区切りの役果たしてるんだから空白行いらんだろ、かえって関数が盾に間延びする
よく考えたらほとんどの環境でPerlの場合コメント着色されないんだっけ・・・区切りの機能果たさないなw
0472デフォルトの名無しさん
2010/05/24(月) 23:51:080473デフォルトの名無しさん
2010/05/25(火) 00:52:16たまにどころか途中から全部仏陀義理じゃねーかw
0474デフォルトの名無しさん
2010/05/25(火) 23:02:04まだ頭の方だからたまに飛ぶくらいでかなり役立ってる
0475デフォルトの名無しさん
2010/05/26(水) 13:48:27具体的には
・ActiveDirectoryの操作(Net::LDAP)
・FTPs
・WWW::Mechanize
・DBI
・Net::DNS
・GD
・関数のpack
このくらいはせめて欲しいのですが・・・
0476デフォルトの名無しさん
2010/05/26(水) 14:06:24相当するようなものはあるので好きなの使えばいいとおもうけど、そんなのは
それぞれのスレに行って聞けよ。でもわざわざ他の言語使わんでもperlでいい
んじゃね?
0477475
2010/05/26(水) 14:27:29ありがとう。
Perlしか分からないので、Perlで書いたものを他に移植することで
勉強はじめようかと思いまして。
とりあえずスクリプト言語はPerlを嫁にして、
C/C++、Javaあたり覗いてきます。
0478デフォルトの名無しさん
2010/05/26(水) 17:00:41にあるような感じで縦書きテキストビューワーを作っています。
引き数として与えられるファイルが、
テキストファイルなのかバイナリファイルなのか判定したいのですが、
-T でのテキストファイル判定はその判定方法から
UTF-8以外の日本語文字コードでは上手く機能しないらしくて困ってしまいました。
テキストファイルかバイナリファイルかを判定する良い方法は無いでしょうか?
0479デフォルトの名無しさん
2010/05/26(水) 19:28:28エラーにならなきゃOKとか?
0480デフォルトの名無しさん
2010/05/26(水) 19:29:25そもそも -T の精度も疑わしいし、ましてやWindows環境だとマジックナンバー照合による判定は無理なんでは?
判定精度を上げたいなら
use Encode::Guess qw/euc-jp shiftjis iso-2022-jp/;
↓
use Encode::Guess qw/euc-jp shiftjis iso-2022-jp cp932/;
0481デフォルトの名無しさん
2010/05/26(水) 20:21:460482デフォルトの名無しさん
2010/05/26(水) 21:11:04テキストビューワなら、常にテキストと仮定しちゃえばいいんじゃないの?
0483デフォルトの名無しさん
2010/05/26(水) 21:55:51まあ普通はそうだよなぁ
判定するようなエディタは少ない
0484478
2010/05/26(水) 23:48:34レスありがとうございます。
guess しに行く前にどうにか判定出来ないかと
都合の良い事を考えていたのですけども、
>>482さんや>>483さんの仰るように常に対象はテキストファイルだと仮定して、
>>480さんのご指摘の通り現行コードのままにする事にしましす。
>>480
cp932 の事をうっかり忘れていました。
寧ろ shiftjis より cp932 の方が重要なのに…。
ご指摘ありがとうございます。
0485デフォルトの名無しさん
2010/05/27(木) 09:17:39Encode::Guess->guessがエラー返すと思うのだが。
おおざっぱにいうとEncode::Guessの判定アルゴリズムは
1行ずつ候補のencodingでdecodeしていって、候補が1つになったら
それを返す。候補がなくなったり複数残ったらエラー(ただしasciiが
最終候補に含まれていたらascii)
だからね。
0486478
2010/05/27(木) 09:36:54その通りなのです。
事実上、shiftjis よりも cp932 のテキストファイルを扱う方が圧倒的に多いと思って、
より現実に即して、判別候補の shiftjis を cp932 に変更しました。
0487デフォルトの名無しさん
2010/05/27(木) 09:49:56どうしたいかの方が重要なきがする。
0488デフォルトの名無しさん
2010/05/27(木) 12:31:50unicodeに縦書き用のものがマッピングされてない約物({}…〜など)は
回転するしかなくて、そのなかでも波ダッシュは鬼門だったな。
ちなみに《》()「」『』【】〔〕の約物については縦書き用の文字が用意されてる。
0489デフォルトの名無しさん
2010/05/27(木) 14:39:560490デフォルトの名無しさん
2010/05/27(木) 19:23:420491デフォルトの名無しさん
2010/05/28(金) 10:03:55いやそれはおかしい。
0492デフォルトの名無しさん
2010/05/28(金) 19:01:24cp932の〜をutf-8に変換するとFULLWIDTH TILDE (FF5E)になるみたいだね。
0493デフォルトの名無しさん
2010/05/31(月) 16:35:35たぶん初めてのPerlという良書のおかげです。
C言語とかJavaとかPythonとか色々学ぼうとして挫折を繰り返していました。
いきなりですが、質問があります。お教えください。
#!/usr/bin/perl
print "Please enter a number \n";
chop($number=<STDIN>);
while($number=~/|\D/){print "Please enter only a number! \n";chop($number=<STDIN>);}
以下数字が入力された場合に続く。
上記のように、何も入力されなかった(改行のみ)り、数字以外が入力されたときに
エラーメッセージを出す方法を教えてください。
上記ではおそらくwhile($number=~/|\D/)の正規表現が間違っていると思います。
また、上記目的を叶えるためのエレガントな方法があればお教えください。
0494デフォルトの名無しさん
2010/05/31(月) 17:09:38かねえ
#!/usr/bin/perl
print "Please enter a number \n";
while(1){
chop($number=<STDIN>);
last if $number=~/^\d+$/;
print STDERR "Please enter only a number! \n";
}
とか…?
0495デフォルトの名無しさん
2010/05/31(月) 17:42:19繰り返しループ処理のやりかたがわからないワケだな。
プログラミングの基礎が備わってないな。perl以前の問題。
フローチャートから勉強しなおしなさい。
0496デフォルトの名無しさん
2010/05/31(月) 19:29:570497デフォルトの名無しさん
2010/05/31(月) 19:34:200498デフォルトの名無しさん
2010/05/31(月) 20:08:51ありがとうございます!
上手く動きました!!
空文字列のみを見つける正規表現があるのかと考えていましたが、
数字以外はダメという表記で良かったんですね。
ネットで探しても空文字列のみを見つける方法がよくわからなかったので悩んでいました。
>>497
自信を持って分かりますとは言えませんが、
サブルーチンなどで、プログラムの部品(パッケージ化とかカプセル化というのでしょうか)を
作って、プログラムを汎用性が高く、分かりやすく作ることかと理解しています。
初めてのPerlには、変数の扱いがCとは異なり、グローバル変数として扱われてしまう
と書かれていたので、Perlはオブジェクト指向としては、少し扱いにくい言語ということ
なんでしょうか?
0499デフォルトの名無しさん
2010/05/31(月) 20:18:17Perlはオブジェクト指向もサポートしている。
変数については、myを使えばローカルな変数になる。
my $hensu;
0500デフォルトの名無しさん
2010/05/31(月) 20:18:1720点くらいだな、その理解は
0501デフォルトの名無しさん
2010/05/31(月) 20:47:35こういうのが癌
0502デフォルトの名無しさん
2010/05/31(月) 21:07:18「死刑には抑止力がある」
「何か言われて不快になったらその原因は発言者にある」
これまで当たり前だと思って、深く考えなかったこと・・・
周りに言われるままに、何の疑問も抱かなかったこと・・・
それらが本当に正しいのか、ちょっと立ち止まって考えてみませんか
虐めに関するよくある勘違い
http://jbbs.livedoor.jp/bbs/read.cgi/game/46573/1273655633/1-7
死刑制度に関するよくある勘違い
http://jbbs.livedoor.jp/bbs/read.cgi/game/46573/1273498488/1-7
外界は内界を映し出す鏡だって言ってたよ裏庭の鶏も
http://academy6.2ch.net/test/read.cgi/philo/1273156931/1-3
0503デフォルトの名無しさん
2010/05/31(月) 21:27:52>空文字列のみを見つける正規表現
"\n"にもマッチしていいなら/^$/
0504デフォルトの名無しさん
2010/05/31(月) 21:43:52まさか 1995年刊行の Perl4時代のソフトバンク版じゃあるまいな?
0505デフォルトの名無しさん
2010/05/31(月) 23:25:06chompの頁に「古いperlではchop演算子が使われていることがあります。」ってちょろっと書かれてるくらい。
0506デフォルトの名無しさん
2010/05/31(月) 23:45:07ラクダ本第三版の索引にはchopは普通に載ってるし、それ以前にこんなの最新版Perlでちょろっと確認すれば済む話。
chopが何故か忌避されるのは、鋏の使い方を知らない馬鹿が多すぎたってことかな。
現在主流の馬鹿御用達言語PHPで、文字列末尾1文字を無条件に削除したい場合、使えねーsubstr()とか、preg_replace('/.$/u','',$hoge)とか使ってると、頭に蛆湧いてくるぜ。
0507デフォルトの名無しさん
2010/06/01(火) 00:08:25>>499
知りませんでした。
手元にあるPerl本は古本屋で買ったので
初めてのPerl 1995年6月16日 初版
Perlプログラミング1995年6月5日 第7版
でした。
>>500
後の80点はどの辺が足りないのかお教えください。
パッケージ化することで、グローバル変数が氾濫しプログラムが読みにくくなったり、
エラーが起きやすくなることを防ぐ。ということも(あっていれば)知っています。
>>503
正規表現面白いッス!
while($answer!~/^\d+$/)
while($answer=~/^$|\D/)
この二つはほぼ同じと考えて良いんでしょうね!
>>504
まさかの初版でした!!
これからもよろしくお願いしマース!
なにせ、読み始めたのが昨日からなんです。
0508デフォルトの名無しさん
2010/06/01(火) 00:09:28自分の勉強のために
汚いコードでスレ汚しになりますが、Chap2の私の回答も載せますね。
#!/usr/bin/perl
$pai=3.141592654;
while($pronum!=5){
print "Chose program # (1-4 or to quit 5).\n";
chop($pronum=<STDIN>);
if ($pronum==1){
$pro1result=12.5*2*$pai; print "The result is $pro1result \n";}
elsif($pronum==2){
print 'Enter the radius'."\n";
chop( $radius=<stdin>);$radius *= $pai *2;
print "The result is $radius\n";}
elsif($pronum==3){print 'Plese enter 2 variables'."\n";
$first=<stdin>; $second=<stdin>; $first *=$second;
print "The result is $first \n";}
elsif($pronum==4){print "Please enter num and character \n";
chop($num=<stdin>);chop($char=<stdin>);$char=$char x $num;
print "The result is $char \n";}
elsif($pronum==5){print "Thank you for playing! \n";}
else{ print "Try again!\n";}
}
0509デフォルトの名無しさん
2010/06/01(火) 00:15:04どうしても「初めてのPerl」を参考にして勉強したいというなら、
悪い事は言わないから第5版にした方が良い。
今、Perl4時代の本で勉強しても百害あって一利無しだと思うぞ?
いくらなんでも時代遅れ過ぎる。
>>507 が使ってる Perl まで Perl4 というわでもあるまいに。
0510デフォルトの名無しさん
2010/06/01(火) 00:22:420511507
2010/06/01(火) 06:24:42そうですか。うーん。
正規表現とか、考え方とかはそんなに変わらないかと思ったんですが、
有害なんですね。
できれば、オンラインで学習できるのが一番なんですが、まとまったサイトってありますか?
>>510
ありがとうございます。
でも読むコマンドがわかりませんでした。
私は、Macなので、ターミナルを起動して
>perldoc perlintroとコマンドを入力してみましたが、
perlintroというドキュメントはないというようなエラーが出ました。
No documentation found for "perlintro".
0512デフォルトの名無しさん
2010/06/01(火) 07:15:01http://perldoc.perl.org/index-overview.html
http://www.perldoc.jp/docs/perl/
>>2
0513デフォルトの名無しさん
2010/06/01(火) 08:34:09サンプルコードによるPerl入門
http://d.hatena.ne.jp/perlcodesample/
日本の Perl ユーザのためのハブサイト
http://perl-users.jp/
0514デフォルトの名無しさん
2010/06/01(火) 14:55:03http://qb5.2ch.net/test/read.cgi/sakud/1268731363/209 2010/04/13 22:40:00 HOST:softbank221101001151.bbtec.net
http://qb5.2ch.net/test/read.cgi/sakukb/1267978152/196 2010/04/16 23:34:20 ID:GYnmPEAj0
http://qb5.2ch.net/test/read.cgi/sec2chd/1274948647/904 2010/05/30 16:54:09 ID:NuvDjPvV0
http://schiphol.2ch.net/test/read.cgi/stadium/1252943434/687 2010/04/01 22:00:01 ID:mB5AiSFL
http://schiphol.2ch.net/test/read.cgi/tennis/1269837495/27 2010/04/01 22:01:15 ID:+EaxE3Yd
http://schiphol.2ch.net/test/read.cgi/sports/1269560639/78 2010/04/13 22:44:20 ID:bew0Nrvf
http://schiphol.2ch.net/test/read.cgi/sports/1268430764/294 2010/04/14 09:35:45 ID:hjGULPLG
http://schiphol.2ch.net/test/read.cgi/war/1270527178/319 2010/04/14 18:23:30 ID:+lNQ2DXA
http://schiphol.2ch.net/test/read.cgi/kyozin/1270206821/91 2010/04/14 18:29:06 ID:3CDN5Ccw0
http://schiphol.2ch.net/test/read.cgi/wres/1270861626/47 2010/04/14 18:30:38 ID:9IsRU2FN0
http://schiphol.2ch.net/test/read.cgi/ski/1268925479/573 2010/04/16 23:39:04
http://schiphol.2ch.net/test/read.cgi/goveract/1259841553/510 2010/04/18 17:31:32 ID:pk5WfpDm
http://schiphol.2ch.net/test/read.cgi/gutter/1264177302/517 2010/04/18 17:34:51 ID:34DVdrjm
http://schiphol.2ch.net/test/read.cgi/stadium/1251865219/707 2010/05/10 22:44:12 ID:hX93YGf3
http://schiphol.2ch.net/test/read.cgi/cancer/1268747646/273 2010/05/10 22:46:25 ID:nHvjUfwZ
http://schiphol.2ch.net/test/read.cgi/sports/1260967753/636 2010/05/11 18:17:35 ID:yYc33zVj
http://schiphol.2ch.net/test/read.cgi/war/1271752424/342 2010/05/16 18:50:43 ID:6cddBk0z
http://schiphol.2ch.net/test/read.cgi/war/1243407044/217 2010/05/30 16:50:31 ID:2FL8NGA8
http://schiphol.2ch.net/test/read.cgi/equestrian/1231931323/760 2010/05/31 21:06:11 ID:34qn98Gz
0515507
2010/06/01(火) 22:30:15>>513
丁寧にありがとうございます。
無事Perlintroを読み終えることができました。
まだデータ形式のハッシュはよく理解していませんが、少しずつ理解しようと思います。
サンプルコードによる・・には、新しい版用のコードの書き方の解説もあったので、
今持っている初めてのPerl本と見比べながら学びたいと思います。
ありがとうございました!
0516デフォルトの名無しさん
2010/06/03(木) 16:42:25回避する方法はありますか?
0517デフォルトの名無しさん
2010/06/03(木) 16:55:320518デフォルトの名無しさん
2010/06/03(木) 18:23:10次はどうすればいいですか?
0519デフォルトの名無しさん
2010/06/03(木) 18:50:55口に鉛筆を咥える。
0520デフォルトの名無しさん
2010/06/03(木) 19:02:340521デフォルトの名無しさん
2010/06/08(火) 11:05:28正しく変換するにはどのようにすればよいのでしょうか。
#!/usr/bin/perl
use Jcode;
my $utf = "1〜5";
my $sjis = jcode($utf)->sjis;
my $euc = jcode($utf)->euc;
print jcode($sjis)->utf8 . "/" . $utf . "/" . jcode($euc)->utf8;
0522デフォルトの名無しさん
2010/06/08(火) 11:28:59すみません。自己解決しました。
use Jcode; を use Jcode::CP932; に変えるだけでした。
0523デフォルトの名無しさん
2010/06/08(火) 11:35:22統一に失敗したので面倒なことになってます。ほんと迷惑。
0524デフォルトの名無しさん
2010/06/09(水) 11:02:37その回のリクエストが終わっても残り続けるグローバルな変数って
ありますか?
メモリ上に残り続けるフラグを持ってリクエストのたびに処理を分岐したいです。
0525デフォルトの名無しさん
2010/06/09(水) 11:13:11ファイルか、DBに残せばよいのでは?
0526デフォルトの名無しさん
2010/06/09(水) 11:40:52ファイルはなるべく避けたいです。
フラグ一つのためにDB構築するのもなんか微妙なので。
0527デフォルトの名無しさん
2010/06/09(水) 11:51:050528デフォルトの名無しさん
2010/06/09(水) 11:53:33printf "%.2f\n", 90.1740;
printf "%.2f\n", 90.1750;
printf "%.2f\n", 90.1760;
printf "%.2f\n", 90.1770;
printf "%.2f\n", 90.1630;
printf "%.2f\n", 90.1640;
printf "%.2f\n", 90.1650;
printf "%.2f\n", 90.1660;
printf "%.2f\n", 90.1670;
この処理ですが、上の段は、5捨6入しているのですが、
下の段は4捨5入の処理をしています。
90.17
90.17
90.17
90.18
90.18
90.16
90.16
90.17
90.17
90.17
いろいろと試したのですが、printfがどういったルールで
丸めの処理をしているのかまったくわかりませんでした。
ググッてもこの処理の違いに関する説明もでてきません。
この処理の違いがわかる人はいませんか?
0529デフォルトの名無しさん
2010/06/09(水) 12:08:50内部は2進数なので、2進数だと無限小数になっちゃう
数は有限桁数で表すと誤差が出るんだよな。
もう少し先の桁まで出すと
% perl -e 'printf "%.20f\n", 90.1750;'
90.17499999999999715783
なので四捨五入だと切り捨ての方になっちゃうんだよね。
0530デフォルトの名無しさん
2010/06/09(水) 12:09:59なら、WebPage側にhidden項目でも作って、そこに保存しておくとか・・・
0531デフォルトの名無しさん
2010/06/09(水) 12:22:410532デフォルトの名無しさん
2010/06/09(水) 13:35:48?
0533デフォルトの名無しさん
2010/06/09(水) 16:10:35グローバル変数で変数を持たせるとセッションが続く限り、内部データは引き継がれる。
これはspeedycgiでも同じ。
普通は変数が引き継がれると困るので、局所変数で宣言するが、普通のcgiだと、cgiが
実行されるごとに、グローバル変数はリセットされるため、局所でもグローバルでもあま
りあまり関係ない。そのため後からuse strict;で変数管理をしようとしてもエラーだらけで、
直しようがなくなる。
0534デフォルトの名無しさん
2010/06/09(水) 22:41:240535デフォルトの名無しさん
2010/06/10(木) 00:15:55まさかstrictにrefs入れてないよね?
0536デフォルトの名無しさん
2010/06/10(木) 02:01:07しておいて必要なところだけブロック切って
no strict 'refs';
だろjk
0537デフォルトの名無しさん
2010/06/10(木) 12:14:48obsoleteなブツなんでないの?
同等以上の新しいモジュールがあるだろ。
0538デフォルトの名無しさん
2010/06/10(木) 17:21:59abc001.jpg
abc002.jpg
という2行の文字列を
<Vol.001>abc001.jpg
<Vol.002>abc002.jpg
と書き換えてoutput.txtに書き出すPerlスクリプトを書きたいと思っています。
しかし、test.txt内の文字列が1行の場合には上手くいきますが、
例のような複数行では
<Vol.001>abc001.jpg
abc002.jpg
となってしまいます。
どこが間違っているのでしょうか?
#!/usr/bin/perl
use strict;
use warnings;
$a="test.txt";
$b="output.txt";
open my $in , '<', $a or die "Cannot open '$a': $!";
open my $out, '>', $b or die "Cannot open '$b': $!";
while(<$in>){
s/abc(.+?)\.jpg/<Vol\.$1>abc$1\.jpg/;
print $out $_;
};
close($in);
close($out);
0539デフォルトの名無しさん
2010/06/10(木) 17:55:00あと関係ないけど、せっかくuse strictしてるんだから$a , $b はつかうな
0540デフォルトの名無しさん
2010/06/10(木) 20:11:20my @x=(1,2,3,4,5,6,7,8);
my $y=100;
my @pi =(@x/$y);
この様に@で配列を制限し
my @piの中身を1/100,2/100,3/100,4/100,・・・
として以下の計算につなげたいのですが、
どうしても上手くいきません・・・
foreach文なども試してみましたがダメでした
非常に低レベルの質問ですがどうかご教授よろしくお願いします
0541デフォルトの名無しさん
2010/06/10(木) 20:19:29my $y=100;
my @pi;
foreach my $tmp (@x){
push(@pi, $tmp/$y);
}
foreach my $tmp (@pi){
print "$tmp, ";
}
0542デフォルトの名無しさん
2010/06/10(木) 21:06:34のようなレコードを持ったCSVファイルに対して,
keyA=AAAかつkeyB=BBBのレコードのValueの合計,平均,...etc
といった統計を計算する最もスマートな方法を教えてください.
レコード数は数十万〜数百万行を想定しています.
0543デフォルトの名無しさん
2010/06/10(木) 21:38:31ourで宣言すればおk。
でも保持できるのはプロセス単位だから共有メモリ使った方がいいと思う。storableとか
0544デフォルトの名無しさん
2010/06/10(木) 22:03:32http://perldoc.jp/docs/perl/5.12.1/perlfunc.pod#item_map_BLOCK_LIST_map
my @pi = map $_ / $y, @x;
0545デフォルトの名無しさん
2010/06/10(木) 22:19:50print "$_, " for (@pi);
0547デフォルトの名無しさん
2010/06/11(金) 00:01:18その数ならDBに突っ込んでSQLでやる
0548デフォルトの名無しさん
2010/06/11(金) 00:24:13いいと思うけど。
0549デフォルトの名無しさん
2010/06/11(金) 03:47:48コメントありがとうございます。
問題点は、入力用ファイルの改行コードでした。
改行コードをUnixではなくMacの改行コードにしていたので、
2行が1行と認識されてしまっていたようです。
ずっと正規表現の問題だと思っていたので、コメントのおかげで別の観点で見直すことができました。
素人なのでもう一つ質問させてください。
>$a , $b はつかうな
というのは、意味のない変数名を使うのではなく、
$infile,$outputfileなどのように一目で意味のわかる変数名を使いなさいということでしょうか?
0550デフォルトの名無しさん
2010/06/11(金) 03:51:22$aと$bはsortの時に使われる。つか、use strictしてるのにmyなしで動いてる時点で「あれ?」ってなったでしょ?
perldoc -f sort
> global variables $a and $b
0551507
2010/06/11(金) 06:33:39丁寧にありがとうございます。
色々調べてやっと仰っていることが理解できた気がします。
やはり、初めてのPerl初版本を読んでいた弊害がありそうです。
でもこのサンプルコードによるPerl入門は素晴らしいですね。
http://d.hatena.ne.jp/perlcodesample/20091120/1246679588
0552デフォルトの名無しさん
2010/06/15(火) 18:38:48そのログを読み込み解析し出力する analyst.plを作り、
普段はhoge.plを使いたまにanalyst.plを実行するという事をしてきました。
今回その解析済みログを利用するためにhoge.plの中でanalyst.plを実行させたくなったのですが
require('analyst.pl');としたところ"\x{00cd}" does not map to cp932 at analyst.pl line 12.
というエラーが大量に出ました。
これは両方のplファイルにuse utf8; binmode STDOUT ":encoding(cp932)";があり
analyst.plでutf8からcp932に変換されたものがhoge.plでさらにcp932に変換されているからのようで
analyst.pl内のbinmode〜;をコメントアウトするとうまく動くようになりました。
しかしanalyst.plの単独実行時にうまく動かなくなりました。
このような場合どうすれば両立させることができるのでしょうか?お知恵を貸して欲しいです。
This is perl, v5.10.1 built for MSWin32-x64-multi-thread
0553デフォルトの名無しさん
2010/06/15(火) 19:01:09ちょっと面倒だけど新たにAnalyst.pmを作成し、そこにanalyst.plの機能を全部放り込んだサブルーチンを作り、
hoge.plとanalyst.plはそれを読み込み実行すれば両立出来るよ。
hoge.plとanalyst.plの二つのファイルだけでは・・・できるのかな?
0554デフォルトの名無しさん
2010/06/15(火) 20:02:21そこまでするならモジュール化すればいいだろw
0555デフォルトの名無しさん
2010/06/15(火) 20:06:220556デフォルトの名無しさん
2010/06/15(火) 20:43:23requireする前にbinmode STDOUT=>":raw";
あるいはanalyst.pl内のbinmode文をbinmode STDOUT=>":raw:encoding(cp932)";
0557552
2010/06/15(火) 21:25:50requireする前に一行追加することで簡単に実現出来ました。
呼び出し前に:rawにして呼び出し先で:cp932に再セットされるという流れもなんだか良いです。
>>553-556
みなさんレスありがとうございました。
0558552
2010/06/15(火) 21:54:210559デフォルトの名無しさん
2010/06/16(水) 03:43:580560デフォルトの名無しさん
2010/06/16(水) 05:22:300561デフォルトの名無しさん
2010/06/16(水) 17:53:09単純に # より前を消すみたいのを自分で作ってたんですが、print '#'; とか、s#a#b#;
というのも考えられるなとか、ヒアドキュメント中の # はどうするとか、、、
私の脳みそでは確実に無理なので、なにかないでしょうか?
0562デフォルトの名無しさん
2010/06/16(水) 19:11:590563デフォルトの名無しさん
2010/06/16(水) 19:59:14hoge # not comment
}
と
m{
hoge # comment
}x
の区別とか想像しただけで嫌になるよなw
0564デフォルトの名無しさん
2010/06/16(水) 20:23:53perltidyとかは?
0565デフォルトの名無しさん
2010/06/16(水) 20:30:46print qq#\# match #, '#', "\n" if /"#a/ && m#[^\#]\##; # こめんと; { #" ですよ}
考えてみようとして例を作っただけでつらくなってきた
0566デフォルトの名無しさん
2010/06/16(水) 20:42:23できてないみたいだけど、他は結構いけるようだよ。
0567デフォルトの名無しさん
2010/06/16(水) 23:08:270568デフォルトの名無しさん
2010/06/17(木) 00:40:40Text::Balanced とかは?
0569デフォルトの名無しさん
2010/06/17(木) 03:22:58厳密にやろうと思えば何らかのPerlパーサを使わないと、正規表現でちょいちょいやるっていうのは無理だろうな。
0570561
2010/06/17(木) 10:33:00ありがとうございます。なかなか難しいんですね・・。
気づいたのですが、秀丸とか(ほぼ)ちゃんとコメント色分け出来てますよね。
やっぱり偉大なソフトですね・・。
0571デフォルトの名無しさん
2010/06/17(木) 11:57:22Regexp::Common::commentとか
0572デフォルトの名無しさん
2010/06/18(金) 00:40:030573デフォルトの名無しさん
2010/06/18(金) 05:17:34おまい、秀丸つかったこと無いだろ
0574デフォルトの名無しさん
2010/06/20(日) 13:23:250575デフォルトの名無しさん
2010/06/20(日) 17:43:06POSTでログインしても次の操作で
APサーバからセッションタイムアウトという
レスポンスが返ってきてしまいます。
(WEBサーバのエラーではないです)
VBのCOM MSXML.XMLHTTPRequest
だと、perlの $ua->request($req);
と同等のメソッド:open()のパラメータで非同期動作をfalseにすることに
より、今回の動作もきちんと動作します。
ttp://www.ki.rim.or.jp/~kuro/WebDAV/MSXML01.html
の一番最後の文章を参考にしてください。
LWP、HTTP::RequestでVBのCOMのような非同期動作を
キャンセルして同期的にどうさせる方法をご教示ください。
稼働OSがLinuxなので、Perlで行っています。
0576デフォルトの名無しさん
2010/06/20(日) 17:45:46use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
my $res;
my $req;
my %param;
my $ua = LWP::UserAgent->new();
%param = ('username' => 'user', 'password' => 'pass');
$req = POST('ログインURL(サーブレット)',[%param]);
$res = $ua->request($req); #<-ここで同期的に動作させたい。
(VBだとvarAsync=falseで可能)
%param = ();
%param = ('number' => '3' );
$req = POST('ログイン後のURL(サーブレット)',[%param]);
$res = $ua->request($req);
print $res->content
これがセッションタイムアウトとAPメッセージが返ってきてしまう
0577デフォルトの名無しさん
2010/06/20(日) 17:50:580578デフォルトの名無しさん
2010/06/20(日) 17:57:06ありがとうございます。
ttp://homepage3.nifty.com/hippo2000/perltips/LWP/UserAgent.html
このあたりとか調べているのですが、
同期/非同期オプションはないようです。
なんとか実現したいのですが、
perl使いの方はどのように回避しているのでしょうか?
0579デフォルトの名無しさん
2010/06/20(日) 18:52:54でもダメでした。
ちなみにVBでも
Dim dom As New MSXML.XMLHTTPRequest
dom.Open "POST", "ログインURL(サーブレット)", true <-非同期
にすると今回のperlと同じ現象が起きるので
このあたりだと思いますが・・・
0580デフォルトの名無しさん
2010/06/20(日) 19:23:47576のコードだと cookie を食わないから session cookie が届いてても
次の $req で全く使われないよ。
0581デフォルトの名無しさん
2010/06/20(日) 19:34:540582デフォルトの名無しさん
2010/06/20(日) 20:36:28ありがとうございました。
できました。
cookieでした、基本的なことだったんですね。
本当に助かりました。
VBのCOM(WEBブラウザ)では自動でやってくれていた
ことだったんですね。
%param = ('username' => 'user', 'password' => 'pass');
$req = POST('ログインURL(サーブレット)',[%param]);
$res = $ua->request($req);
my $cookie_jar = HTTP::Cookies->new( autosave => 1 );
$cookie_jar->extract_cookies( $res );
ua->cookie_jar( $cookie_jar );
以下・・・
0583デフォルトの名無しさん
2010/06/20(日) 21:48:51"\x11\x22\x33"という文字列後ろに0x4455という数値を追加して"\x11\x22\x33\x44\x55"という
文字列を作成したいのですがどのように記述すればいいでしょうか?
0584デフォルトの名無しさん
2010/06/20(日) 22:00:410585デフォルトの名無しさん
2010/06/20(日) 22:29:28use strict;
use utf8;
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
my $str="\\x11\\x22\\x33";
my $num=0x4455;
my $str2=sprintf("%X", $num);
if ($str2 =~ /^(..)(..)$/) {
$str="$str\\x$1\\x$2";
} else {
print "$str2 が指定の形式でない。";
}
print $str."\n";
0586デフォルトの名無しさん
2010/06/21(月) 11:32:34私的には読みやすいし誤解が無いと思うので組み込み関数を、
substr $s, 0, 1;
といった書き方よりも、
substr($s, 0, 1);
という風に括弧を付けた書き方をしたいのですが、こういう無駄な括弧は止めた方がいいのでしょうか?
------------
将来、複数人と一緒に開発することもあるかもしれないので、
どちらのほうが主流なのか、もしくはどちらのほうがより好ましいのか教えて頂けないでしょうか。
0587デフォルトの名無しさん
2010/06/21(月) 13:55:45それぞれ色んな流儀があるので一概には言えないが、
少し古い本ではあるけけども、
Perlプログラミング救命病棟
http://d.hatena.ne.jp/asin/4798109401
あたりは参考になるかもしれない。
0588デフォルトの名無しさん
2010/06/21(月) 13:57:54自分がやった勘違いの例
perl -e '$str = "12345"; print substr($str,2,4),"end";'
perl -e '$str = "12345"; print substr $str,2,4,"end";'
0589デフォルトの名無しさん
2010/06/21(月) 19:36:220590デフォルトの名無しさん
2010/06/21(月) 20:25:52xargsが渡してきたファイル群の何番目を処理中か知るにはどのようにすればいいでしょうか?
find . -regex '.*\.\(c\|cc\|h\)' -print0 | xargs -0 perl -ne 'if(/.*call_handler.*/g){print($ARGV[?????????], ": " ,$&, "\n")}'
0591デフォルトの名無しさん
2010/06/21(月) 21:15:41perl 使わずに grep じゃだめなのかな?
find . -regex '.*\.\(c\|cc\|h\)' -print0 | xargs -0 grep -H -n call_handler
./a.c:1:call_handler hogehoge
perl スレということで perl 使うというならちょっと考えてくる
0592デフォルトの名無しさん
2010/06/21(月) 22:34:010593591
2010/06/21(月) 23:47:58なるほど、$ARGV でとれるのか〜。
勉強になった。
# call_signal_handler になってて始めテストしたとき
# 引っかからなくってあれれってなってしまった^^;
0594586
2010/06/21(月) 23:59:46ありがとうございます。
でも、あんまり反応無いんですね。
ほとんどの現場で特に決まってないってことなんでしょうかね・・。
0595デフォルトの名無しさん
2010/06/22(火) 00:32:18hoge( 'foo', 'bar' ) # <= サブルーチン。
substr $str,2,4 # <= 内部関数。
PBPにあったか不明だが、上記を守ると必然的に、
内部関数の引数を明確に区切りたい場合は、
( substr $str,2,4 )
0596デフォルトの名無しさん
2010/06/22(火) 01:00:10ファイルはUT-8で作成しています。("��"は口ではなく目になっている奴です)
use Encode;
$string = decode('utf8', "あ");
printf "%s\n", encode('shiftjis', $string);
$string = decode('utf8', "��");
printf "%s\n", encode('shiftjis', $string);
0597デフォルトの名無しさん
2010/06/22(火) 01:10:57出力するターミナルはshiftjisなの?
0598デフォルトの名無しさん
2010/06/22(火) 02:50:47cp932にはあるけど
0599デフォルトの名無しさん
2010/06/22(火) 03:26:170600デフォルトの名無しさん
2010/06/22(火) 09:07:45それが例だとそういうときは
substr($str,2,4)
にしろってなってるんだよな。俺は595のように全体を
カッコでくくる方が統一的でいいと思うんだが。
0601デフォルトの名無しさん
2010/06/22(火) 09:17:110602デフォルトの名無しさん
2010/06/22(火) 10:00:37理不尽なクレームをつけてくる奴が「現場」にいたとしても
そいつが何を考えてるのかは誰にも分からない
0603デフォルトの名無しさん
2010/06/22(火) 11:01:450604デフォルトの名無しさん
2010/06/22(火) 12:12:280605デフォルトの名無しさん
2010/06/22(火) 13:08:340606586
2010/06/22(火) 13:17:58PBPって通称があるんですね。ページ数までありがとうございます。
該当のページには、組み込み関数には括弧を付けるなとありますね・・。
でも、私の感性がヘンなのかもしれませんが括弧は付けた方が見やすいかなと思いまして。
my $t = substr($str,2,4);
my $t = substr $str,2,4;
my $t = (substr $str,2,4);
でも、確かに3番目の書き方でも良い感じですね。見やすい。
最初に(をタイプするというのは打ちにくいかもしれないですけど。
0607デフォルトの名無しさん
2010/06/22(火) 15:35:29括弧があってもなくても問題ないような場合は人間にとって見やすいと思うほうにすればいい。
全てを機械的に統一する必要も、PBPを盲信する必要もない。
>>606の例みたくシンプルに1文で済むような場合は誤解の生じようもないし好きに書けばいい。
ただ、この場合3番目は不自然というか意味ねーと思うけど。
↓みたいな場合は括弧を使わざるを得ない。けどこれもどっちがいいかはケースバイケースかな。
print +(substr $foo, 0, 1), "が1文字目\n";
print substr($foo, 0, 1), "が1文字目\n";
っと、そういえば組込み関数に括弧つけたい派の>>586は、print使うときも
print("hoge"); とか (print "fuga"); みたいに書くのかね?
0608デフォルトの名無しさん
2010/06/22(火) 15:46:59有名モジュールになると気分的にはほとんど組み込みみたいな
もんだし。
結局なんとなくオレ基準で決めてるな。同じ関数はだいたい同じ
にはしてるけど。
0609デフォルトの名無しさん
2010/06/22(火) 21:41:02そこが意見の分かれ目じゃないか。
小学校だか中学校だか忘れたが
関数には y=f(x) みたいにカッコをつけるって習っただろ。
printが関数なら、カッコつけるだろうし
関数ではない、と思うならカッコつけない。
C言語脳に冒されたヤツらは何でもかんでも関数にしちまった。
挙句の果てに値を返さないvoid関数というクソまで生み出しちまった。
0610デフォルトの名無しさん
2010/06/22(火) 21:41:570611デフォルトの名無しさん
2010/06/22(火) 23:17:04でもprintfにつけないんならsprintfにもつけたくないんだよなぁ。
sprintfは明らかに関数なんだけど。
0612デフォルトの名無しさん
2010/06/23(水) 00:08:21これはバカにしてるの?
0613デフォルトの名無しさん
2010/06/23(水) 01:06:53珍しく長文書いたと思ったら頓珍漢だし。
0614デフォルトの名無しさん
2010/06/23(水) 22:37:14my @a = &wrapper(); # リスト
my $s = &wrapper(); # スカラー
sub wrapper{
print "-start-\n";
my @re = &func; # ★ リストしか・・
print "-end-\n";
return @re;
}
sub func{}
0615デフォルトの名無しさん
2010/06/23(水) 22:41:29なんとなく格好悪いしもっとスマートな方法は無いでしょうか?
sub wrapper{
print "-start-\n";
if(wantarray()){
my @re = &func; # ★ リスト
print "-end-\n";
return @re;
}else{
my $re = &func; # ★ スカラー
print "-end-\n";
return $re;
}
}
0616デフォルトの名無しさん
2010/06/23(水) 22:56:260617デフォルトの名無しさん
2010/06/23(水) 23:28:22見えるんだが。
sub func { ( 1,2,3,4) ;} # 取り敢えずの例でリストを返しとく。
sub wrapper{
print "-start-\n";
my @re = func ; # func がスカラーを返したとしても配列にセット。
print "-end-\n";
return wantarray ? @re : $re[0] ;
}
printf "%s\n", join ",", wrapper ; # リスト
printf "%s\n", scalar wrapper ; # スカラー
0618デフォルトの名無しさん
2010/06/23(水) 23:41:51sub func{} も同じコンテキストで動かしたいのですが・・。
0619デフォルトの名無しさん
2010/06/23(水) 23:44:160620デフォルトの名無しさん
2010/06/23(水) 23:52:20sub func{} の中もwantarrayしたいって事だよね?
sub func { wantarray ? ( 1,2,3,4) : 1 ;}
sub wrapper{ return func; }
#print文なんて飾りです。偉い人には(略
0621デフォルトの名無しさん
2010/06/24(木) 00:05:37#sub wrapper{ return func wantarray; }
sub wrapper{ my $f = wantarray ; return func $f ; }
こっちの方が適切か?
何れにしても617からのレスで例は十分出したから、
肉付けは御自分でどーぞ。
0622デフォルトの名無しさん
2010/06/24(木) 06:47:07if を?:で書き換えただけなのに無意味に偉そうだな
0623614
2010/06/24(木) 11:49:44やっぱり、私の文章力が足りなかったようですみません。
>>614 のような場合にコンテキストが func では変わってしまう場合があるので、
変わらないようなスマートな書き方無いかなという質問でした。
return &func;
という書き方ではコンテキスト変わらないので困らないのですが、例のように
returnから引き離したときにどうすればいいのかなと。
で、恥ずかしながら稚拙な >>615 の例を書いてみたのですが。
0624デフォルトの名無しさん
2010/06/24(木) 19:49:07printf "data=%20.20s\n", unpack("H*", data);
などとやっているのですが ”313e1cb8f94b” と表示され見難いので
”31 3e 1c b8 f9 4b”と空白を入れて表示したいのですが、できるだけ
シンプルなコードで表示するにはどのように書けばいいでしょうか?
0625デフォルトの名無しさん
2010/06/24(木) 20:44:310626デフォルトの名無しさん
2010/06/24(木) 22:53:200627デフォルトの名無しさん
2010/06/25(金) 03:10:40今2つのテキストファイルがあって、内容はおおよそ下のようです
--------------テキストA-------------------
fcart1 -0.0000000000E+00 -0.0000000000E+00 1.0770536961E-04
-0.0000000000E+00 -0.0000000000E+00 6.6543134784E-04
-0.0000000000E+00 -0.0000000000E+00 -7.7313671745E-04
getden1 0
------------------------------------------
--------------テキストB--------------------
xred 0.0 0.0 0.047843858990
0.0 0.0 0.000434433306
1/3 2/3 -0.011730466739
#Definition of the planewave basis set
------------------------------------------
テキストAの一番右の列の数値3つをそれぞれ上から順番に、テキストBの一番右の列の数値に足したいのですが
どのようにしたらいいでしょうか
ご教授お願いします
0628デフォルトの名無しさん
2010/06/25(金) 12:57:12wantarray ? func() : scalar func();
0629デフォルトの名無しさん
2010/06/25(金) 16:15:17print Dumper( $hoge);
---
$VAR1 = {
'entry' => [
{
'title' => ' aaa',
'-id' => 'aaa'
},
{
'title' => ' aaa',
'-id' => 'aaa'
}
]
};
---
2.
foreach( $hoge->{entry}){
print Dumper( $_);
}
---
$VAR1 = [
{
'title' => ' aaa',
'-id' => 'aaa'
},
{
'title' => ' aaa',
'-id' => 'aaa'
}
];
---
0630628
2010/06/25(金) 16:17:18foreach( @$hoge->{entry}){
print Dumper( $_);
}
---
(出力なし)
---
4.
my $foo = $hoge->{entry};
foreach( @$foo){
print Dumper( $_);
}
---
$VAR1 = {
'title' => ' aaa',
'-id' => 'aaa'
};
$VAR2 = {
'title' => ' aaa',
'-id' => 'aaa'
};
1.のデータ構造を持つ変数があり、その内容をforeachで抜き出したいのですが、なかなか理解が出来ません。
4.の方法で実現できたのですが、どうして3.では実現が出来ないのでしょうか?
もしよろしければ、解説いただければと思います。
0631デフォルトの名無しさん
2010/06/25(金) 16:43:290632デフォルトの名無しさん
2010/06/25(金) 18:12:03矢印演算子の優先順位って相当高いよね
http://perldoc.jp/docs/perl/5.6.1/perlop.pod
0633デフォルトの名無しさん
2010/06/25(金) 19:00:42ハッシュの配列で、
[
{
"id" => "1",
"com"=> "2"
},
{
"id" => "2",
"com"=> "2"
}
]
のような物があったとして、idが1のハッシュのcomの値を取得したいのですが、
foreach等でスキャンするしか方法はないのでしょうか?
ハッシュの配列がかなり大きく、idの呼び出しもかなりの回数行うことがあるので負荷などを考えると、効率のいい探し方はないかと調べております。
0634デフォルトの名無しさん
2010/06/25(金) 19:18:06id値→配列インデックスなどの逆引きでも作っておかない限りは…
0635デフォルトの名無しさん
2010/06/25(金) 19:33:49そういうのはデータベース使った方がいいんじゃね?
確かDBD::SQLiteあたりならデータベースをメモリ上に持てたはずだし。
0636デフォルトの名無しさん
2010/06/25(金) 22:16:43そのデータ構造じゃ、>>634みたいなことしない限り無理だろう
idをキーにするほうが自然じゃね?
{
1 => {
"com" => "2",
},
2 => {
"com" => "2",
},
}
0637デフォルトの名無しさん
2010/06/25(金) 23:15:50求めたいid => $id
だったとしたら単純に
$hoge[$id - 1]->{com}じゃん。
0638デフォルトの名無しさん
2010/06/25(金) 23:57:450639デフォルトの名無しさん
2010/06/26(土) 10:38:26俺もそうすると思う
0640デフォルトの名無しさん
2010/06/27(日) 09:23:43ファイル出力するコードを入れたのですが
my $data = do{ local $/; <STDIN>};
open(FILE,">./stdin.eml");
print FILE $data;
close (FILE);
#↑これは成功
その後にSTDINを入れた$dataを再利用しようとして、
以下のコードを書きましたが
while (<$data>) {
print $_ . "\n";
}
としても$dataを表示することができません。
while ($data)
もだめでした
配列に代入する方法ではできたのですが、
perlならシンプルなコードが書けそうな
気もしますので、配列以外の方法で実現する方法
をご教示ください。
0641デフォルトの名無しさん
2010/06/27(日) 10:09:20while (<$data>) {}だと$dataに格納されている文字列が示す名前の
ファイルをオープンして順次$_にセットする挙動…のはず
print $data; #でOK
そもそもこれは成功コードでprint FILE $data;ってあるじゃん…
0642デフォルトの名無しさん
2010/06/27(日) 10:48:21ファイル出力後、
$dataの内容を1行ずつ処理したいということです。
while内処理のprint はあくまで例でした。
以下のコードで実現できますが、
配列を使わずに、シンプルにでき方法があれば
ご教示ください。
my $data = do{ local $/; <STDIN>};
open(FILE,">./t3.eml");
print FILE $data;
close (FILE);
@lines = split("\n",$data);
for(my $i = 0;$i <= $#lines;$i++){
$r = $lines[$i];
if ($r =~ /From:/i){
print "$r\n";
}
}
0643デフォルトの名無しさん
2010/06/27(日) 11:13:13どうしてもというならfor句に直接splitを突っ込んで
見かけだけ配列を避けるとか、m//使うとか考えられるけど…
やっぱりSTDINからとってくるときに$/そのままにして
一行ごとに配列に入れるようにしない?やっぱり嫌?
0644デフォルトの名無しさん
2010/06/27(日) 12:47:58while (my $r = /(.*?)\n/g) {
}
0645デフォルトの名無しさん
2010/06/27(日) 13:37:13ありがとうございます。
配列が嫌ってわけではないです。
シェルスクリプト(sh系)なら
recs=`cat ./data.txt`
for rec in $recs; do
処理・・・
done
こんな感じでできるのでperlも
直接処理ができるのかと思いました。
元々のコードは
while(<STDIN>){
$r = $_;
処理・・・
}
なのですが、
今回<STDIN>の中に
複数のOSの改行コードが存在する
疑惑があり、処理が正常に動かなかった為、
調査のために、ファイルに一気に出力しました。
素直に配列でやります。
0646デフォルトの名無しさん
2010/06/27(日) 14:24:24全部読み込むのはどうよ」問題なのですが
正規表現ライブラリ側で「もうちょい食わしてくれたら完全にマッチするかもしれない」
みたいな意思表示をしてくれたら解決すると思うのですが、そんな素敵ライブラリありますか?
0647デフォルトの名無しさん
2010/06/27(日) 14:45:37マッチングを前半と後半とかに分解した方が素直な場合があるけど
それはどうしても避けたいパターン?
0648デフォルトの名無しさん
2010/06/27(日) 15:51:32open my $fh,'<',\$data; # 詳細は PerlIO::scalar 参照
while(<$fh>) { ... }
みたいなやり方はあるけどね。
でも、自分が素直だと思う方法を迷わずに使うのは充分にperlらしいやり方だと思う。
0649デフォルトの名無しさん
2010/06/27(日) 16:16:35my $data = do{ local $/; <STDIN>};
for my $r (split /\n/, $data) {
print "$r\n" if ($r =~ /From:/i);
}
>>648のほうが無駄はなさそうだけど
0651デフォルトの名無しさん
2010/06/27(日) 21:24:00望ましいと思う
0652デフォルトの名無しさん
2010/06/27(日) 23:27:10てーのが想像出来ん。
0653デフォルトの名無しさん
2010/06/27(日) 23:45:420654デフォルトの名無しさん
2010/06/28(月) 01:06:43それだと、>>647氏の指摘通り、マッチング分解して
各行解析するしか無いんじゃねーの?
0655デフォルトの名無しさん
2010/06/28(月) 02:13:44ループぶん回せるんだけど、これもできない事情が何かあるのかな
0656デフォルトの名無しさん
2010/06/28(月) 03:43:110657507
2010/06/28(月) 17:48:16やりたいことは、文字列+Enterでなくて、矢印キーなどでリアルタイムに信号を送って
動くプログラムを作りたいと思います。何かヒントはあるでしょうか?
リアルタイムキー入力に関しては、
http://aplawrence.com/Unix/perlinput.html
にあった、vec($rin,fileno(STDIN),1)=1;
がひとつの方法かと思いますが、これをどう利用したらいいかまだ分かっていません。
矢印キーなどはPerl内ではASCIIコードで表現するのでしょうか?
0658デフォルトの名無しさん
2010/06/28(月) 19:30:54いるようでは先がおもいやられる
0659デフォルトの名無しさん
2010/06/28(月) 21:13:48Term::ReadKey
0660507
2010/06/29(火) 00:45:15私にはまだ、理解できないスクリプトです。selectあたりをもっと勉強してみます。
>>659
コメントありがとうございます。
use Term::ReadKeyで取り敢えずリアルタイムキー入力はできるようになりました。
次の課題は、方向キー(矢印キー)の入力をどう判定するかです。
アドバイスを頂けたらありがたいです。
現在のスクリプト
#!/usr/bin/perl
use strict;
use warnings;
use Term::ReadKey;
ReadMode 4;
END { ReadMode 0 }
print "q to quit \n";
my $key = ReadKey;
while ($key ne 'q'){print $key;$key = ReadKey;}
print "\n";
0661デフォルトの名無しさん
2010/06/29(火) 01:32:230662デフォルトの名無しさん
2010/06/29(火) 01:39:420663507
2010/06/29(火) 03:23:49>>662
すんません。
もっと勉強します。
矢印キーの受け取りについても教えてください。
ASCIIコードをつかうのではと思うのですが。
0664デフォルトの名無しさん
2010/06/29(火) 04:42:580665デフォルトの名無しさん
2010/06/29(火) 06:05:050666507
2010/06/29(火) 13:36:48出来れば、その方法を詳しく教えてください。
色々しらべてだんだん分かってきました。
ASCIIコード内の文字の表記法は分かりました。
\100=8進数表記で@を表す。\x..は16進数表記。
しかし、矢印はASCIIコードじゃないですね。
ASCIIコードの制御コードは33個しかなくて、矢印キーは入っていませんでした。
ググってJAVAプログラムの例とかは見つけました。
そこから推測するにTerm::ReadKey あるいはTerm::ReadLineの
パッケージにそれようのコマンドがあるのではないかと想像しています。
もうひとつの方法は、キー入力で受け取った値を別の文字コードに変換して
出力することですが、まだ出来ていません。
0667507
2010/06/29(火) 15:09:15Term::TransKeys;
このモジュールを使えば矢印キーを認識できるようになることは分かりました。
しかし、紹介されているsampleプログラムが難解すぎて使いこなせていません。
0668デフォルトの名無しさん
2010/06/29(火) 16:55:23アウトラインプロセッサ Part17
http://pc12.2ch.net/test/read.cgi/software/1268128564/224
ttp://codepad.org/jxOB6Qio
ディレクトリをなぞってテキストをピリオド階層テキストにするスクリプトです
危ないところとかないでしょうか
0669デフォルトの名無しさん
2010/06/29(火) 18:18:300670デフォルトの名無しさん
2010/06/29(火) 18:57:39http://codepad.org/1jQpKm0f
0671デフォルトの名無しさん
2010/06/29(火) 19:20:50通りすがりだけど
テキストファイルのエンコーディングが単一でない限り
連結した際にぶっ壊れたファイルが出来上がるような気が
Perlが自動的に面倒みてくれるとかだったらごめんね
0672デフォルトの名無しさん
2010/06/29(火) 19:29:55ツリー型メモ帳で使われているファイル形式です
実体はただのテキストファイルです
正確には「階層付きテキスト形式」と呼ばれています
文書を木で表現する形式です
ノードの名前にピリオドを付けて深さを表します
ノードの内容(本文)にはピリオドはつきません
ここが詳しいです
ttp://www.wikihouse.com/windows/?%A5%A2%A5%A6%A5%C8%A5%E9%A5%A4%A5%F3%A5%D7%A5%ED%A5%BB%A5%C3%A5%B5
ttp://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%A6%E3%83%88%E3%83%A9%E3%82%A4%E3%83%B3%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5
>>670
フォルダにあるテキストの内容も@wzに入れたいのです
0673デフォルトの名無しさん
2010/06/29(火) 19:48:01そのスレッド最初から全部読めとでも言うの?
どういう結果がほしいのかだけ書いてくれれば、仕様どおりにコーディングできるんだけど。
0674デフォルトの名無しさん
2010/06/29(火) 20:31:55http://codepad.org/LoQquCL9
0675デフォルトの名無しさん
2010/06/29(火) 21:26:22・とあるディレクトリd0以下に存在する全てのディレクトリをなぞる。
・このとき、今位置するディレクトリdnの相対的な深さをdとして、
d個のピリオドをディレクトリdnの名前の前に足した文字列 をファイルFに出力する。
・また、このとき、今位置するディレクトリdnにテキストファイルがあれば、
d+1個のピリオドをテキストファイルtnの名前の前に足し、拡張子.txtを除いた文字列 をファイルFに出力する。
・さらに、そのテキストファイルtnの内容をそのままファイルFに出力する。
テキストファイルtnの内容の各行頭には、ピリオドはつけない。
テキストファイルtnの内容のとある行頭にピリオドがある場合は、ピリオドの前に半角空白を入れる。
このような仕様です
>>674
ありがとうございます
まったくの期待通りですが、
ピリオドの数が合わない部分がありました
下のようなディレクトリで試しました
ttp://www1.axfc.net/uploader/Sc/so/128829.zip
ウイルスチェックはしましたが、念のためもう一度お願いします
0676デフォルトの名無しさん
2010/06/29(火) 21:30:17ttp://www1.axfc.net/uploader/Sc/so/128834.zip
0677507
2010/06/30(水) 13:10:10'27-91-65' => '<UP>',
'27-91-66' => '<DOWN>',
'27-91-67' => '<RIGHT>',
'27-91-68' => '<LEFT>',
ぐぐったらREBOLというのに関係ありそうだけど
素直にモジュール使うほうが楽なんだろうなぁ。
0678デフォルトの名無しさん
2010/06/30(水) 14:45:18親クラスも初期化し、子クラスも初期化して使う書き方がよく分からず混乱しています。
例えば以下のコードのように、親クラスも初期化する必要があるが、子クラスに追加フィールドを持ちたい場合、
どうやって両方を初期化して、全て子クラスのオブジェクトとして持ち歩けばよいか分かりません。
このコードの場合だと、親クラスのコンストラクタを呼んで、その参照を bless しただけで、子クラスの
追加フィールドを bless 出来ません…
bless は唯一つのハッシュリファレンをクラスと紐付けるものだと理解していますが、
この場合はどうすれば良いのでしょうか?アドバイスいただけますと幸いです。
#!/usr/bin/perl
package Parent;
sub new {
my ( $class, $arg ) = @_;
return bless { "parent" => $arg }, $class; #引数をparentにセット
}
sub print {
print "Parent: " . shift->{"parent"} . "\n"; #parentの内容をprint
}
package Child;
use base qw(Parent);
sub new {
my ( $class, $arg ) = @_;
my $super = $class->SUPER::new($arg); #親クラスコンストラクタ呼び出し
my $field = { 'child' => '20' }; #子クラスの追加フィールド
return bless $super, $class;
}
package main;
my $child = new Child(10); #子クラスのインスタンス作成
print $child->print(); #親クラスのfieldをprint
0679デフォルトの名無しさん
2010/06/30(水) 14:59:32初期化処理は別メソッドにしてnewはblessした後に初期化メソッドを呼ぶだけ
にする。
package Parent;
sub new {
my($class, @args) = @_;
my $self = bless {}, $class;
$self->initialize(@args);
return $self;
}
sub initialize {
my($self, ...) = @_;
# Parentの初期化処理
...
}
package Child;
use base qw(Parent);
sub initialize {
my($self, ...) = @_;
$self->SUPER::initialize(...);
# Child の初期化処理
...
}
0680デフォルトの名無しさん
2010/06/30(水) 15:05:14あとは普通のhashrefに対してするように必要なフィールドを足してやるだけでいい。
package Child;
use base qw(Parent);
sub new {
my ( $class, $arg ) = @_;
my $self = $class->SUPER::new($arg);
$self->{child} = 20;
$self;
}
0681678
2010/06/30(水) 15:58:41レスありがとうございます。
お示しいただいたコード例では、以下のように子クラスのinitializeを明示的に呼んでやるというイメージであっていますか?
my $child = new Child(); #親のnewが呼ばれる
$child->initialize(); #子クラスの初期化メソッド。中で親クラスの初期化メソッドも呼ばれる
子クラスで新たにフィールドにハッシュを追加したい場合は
package Child;
use base qw(Parent);
sub initialize {
my($self, ...) = @_;
$self->SUPER::initialize(...);
$self->{'newField'} = "something new"; #追加
}
のような感じですかね?とてもとても勉強になりました。ありがとうございました。
0682678
2010/06/30(水) 15:59:44明快かつ簡潔な答えありがとうございました。仰るとおりですね。
まだ脳がPerlに慣れていないようですぐにはそのことに思い当たりませんでした。勉強になりました。
0683678
2010/06/30(水) 16:33:17複数の親クラスを別の引数で初期化する時は >>679 さんの方法はそのままでは使えないので
初期化用のメソッド名を重複しない様にするぐらいしか自分では思いつかなかったのですが、
もっとスマートなやり方がありましたら是非ご指導ください。
以下の例では、>>679 のように、親クラスのnewは初期化メソッドを呼ぶだけだが、
初期化メソッドの名前をそれぞれ initA(), initB() としたつもりです。
use base(ParentA ParentB)
sub new {
my $class | shift;
return $class->NEXT::new(); #両方の親クラスのnewを実行
}
sub init {
my $self | shift;
$self->SUPER::initA();
$self->SUPER::initB();
}
my $child = new Child();
$child->init();
$child->parentAmethod(); #ParentAにしかないメソッド
$child->parentBmedhod(); #ParentBにしかないメソッド
0684678
2010/06/30(水) 17:06:14>>681 で大きな勘違いをしていました。
new Child(); したときに呼ばれる initialize() は、親クラスのそれではなく
子クラスのそれなのですね…目からうろこでした。
今日一日でずいぶん疑問が氷解しました。ありがとうございました。
0685デフォルトの名無しさん
2010/06/30(水) 19:21:25直下のディレクトリの内容を表示する時はピリオドがひとつ増える。
カレントディレクトリのファイル名もピリオドがひとつ増えるのだとすると、
区別がつけ難い。なにか仕様に誤りがあるのでは?
0686デフォルトの名無しさん
2010/06/30(水) 21:01:18ちった自分で考えろ
0687デフォルトの名無しさん
2010/06/30(水) 21:44:48「ディレクトリの内容」が
@file = readdir ( DIR ) ;
での@fileを指すならば、それは出力しませんし、ピリオドも増えません。
0688デフォルトの名無しさん
2010/06/30(水) 23:01:54再帰呼び出し使うのってどっかの参考本にでも載ってるの?
普通にsplice利用すれば良いのに。
use Data::Dumper ;
use Cwd ;
sub make_list {
my $i = 0 ;
for ( @_ ){ $i ++ ; -d $_ and splice @_, $i, 0, sort grep !/^\./, glob "$_/*" ; }
@_ ;
}
print Dumper [ make_list getcwd ] ;
もっと言えば、coreのFile::Find使えって話しになるけどさ。
perl -MFile::Find -MCwd -le 'find sub{ print $File::Find::name }, getcwd '
0689デフォルトの名無しさん
2010/06/30(水) 23:14:16◯$i ++ ; -d $_ and splice @_, $i, 0, sort glob "$_/*" ;
0690507
2010/07/01(木) 00:42:40やっと自己解決しました。
use Term::ReadKey;
ReadMode 4;
END { ReadMode 0 }
while ((my $key=ReadKey) ne 'q'){print ord($key)."\n";}
これで押したキーのASCIIコードが表示されるようになりました。
しかし矢印キーは一度押すと同時に3つのアスキーコードを
送ってくるようなので、矢印キーが押されたかどうかを判定するスクリプトを
どう処理したら良いの困っています。ヒントを下さい。
0691デフォルトの名無しさん
2010/07/01(木) 01:00:11$.でカウントされている@_での$_[$.]が$_、
とかはperlerには「普通」なのか……
0692507
2010/07/01(木) 01:11:07まだ不完全ですが、なんとなく自己解決しました。
矢印キーを押すと挙動不審になりますが、いちおう
矢印キーが押されたら、その方向を表示し、通常のキーが押されたら、
そのキャラクタを表示するプログラムです。
改善点があればぜひご指導下さい。
use Term::ReadKey;
ReadMode 4;
END { ReadMode 0 }
while ((my $key=ReadKey) ne 'q'){
if(ord($key)==27){
if(ord($key=ReadKey)==91){
if(ord($key=ReadKey)==65){print "<UP>\n";}
elsif(ord($key)==66){print "<DOWN>\n";}
elsif(ord($key)==67){print "<RIGHT>\n";}
elsif(ord($key)==68){print "<LEFT>\n";}
$key=ReadKey;
}
}
print $key;
}
0693デフォルトの名無しさん
2010/07/01(木) 05:39:41@_は$.でカウントなんてされてないぞ。
0694688
2010/07/01(木) 06:23:06「普通にsplice利用すれば良い」ってだけだから
for文は好みにすればいいよ。
(実際の所はspliceもキモでもないんだけどw)
sub make_list{
my @list = @_ ;
my @out ;
while( my $file = shift @list ){
push @out, $file;
next if ! -d $file;
unshift @list, sort glob "$file/*" ;
}
return @out;
}
0695デフォルトの名無しさん
2010/07/01(木) 13:38:06じゃあforの@_はどうやってカウントしてるんだ?
0696デフォルトの名無しさん
2010/07/01(木) 17:12:18perlなんてさ、ただの一時しのぎだろ。
ロジックの確認するだけ。
とりあえず間に合わせでperlで書いといて
あとで他の言語に書き換えたいよな。
できるだけperl固有のやりかたは避けたい。
つぶしが利かん。
それに、「普通」だと言っておきながら
>>689みたいなミスを犯すならバカらしいじゃん。
もっともっと複雑な処理をしたいとき、どーするよ?
0697デフォルトの名無しさん
2010/07/01(木) 17:40:10あとで他の言語に書き換えるぐらいならはじめからそっちで
書くわい。
0698デフォルトの名無しさん
2010/07/01(木) 18:22:45ExcelやAccessに渡したりするにはPerlが便利だと思う。
0699デフォルトの名無しさん
2010/07/01(木) 18:33:55while (<SYS>) { print $_; }
close(SYS);
0700デフォルトの名無しさん
2010/07/01(木) 18:54:22ループで配列をshiftしつつunshift、
長さが変わる@listのshift位置を何が記憶してるのかが謎。
$.ではないし、何か専用のポインタのようなものでもあるの??
0701デフォルトの名無しさん
2010/07/01(木) 19:12:05shift位置の記録とかそんな考え方はいらんだろ。常にその時点
での配列の先頭要素を削って取り出すのがshift。
0702デフォルトの名無しさん
2010/07/01(木) 19:54:400703デフォルトの名無しさん
2010/07/01(木) 20:07:20perlsynにはやっちゃいけないと書いてある。
LIST のいずれかの部分が配列であった場合に、たとえば splice を使って ループの本体でその要素を削除したりあるいは追加したりすると foreach は非常に混乱してしまいます。 ですからそういうことをしてはいけません。
0704デフォルトの名無しさん
2010/07/01(木) 20:49:10再帰を使うのは至って自然なことだと言ってみる。
0705デフォルトの名無しさん
2010/07/01(木) 21:28:020706デフォルトの名無しさん
2010/07/01(木) 22:10:570707デフォルトの名無しさん
2010/07/01(木) 22:15:280708デフォルトの名無しさん
2010/07/01(木) 22:20:470709デフォルトの名無しさん
2010/07/01(木) 22:23:26それとも再帰以外に分かりやすくて綺麗な方法があるのか?
0710デフォルトの名無しさん
2010/07/01(木) 22:33:13$num=10;
($a,$fib)=(0,1);
for (1..$num) {
($a,$fib)=($fib,$a+$fib):
print "$fib\n";
}
0711507
2010/07/02(金) 01:03:22見つからなかったので教えて下さい。
Perlでテキスト出力をしたとき、通常はどんどん新しい行が追加されて
流れてしまいます。
出力場所を固定して、その場で出力を書き換える方法はどうしたら良いのでしょうか?
0712デフォルトの名無しさん
2010/07/02(金) 01:29:52for($i=0; $i<10; $i++){
print "$i\r";
sleep(1);
}
0713デフォルトの名無しさん
2010/07/02(金) 03:01:28perlが商標登録って。
北畠徹也って誰?
ttp://neta.ywcafe.net/001095.html
0714507
2010/07/02(金) 05:41:12最初は、自分への返信ということも気がつかないところでした。
実行してみてよく分かりました。
キーワードは、復帰文字、特殊変数、バッファリングですね。
バッファリングはまだ理解が不十分なのでもっと勉強してみます。
ありがとうございました。
0715デフォルトの名無しさん
2010/07/02(金) 18:01:10凍結してんの?
0716デフォルトの名無しさん
2010/07/03(土) 17:57:43環境は MacOSX Snow Leopard の X11 上で、
Perl のバージョンは 5.10.0 、Perl/Tk は Tk-804.029.tar.gz を使っています。
手順は perl Makefile.PL を行った後 make するだけで、make 時にエラーになります。
エラーは以下のようになっています。
/usr/bin/ar cr libpTk.a ClientWin.o Lang_f.o ...
/usr/bin/ranlib: archive library: libpTk.a will be fat and ar(1) will not be able to operate on it
/usr/bin/ranlib: for architecture: x86_64 file: libpTk.a(tclAsync.o) has no symbols
:
どうもファイルが多すぎて ar に失敗してるようです。
全 Makefile 内(結構ある)の ar を libtool に置き換えたらなんとかなるかもしれませんが、
このようなエラーが出てインストールできないという情報がネット上に特にないので、
そんなことをしなくても何とかなるのでしょうか?
何か知ってる方がいればお願いします。
0717デフォルトの名無しさん
2010/07/03(土) 20:33:45if ($Data eq "+") {
$k = $x + $y; } elsif ($Data eq "-") {
$x - $y; } elsif ($Data eq "*") {
$x * $y; } elsif ($Data eq "/") {
$x / $y; };
print $k;
if文でDataに入力された記号を見分けてそれに対応した計算をしたいんだけど $kの中身がnullになるのはなぜ?
0718デフォルトの名無しさん
2010/07/03(土) 20:36:10行末の改行コードを落としてないから
0719デフォルトの名無しさん
2010/07/03(土) 23:15:14標準入力受けたら、ファイルから一行読んだら、chomp。
そして暇だから書いてみた。
foreach ($x, $Data, $y) {
chomp($_ = <STDIN>);
}
$k = ($Data eq "+") ? $x + $y :
($Data eq "-") ? $x - $y :
($Data eq "*") ? $x * $y :
($Data eq "/") ? $x / $y :
"non support" ;
print $k;
0720デフォルトの名無しさん
2010/07/03(土) 23:36:12Macってのはx86の64ビットなのか?
それ、Windowsのじゃない?
0721デフォルトの名無しさん
2010/07/03(土) 23:55:530722デフォルトの名無しさん
2010/07/04(日) 00:28:30なのに、確かになぜか -arch x86_64 が指定されているようですね・・・。
Snow Leopardだからということで、
64ビット版とのユニバーサルバイナリを作る設定になってるのかも。
CPANの設定が面倒くさかったので全部デフォルトのままだったのがマズかったのかもしれません。
明日ちょっと設定を見直してみます。ありがとうございました。
0723デフォルトの名無しさん
2010/07/04(日) 06:27:31foreachってこういう使い方もできるのか。
$_に代入すると元の変数の値も変わるんだな。
配列で使うときには何も感じずに使ってたけど、なんか不思議な感じ。
$_に各変数のポインタが入るなら$$_としないといけないのに。
まぁ、特殊変数というぐらいだからあれか。
0724デフォルトの名無しさん
2010/07/04(日) 06:59:55my $dat ;
my $foo ;
for $dat ($foo){ $dat = q{bar} ;}
print "$foo\n" ; # => bar
0725デフォルトの名無しさん
2010/07/04(日) 07:48:24($,, $\) = (", ", "\n");
@names = ('太郎', '花子');
foreach $name (@names) {
$name .= 'くん';
}
print @names;
for($i=0,$name=$names[$i]; $i<@names; $names[$i]=$name, $name='', $i++, $name=$names[$i]){
$name .="さん";
}
print @names;
0726デフォルトの名無しさん
2010/07/04(日) 07:54:290727デフォルトの名無しさん
2010/07/04(日) 08:56:56my $dat2 = q{ini};
my $foo ;
for $dat ($foo){ $dat = q{bar} ; $dat2 = q{aaa}; }
print "$foo\n" ; # => bar
print "$dat\n";
print "$dat2\n";
こんな風にすると、forのループ変数の特殊さが判る
まあ、普通に効率のいいコードを作れば参照渡しにするから当然だけど
0728デフォルトの名無しさん
2010/07/04(日) 09:52:280729デフォルトの名無しさん
2010/07/04(日) 10:08:47my @list1 = qw(hoge fuga piyo);
my @list2 = map { tr/o//d } @list1;
print "@list1\n"; #=> hge fuga piy
print "@list2\n"; #=> 1 0 1 (trで削除された文字数)
0730722
2010/07/04(日) 12:20:40Makefile を無理矢理置換して -arch i386 のみにするとインストールは成功しましたが、
実行しようとするとアーキテクチャが合わないとか言われてしまいました。
仕方がないので ar を libtool に置き換えて実行してみても、途中で失敗。
複数 -arch 指定してるとだめみたいなこと言われる箇所が。
gcc-4.2: -E, -S, -save-temps and -M options are not allowed with multiple -arch flags
仕方がないので -arch x86_64 のみにしてみたところ、うまくいきました。
Core 2 Duo って x86-32 と x86-64 の両方に対応していたんですね・・・。今頃知った。
そして、Snow Leopard は x86-64 モードで動いている・・・ということなのだと思います。
以上報告まで。
0731デフォルトの名無しさん
2010/07/04(日) 12:49:35スコープとは少し違う
ループ変数はsortの$a $bみたいなガチアイデンティファイア
0732デフォルトの名無しさん
2010/07/04(日) 17:36:44createWindow("パラメータ");
createShadow("パラメータ") if (useShadow);
こういうの良いなぁ。
0733デフォルトの名無しさん
2010/07/04(日) 18:34:12それで不都合ないので、使わない方が保守が楽
0734デフォルトの名無しさん
2010/07/04(日) 18:52:330735デフォルトの名無しさん
2010/07/04(日) 18:53:54豆な
0736デフォルトの名無しさん
2010/07/04(日) 19:04:58つーか今からでも入れてほしい。
0737デフォルトの名無しさん
2010/07/04(日) 19:06:28Cには別になくてもいいと思う
0738デフォルトの名無しさん
2010/07/04(日) 19:11:31dowhile使ってればいいじゃん
0739デフォルトの名無しさん
2010/07/04(日) 19:12:420740デフォルトの名無しさん
2010/07/04(日) 23:59:09〜‖|…
と表示されるはずが
??|…
と最初の2文字は"?"に変換されてしまいます。
どうも区点の1区にある文字でうまく変換できない文字があるようなのですが
何か設定が必要でしょうか?
use Encode;
$x = "\x21\x41\x21\x42\x21\x43\x21\x44"; # "〜‖|…"
$y = Encode::decode('jis0208-raw', $x);
print Encode::encode('CP932', $y);
0741デフォルトの名無しさん
2010/07/05(月) 02:04:480742デフォルトの名無しさん
2010/07/05(月) 14:28:330743デフォルトの名無しさん
2010/07/05(月) 15:50:52ありがとうございます。shiftjisで出ることを確認しました。
cp932 と shiftjisでググってみたらUncode規格のバグ文字に当たる問題みたいですね。
cp932を使いたいのでcp932でも表示できるUTF文字に置き換えることにしました。
0744デフォルトの名無しさん
2010/07/06(火) 15:27:390745デフォルトの名無しさん
2010/07/06(火) 15:42:26リストの順番が変わってもいいんならそれでいいと思うけど
0746デフォルトの名無しさん
2010/07/06(火) 17:39:14問題なさそうだし、それで行く。
0747デフォルトの名無しさん
2010/07/06(火) 18:16:31sub uniq (@) { my %h; map { $h{$_}++ == 0 ? $_ : () } @_; }
# grepがこの様なケースの為に存在するのに何故mapで?
2. 定番
%h ;
@uniq = grep { ! $h{$_}++ } @arr ;
3. ハッシュに突っ込んでkeys
%h ;
@h{@arr} = (1) x @arr ;
@uniq = keys %h ;
…手間は一番掛ると思う。
0748デフォルトの名無しさん
2010/07/06(火) 19:50:190749デフォルトの名無しさん
2010/07/06(火) 20:00:270750デフォルトの名無しさん
2010/07/06(火) 21:19:090751デフォルトの名無しさん
2010/07/06(火) 21:35:36結果:4 1 3 2 5
perl 5.8.6で確認。だいじょb
0752デフォルトの名無しさん
2010/07/06(火) 22:55:380753デフォルトの名無しさん
2010/07/06(火) 22:56:04@arr = 1 x 5 ; # => ( '11111' )
@arr = (1) x 5 ; # => ( 1,1,1,1,1)
自己フォロー
my $c = my $d = '';
my @arr = ( 1,2,3,$c,$d,undef,undef,1,2,3);
このケースを想定したら、自ずと2番以外の選択肢は消える
grep をちょっと変更しなきゃならんけど
0754デフォルトの名無しさん
2010/07/06(火) 23:23:04Can't find string terminator "'" anywhere before EOF at -e line 1.
This is perl, v5.10.1 built for MSWin32-x64-multi-thread
0755デフォルトの名無しさん
2010/07/06(火) 23:28:47perl -Mstrict -we "my @arr = qw( 1 2 3 4 5 3 4 );my %h;@h{@arr} = (1) x @arr;my @uniq = keys %h;print qq{@uniq\n}"
環境が無いから実行出来るかは知らんけどさ。
0756デフォルトの名無しさん
2010/07/06(火) 23:44:08C:\> perl -v
This is perl 5, version 12, subversion 0 (v5.12.0) built for MSWin32-x64-multi-t
hread
[...]
# 一行で
C:\> C:\Users\foobar>perl -Mstrict -we "my @arr = qw( 1 2 3 4 5 3 4 );my %h;@h{@arr}
= (1) x @arr;my @uniq = keys %h;print qq{@uniq\n}"
4 1 3 2 5
めでたしめでたし
0757デフォルトの名無しさん
2010/07/07(水) 19:54:26なんでワンライナー自慢になって終わってるんだ?w
0758デフォルトの名無しさん
2010/07/07(水) 20:19:14ワンライナーはストックできるから……じゃね
0759デフォルトの名無しさん
2010/07/07(水) 20:20:59思いやりがそうさせたんだろう
0760デフォルトの名無しさん
2010/07/08(木) 00:16:02上の文のchompは何に対して処理しているのか教えてください
0761デフォルトの名無しさん
2010/07/08(木) 00:26:180762デフォルトの名無しさん
2010/07/08(木) 00:50:390763デフォルトの名無しさん
2010/07/08(木) 01:54:501が@arr個ある配列をそれぞれに代入しているようなのですが、
このハッシュに@を付けて{}の中にキー配列を入れる用法はなんと言うんでしょうか?
ハッシュ プレフィクス @ 配列 初期化などでぐぐりましたが見つけられませんでした。
0764デフォルトの名無しさん
2010/07/08(木) 02:29:090765デフォルトの名無しさん
2010/07/08(木) 02:59:47ありがとうございます。
色々な例を見つけることが出来ました。
0766デフォルトの名無しさん
2010/07/09(金) 01:04:48$start = (times)[0];
for($i=0;$i<1000000;$i++){
my %h ;
my @uniq = grep { ! $h{$_}++ } @arr ;
}
printf "2.にかかった時間:%f\n", (times)[0]-$start;
$start = (times)[0];
for($i=0;$i<1000000;$i++){
my %h ;
@h{@arr} = (1) x @arr ;
my @uniq = keys %h ;
}
printf "3.にかかった時間:%f\n", (times)[0]-$start;
D:\>test.pl
2.にかかった時間:4.290000
3.にかかった時間:3.838000
あら3の方が早い
0767デフォルトの名無しさん
2010/07/09(金) 01:21:28while ($#stack >= 11) {
undef @myHands;
undef @hisHands;
push (@myHands, pop (@stack));
push (@hisHands, pop (@stack));
push (@myHands, pop (@stack));
push (@hisHands, pop (@stack));
print "MyCards:", join (", ", @myHands), "\n";
print "HisCards:", join (", ",@hisHands), "\n";
↑
ここで親のカードを1枚だけ表示させたい!
stackには51枚のカードが入っています。
お願いします。
0768デフォルトの名無しさん
2010/07/09(金) 11:33:14一枚目だけ表示すればいいの?こんな感じ
print join(",", map { $_ ? "xx":$hisHands[$_] } (0..$#hisHands) ), "¥n";
0769デフォルトの名無しさん
2010/07/09(金) 21:30:03ありがとうございます!
perl初心者の僕には難しすぎましたね・・・!
もっと色んな本を読んで、高レベルなプログラミングが出来るように頑張ります!
0770名無しさん@そうだ選挙に行こう
2010/07/10(土) 15:12:24utf8の文字コードだと化ける・・。ググったらutf8でも表示する方法が載ってたけど
Win2kだとダメでした。
binmode STDIN, ":encoding(cp932)";なんかも試したけど文字がたまに化けるなぁ・・・
0771名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:41:48PPMでダウンロードする場合は何ていう名前のを指定してやればいいんですかね
iHTTP::ProxyでPPMにてサーチしても変なのしか出てこない・・・
色々ぐぐっても分からず
0772名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:56:12CRLFすら無いので、<>で読めるんだろうか
0773名無しさん@そうだ選挙に行こう
2010/07/10(土) 23:38:13ppmのリストには載ってない。
ttp://aspn.activestate.com/ASPN/Modules?module_name=H&order=name&query_start=106
ttp://search.cpan.org/~book/HTTP-Proxy/lib/HTTP/Proxy.pm
からソースダウンロードして適当に突っ込むしか無いんじゃねーの?
0774名無しさん@そうだ選挙に行こう
2010/07/10(土) 23:38:45CPAN
↓
Perl core and CPAN modules documentation
↓
HTTP::Proxy in Modules Search
↓
HTTP::Proxy
↓
> Win32 PPM packages for "HTTP-Proxy"
> uwinnipeg Perl 5.10 repository [ v 0.24 ]
> uwinnipeg Perl 5.8 repository [ v 0.20 ]
0775名無しさん@そうだ選挙に行こう
2010/07/10(土) 23:46:00バイナリでも読めるんだから、改行無くても読めるだろ。
読込んだ後にエンコードなりデコードなりしちゃえばいいし。
my $content = ’’;
open my $fh, "foo" or die $!;
binmode $fh;
{
local $/;
$content = <$fh>;
}
close $fh;
0776名無しさん@そうだ選挙に行こう
2010/07/11(日) 00:12:180777名無しさん@そうだ選挙に行こう
2010/07/11(日) 00:20:400778名無しさん@そうだ選挙に行こう
2010/07/11(日) 00:25:03binmodeの事かな?
まあ、windowsでしか使わんからな。>binmode
binmode指定しとけば、なんだって読めるよ。
0779名無しさん@そうだ選挙に行こう
2010/07/11(日) 00:32:400780名無しさん@そうだ選挙に行こう
2010/07/11(日) 02:26:24どうもありがとう。PPMにないんですか通りでいくら探してもないはずだ
Win環境ではCPANは色々と面倒そうですね・・・。
ソースからも大変そうだ。HTTP::Proxyは凄い面倒そうだ・・・
0781名無しさん@そうだ選挙に行こう
2010/07/11(日) 04:24:17ppm リポジトリ 追加
でggr
0782名無しさん@そうだ選挙に行こう
2010/07/11(日) 07:31:14たくさんあって選びにくい
やっぱり最新のがいいんだろうか
0783名無しさん@そうだ選挙に行こう
2010/07/11(日) 09:40:415.12でも問題ないと思うよ
0784名無しさん@そうだ選挙に行こう
2010/07/11(日) 12:17:38WindowsでCPAN使いたいならActivePerlじゃなくてStrawberry Perlにするといい
インストールするだけでコンパイラとかも含めて必要なもの全部入るから何も面倒なことないよ
0785名無しさん@そうだ選挙に行こう
2010/07/11(日) 12:23:040786名無しさん@そうだ選挙に行こう
2010/07/11(日) 13:33:490787名無しさん@そうだ選挙に行こう
2010/07/11(日) 14:31:49>>784
どうもありがとう。色々試してみます
0788名無しさん@そうだ選挙に行こう
2010/07/11(日) 15:26:52テスト環境として使うなら実運用先のバージョンに合わせる
人柱なら開発版でもなんでも使えばいいじゃない
0789名無しさん@そうだ選挙に行こう
2010/07/11(日) 17:03:300790名無しさん@そうだ選挙に行こう
2010/07/11(日) 17:12:40使いたいモジュールがPerlの最新版に無ければ古いのを使う。
モジュールが出た時点で最新版に移行するよ。
0791名無しさん@そうだ選挙に行こう
2010/07/11(日) 17:19:32どうやってググって探せばいいのかな。
モジュール類が登録されているリポジトリの探し方を教えてください
0792名無しさん@そうだ選挙に行こう
2010/07/11(日) 17:21:40http://ppm.tcool.org/server/ppmserver.cgi?urn:PPMServer
http://fts.ifac.cnr.it/cgi-bin/dwww?type=runman&location=URI%3A%3AQueryParam/3pm
http://search.cpan.org/~gaas/URI-1.54/
http://www.bribes.org/perl/ppm
http://theoryx5.uwinnipeg.ca/ppms
あたりを適当に追加していったけど入ってなかった・・
0793名無しさん@そうだ選挙に行こう
2010/07/11(日) 17:28:310794名無しさん@そうだ選挙に行こう
2010/07/11(日) 18:00:46ActivePerl 5.10.1.1007を入れてみた。
0795名無しさん@そうだ選挙に行こう
2010/07/11(日) 18:05:23いつでも戻して置けるようにしておくことをお勧めする。結構安易にバージョンあげると面倒だよ
0796名無しさん@そうだ選挙に行こう
2010/07/11(日) 22:44:060797デフォルトの名無しさん
2010/07/12(月) 08:15:215.10.1.1007からはそうだね
>On 32-bit Windows CPAN shell automatically downloads and installs
>the MinGW GCC compiler
0798デフォルトの名無しさん
2010/07/12(月) 21:11:56文字列 01 を数値の 1 に変換したいんですけど一番スマートな方法ってどんな感じで指定するのですかね?
0799デフォルトの名無しさん
2010/07/12(月) 21:14:41文字列が10のときは二進の2にするの?それとも十進での10にするの?
0800デフォルトの名無しさん
2010/07/12(月) 21:18:46すみません。十進での10にする予定です
全部十進で考えています
0801デフォルトの名無しさん
2010/07/12(月) 21:33:14文字列のままで良いんでねーの?
明示的にどーしてもやりたいなら、0足すのが一番スマートか?
my $i = '01' ;
print 0+ $i ;
printf "%d\n", $i ;
0802デフォルトの名無しさん
2010/07/12(月) 21:35:33なるほど気にしなくてもいいんですね
どうもありがとうございました
0803最強
2010/07/12(月) 22:17:09Pod::PerldocJp
いれてperldocjp実行したけど文字化けしてしまう
utf-8撰んで表示させてるんだけど
perldocjp -f
Option f needs a following argument!
???: perldocjp [-h] [-V] [-r] [-i] [-D] [-t] [-u] [-m]
[-n nroffer_program] [-l] [-J] [-T] [-d output_filename] [-o output_format]
[-M FormatterModuleNameToUse] [-w formatter_option:option_value] [-L translation_code] [-F]
[-X] PageName|ModuleName|ProgramName|URL
perldocjp -f PerlFunc
perldocjp -q FAQKeywords
perldocjp -A PerlVar
-h????????????????????????????
???"perldocjp perldocjp"????????
[PerldocJp v0.13 based on Perldoc v3.15]
ってでてしまう
sjisとかeucとかためしたけど全部????って表示される 誰か教えてください
0804デフォルトの名無しさん
2010/07/12(月) 22:51:36問題あったら、端末のエンコーディングの問題も加わる
何れにせよ、cpanのマイナーモジュールの質問を2chでしても
あんまり有用な答えは帰って来んよ
普通にググった方は早いんじゃない?
0805デフォルトの名無しさん
2010/07/12(月) 23:25:28Perlのデバッグ環境でこれよさげなんだけど
使っている人いるかな。感想を聞きたいな
0806デフォルトの名無しさん
2010/07/13(火) 11:51:07コマンドラインから実行すればsystemコマンドがきちんと動作して
Apache上でcgiとして動作させればsystemコマンドが-1を返して来てしまいます。
cgiでsystemコマンドを使うためには何か特殊な記述が必要でしょうか?
Apacheのエラーログには特に何も出ていません。
コマンド自体は大したことしてなくて
system("ls"); だけです。とりあえず今のところは。
0807デフォルトの名無しさん
2010/07/13(火) 11:56:17>>1
CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://pc11.2ch.net/php/)
CGI の質問は答えが Perl と全然関係ない話に帰着する場合が
多かったりするので WEB プログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
0808デフォルトの名無しさん
2010/07/13(火) 15:19:26失礼しました。
とりあえず自己解決しました。
お騒がせしました。
0809デフォルトの名無しさん
2010/07/13(火) 15:24:10eclipes と EPIC だね。使ってるよ。ステップ実行できて超べんり〜
0810デフォルトの名無しさん
2010/07/14(水) 12:52:15CPAN Searchから以下のTARボールをダウンロード展開しました。
http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.611.tar.gz
展開したディレクトリからDBI.pmを取り出し、さらにlibの下からDBD, DBIを取り出して
自分の作業ディレクトリ mylib にコピーし、
use lib 'mylib';
use DBI;
my $dbh = DBI->connect(); #ドライバを指定していないのはわざとです
してみましたが、DBI.pmの265行目でコンパイルエラーがあると表示されて、当該場所を見ても
中括弧の終わりがあるだけで何でこけているのか判断がつきません。
CGI::Sessionモジュールや、Template Toolkitなどは、同じようにCPAN Searchから
拾ってきたものを展開して、ディレクトリ構成に注意してただしく配置し、use libしたら、
CPANが使えずに自前でライブラリを用意するしかない環境でも正しく動作しています。
ただ、DBIはTARボールを取ってきて展開して使えるような代物ではないのでしょうか…?
些細なアドバイスでも良いのでお願いします。
0811デフォルトの名無しさん
2010/07/14(水) 13:07:12perl Makemake.pl; make & make install
したらDBIはちゃんと動いているようですが、そうやってインストールした場合は
DBI.so というライブラリが生成されており、異なったCPUアーキテクチャ上では
動作しませんでした…
CPANはすべてPerlで書かれたライブラリだと思っていたのですが、これは勘違い
ということでしょうか…?
0812デフォルトの名無しさん
2010/07/14(水) 13:19:29パフォーマンスのためにXS使ってるものはmake必要だよ
そのためのCPAN
0813デフォルトの名無しさん
2010/07/14(水) 13:23:01なるほど、今回はどうも仕方がなさそうですね…
勉強になりました。ありがとうございました。
0814デフォルトの名無しさん
2010/07/14(水) 19:19:18http://search.cpan.org/~timb/DBI-1.611/lib/DBI/PurePerl.pm
0815デフォルトの名無しさん
2010/07/14(水) 19:27:14凄い便利そうでそうですね。土日か暇なときに入れてみます
ありがとう
0816デフォルトの名無しさん
2010/07/14(水) 22:54:380817デフォルトの名無しさん
2010/07/15(木) 07:38:49じゃぁ今のトレンドは何?
0818デフォルトの名無しさん
2010/07/15(木) 08:15:280819デフォルトの名無しさん
2010/07/15(木) 17:22:43なんかスマートでかっこいい方法ない?
0820デフォルトの名無しさん
2010/07/15(木) 17:57:05・Text::Template
・Text::MicroTemplate
・Template-Toolkit
・ClearSilver
・40 行で作るPerl用テンプレートエンジン
MicroTemplate使うのがいいんじゃね
0821名無し
2010/07/15(木) 18:52:42<${$self}{handle}>ってやるとエラーのですが
use strict;
use warnings;
package kuroppu;
sub new{
return bless{
handle=>undef,
};
}
sub open{
my $self=shift;
my $name=shift;
$self->close();
open $self->{handle},$name or die "file open error:$!";
}
sub read{
my $self=shift;
my $fh=${$self}{handle};
while(<$fh>)
{
print;
}
}
1;
$fh=${$self}{handle};ってやって
while(<$fh>)ってやるとうまく行くのですが
上のwhile(<${$self}{handle}>)だとエラーがでてしまうんですが
どうやって<>のなかでfhに代入させず入力させればいいですか?
0822デフォルトの名無しさん
2010/07/15(木) 19:21:20できない。単純変数に代入するか、readline関数を使ってください。
<>は中にグロブのファイル名パターンも書ける関係で変な仕様に
なっております。
$pat = '*.c';
while (<${pat}>) {...}
みたいなのできるんで。
0823名無し
2010/07/15(木) 19:22:04ありがとう・・・・
0824名無し
2010/07/15(木) 23:38:45>とは、言っても、Perlのカプセル化は、ガチガチではないので、
>カプセルの中に入ることができます。以下のことは、あんまりやってはいけないことです。
ってあるけどそうなの?
オブジェクト指向とうたってるのに カプセル化とか曖昧だとむかついてくる
0825デフォルトの名無しさん
2010/07/15(木) 23:44:42そう言うのが嫌な人はPerl向いてないよ
0826名無し
2010/07/15(木) 23:56:300827デフォルトの名無しさん
2010/07/16(金) 00:05:21参考までにどんなものを使っているか聞きたいな
0828デフォルトの名無しさん
2010/07/16(金) 00:12:270829デフォルトの名無しさん
2010/07/16(金) 00:14:300830デフォルトの名無しさん
2010/07/16(金) 00:18:18便利すぎ
0831デフォルトの名無しさん
2010/07/16(金) 00:32:02やろうと思えば覗けるけどカプセル化したい人は
覗くなってことさ。強制はしてないだけ。
0832デフォルトの名無しさん
2010/07/16(金) 01:18:50クッキーはどこに保存されますか?再読み込みとか保存とかどうなっているのだろうか
0833デフォルトの名無しさん
2010/07/16(金) 01:39:320834デフォルトの名無しさん
2010/07/16(金) 02:56:58うちの環境は :: が使えないことが多いので
40行を改造して使うわ・・・
0835デフォルトの名無しさん
2010/07/16(金) 02:59:560836デフォルトの名無しさん
2010/07/16(金) 03:47:12意味がわからないだろ?
俺にもなんでそんな環境でやらされんのかわかんないんだぜ
0837デフォルトの名無しさん
2010/07/16(金) 07:01:40Text'Template
を使えw
>>824
何の引用?
ttp://www.rwds.net/kuroita/program/Perl_oo.html
の事だったら、カプセル化の方法の説明は一切してないよ。
「perlのオブジェクト指向プログラムは、普通の状態だとカプセル化してない」
ってだけで。カプセル化したきゃ、自分ですれば良い。
(まあ、それでも他の言語と比べると…)
package Hoge;
use Scalar::Util qw(refaddr) ;
my %hash ; # dont use Grobal
my $code = sub {} ; # inner code
sub new { my $obj = bless \do{''}, shift ; $hash{ refaddr $obj } = shift ; $obj ;}
sub getter { $hash{ refaddr shift} ; }
sub setter { $hash{ refaddr shift} = pop ; return ; }
sub DESTROY { delete $hash{ refaddr shift } ; }
1;
package main;
my $obj = Hoge->new('hoge');
printf "%s\n", $obj->getter;
0838デフォルトの名無しさん
2010/07/16(金) 09:43:03これがCPAN使うなモジュール入れるなっていうお達しなら、
perl使う意味が八割減ジャネーノ?
0839デフォルトの名無しさん
2010/07/16(金) 09:48:240840名無し
2010/07/16(金) 10:02:46http://chat.studio.cx/o-cha/jsp/superbeginner/
ここに緑蛇でいるから誰か教えてください
0841デフォルトの名無しさん
2010/07/16(金) 12:32:37分かりやすいし使い勝手がいいんで改造して多用してる
ありがたや
0842デフォルトの名無しさん
2010/07/16(金) 13:00:31せっかく Perl付属のドキュメントがあるんだから
まずは手近なところから perldoc で少なくとも
perlboot
perlobj
perltoot
perltooc
perlbot
を読んで、理解出来ない部分を確認してから
他人に尋ねた方が良くないか?
0843デフォルトの名無しさん
2010/07/16(金) 16:34:36最も限りなく正解に近い
0844デフォルトの名無しさん
2010/07/16(金) 16:52:07Cに満たない言語も多いので油断は禁物です
0845デフォルトの名無しさん
2010/07/16(金) 20:21:03「::」も無いし
0846デフォルトの名無しさん
2010/07/17(土) 01:01:17お前らちゃんと使ってるか?
0847デフォルトの名無しさん
2010/07/17(土) 01:02:280848デフォルトの名無しさん
2010/07/17(土) 01:04:13Data::Dumper;
0849デフォルトの名無しさん
2010/07/17(土) 01:13:200行のテンプレートエンジン使ってろ!
0850デフォルトの名無しさん
2010/07/17(土) 16:25:14どう書けばいいんですかね?
そしてfirefoxのクッキーが見当たらない場合は処理しないようにしたい
0851デフォルトの名無しさん
2010/07/17(土) 16:31:530852デフォルトの名無しさん
2010/07/17(土) 16:42:180853デフォルトの名無しさん
2010/07/17(土) 17:15:54具体的にコード書いてみて
0854デフォルトの名無しさん
2010/07/17(土) 17:52:040855デフォルトの名無しさん
2010/07/17(土) 17:55:530856デフォルトの名無しさん
2010/07/17(土) 18:26:57やる気が出ないので却下
XMLを適当にパースすればいいだけだろJK
0857デフォルトの名無しさん
2010/07/17(土) 19:00:52ある意味XMLより簡単だな
プロファイルフォルダを探す方が面倒なくらいだ
0858デフォルトの名無しさん
2010/07/17(土) 19:27:42パースする必要すらないじゃねえか
0859デフォルトの名無しさん
2010/07/17(土) 20:11:160860デフォルトの名無しさん
2010/07/17(土) 22:49:36具体的に教えてもらえるとありがたい・・
0861デフォルトの名無しさん
2010/07/17(土) 23:07:21割り込みルーチンでスリープモードに移行させる
0862デフォルトの名無しさん
2010/07/18(日) 02:12:450863591
2010/07/18(日) 08:25:55これじゃダメなん?
0864デフォルトの名無しさん
2010/07/18(日) 09:53:56ありがとう。さっぱりわからないから調べてみる
0865デフォルトの名無しさん
2010/07/18(日) 12:08:57なんかいい代替手段はないでしょうか?
リレーションはなくてもなんとかなるので、DB_Fileを検討しているのですが、気になるのが
SELECT * FROM t ORDER BY key LIMIT 10;
みたいなことをするには
foreach $key ( sort keys %hash )
しかないですよね?
レコード数が数万になるとちょっと嫌な感じがするのですが。
0866デフォルトの名無しさん
2010/07/18(日) 12:15:39おお。そんなものがあったとは
どうもありがとう
0867デフォルトの名無しさん
2010/07/18(日) 12:35:50最初からDBをわければよくね?リレーションないんでしょ?
0868デフォルトの名無しさん
2010/07/18(日) 12:59:10MySQLみたいなデーモン型でポートを専有するタイプは無理だろうけど。
VMwareか何でレンタルサーバと同じOS環境を作ってSQLiteをインストールして、そのバイナリをレンタルサーバにアップロードすればOK...と思うよ。
0869865
2010/07/18(日) 13:17:371000レコードぐらいずつDBを分けるということですか?
それは管理が非常に大変かつ不整合が生じやすいような。
1レコード1DBだと、主キーをファイル名にして、レコード内容をテキストファイル
にするのと大して変わらないですよね。その方が編集・閲覧は簡単だし。
なので、DB_Fileって便利なように思えて使える局面がかなり限定される気がしています。
>>868
古いレンサバなのでDBD::SQLiteが入ってないんです。
原理的には可能でしょうが、セグフォりそうで…
0870デフォルトの名無しさん
2010/07/18(日) 13:28:54http://www1.axfc.net/uploader/Sc/so/135047.txt
0871デフォルトの名無しさん
2010/07/18(日) 14:02:24それ見せてどうしようって言うんだ。
あれこれ悩んでごまかし技使うよか
サーバ代上乗せしてSQLマトモに使えるのにすりゃいいじゃん
0872デフォルトの名無しさん
2010/07/18(日) 14:09:32URLが変わるのヤダヤダとか色々事情があるんだよたぶん
0873デフォルトの名無しさん
2010/07/18(日) 14:45:33そしてスレ違いだ。
テンプレぐらい見ろクズ。
0874名無し
2010/07/18(日) 14:56:10Perlコミュニティの人たちは、率直にいって、地球上で最も親切な人たちである。
Perlコミュニティの人たちは、率直にいって、地球上で最も親切な人たちである。
Perlコミュニティの人たちは、率直にいって、地球上で最も親切な人たちである。
Perlコミュニティの人たちは、率直にいって、地球上で最も親切な人たちである。
Perlコミュニティの人たちは、率直にいって、地球上で最も親切な人たちである。
Perlコミュニティの人たちは、率直にいって、地球上で最も親切な人たちである。
Perlコミュニティの人たちは、率直にいって、地球上で最も親切な人たちである。
Perlコミュニティの人たちは、率直にいって、地球上で最も親切な人たちである。
Perlコミュニティの人たちは、率直にいって、地球上で最も親切な人たちである。
Perlコミュニティの人たちは、率直にいって、地球上で最も親切な人たちである。
Perlコミュニティの人たちは、率直にいって、地球上で最も親切な人たちである。
0875デフォルトの名無しさん
2010/07/18(日) 14:57:23テンプレを読まない厨房に厳しい。
0876デフォルトの名無しさん
2010/07/18(日) 14:59:58「自分でぐぐったらすぐ答えが出るのに、わざわざなんで質問するの?死ぬの?」
とか言う人たちでもある
0877デフォルトの名無しさん
2010/07/18(日) 15:01:390878デフォルトの名無しさん
2010/07/18(日) 15:20:170879デフォルトの名無しさん
2010/07/18(日) 15:28:550880デフォルトの名無しさん
2010/07/18(日) 15:29:51英語にしてからぐぐるといいよ
0881デフォルトの名無しさん
2010/07/18(日) 16:23:01その「大して変わりない」方法でまずは実装したらどうだろう。
検索処理部分なんてブロック化してメインから追い出せるんだから
あとでSQL使うように直してもそこだけ差し替えが利くだろ。
0882デフォルトの名無しさん
2010/07/18(日) 18:17:05好きな音楽 ジャズとかクラシック
好きな酒は黒ビールとかほざいてる大人病だろバカが!
0883デフォルトの名無しさん
2010/07/18(日) 18:24:07直列な処理でいいなら
LWPのリクエストをタイムアウトさせる定番処理を応用すればいいんじゃね
こんなやつ
my $TIMEOUT = 60 * 5;
eval {
local $SIG{ALRM} = sub { die 'timeout'; };
alarm $TIMEOUT;
$response = $ua->request($request);
alarm 0;
};
unless ($@ =~ /timeout/) {
if ($response->is_success) {
return $response->content;
}
}
0884デフォルトの名無しさん
2010/07/18(日) 20:58:47こういう高度なコードが考えられる
ラベルTIMEOUTからifまでが目的のブロック
do-whileでも問題なし
好みでsleepの秒数を延ばしてもいい
sleepが無いと恐ろしいことになる
main () ;
sub main {
my $min = 1 ;
my $timeout = time + 60 * $min ;
TIMEOUT: {
print "sleep.\n" ;
sleep 5 ; # 5sec.
} if ( time < $timeout ) { goto ("TIMEOUT") ; }
return 1 ;
}
0885865
2010/07/18(日) 22:40:13Perlでの解法はないかと聞いているんだ。この馬鹿どもが。
0887デフォルトの名無しさん
2010/07/18(日) 22:46:25BDBならある意味キーはソート済みなので
ソートに時間かかるとかそういうことはないです。
なので数万件程度なら別に大したことはないです。
0888デフォルトの名無しさん
2010/07/18(日) 22:49:200889デフォルトの名無しさん
2010/07/18(日) 22:52:14>>884
丁寧にコードまで考えてもらって感謝です。ありがとう
参考にして組み込んでみます。
0890デフォルトの名無しさん
2010/07/19(月) 00:11:58> CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
> CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。
消え失せろゴミ
0891デフォルトの名無しさん
2010/07/19(月) 00:19:38お前が消えろよ・・・
0892デフォルトの名無しさん
2010/07/19(月) 00:21:37俺の聞きたいのはそれじゃねえ
日本語分かってるのかお前ってやつ
0893デフォルトの名無しさん
2010/07/19(月) 00:22:36>>891 逆上すんなゴミ
0894デフォルトの名無しさん
2010/07/19(月) 00:49:300895デフォルトの名無しさん
2010/07/19(月) 01:08:170896デフォルトの名無しさん
2010/07/19(月) 01:27:380897デフォルトの名無しさん
2010/07/19(月) 01:30:420898デフォルトの名無しさん
2010/07/19(月) 01:33:550899デフォルトの名無しさん
2010/07/19(月) 12:08:360900デフォルトの名無しさん
2010/07/19(月) 12:25:22そのパッケージで苦労しているだが
0901デフォルトの名無しさん
2010/07/19(月) 12:28:330902デフォルトの名無しさん
2010/07/19(月) 12:40:16早くゲット出来るモジュールってなにかな?
HTTP::Liteあたり?
0903デフォルトの名無しさん
2010/07/19(月) 13:18:34HTTP::Liteでもいいんじゃね。
軽くて速いかどうかは、アクセスするサーバーによる
から、なんとも言えん。
LWP::SimpleとかLWP::UserAgentでも変らんと思う。
好きなの使え
0904デフォルトの名無しさん
2010/07/19(月) 13:22:14ありがとう
速度にかわりがないならインストールが面倒だから
LWP::Simpleあたりでやってみようかな
0905デフォルトの名無しさん
2010/07/19(月) 14:02:23一番ラクな方法あるならperlに限らずコレを勧める。
0906デフォルトの名無しさん
2010/07/19(月) 14:10:11いいよな。うちは標準のすらまったく使えないんだが、私は元気です。
0907デフォルトの名無しさん
2010/07/19(月) 14:14:38ttp://d.hatena.ne.jp/tokuhirom/20100601/1275352858
0908デフォルトの名無しさん
2010/07/19(月) 14:34:450909デフォルトの名無しさん
2010/07/20(火) 02:55:27URI::Fetch
0910デフォルトの名無しさん
2010/07/20(火) 13:32:55ttp://d.hatena.ne.jp/tokuhirom/20100719/1279550759
0911デフォルトの名無しさん
2010/07/20(火) 22:59:08Perlから、現在既に実行中のfirefoxのウィンドウに
新しいタブでページを開くにはどうすれば良いのでしょうか?
OSはMacOSX Snow Leopard、Perlはv5.10.0です
0912デフォルトの名無しさん
2010/07/21(水) 11:51:52WWW::Mechanize::Firefox
インストールの方法とか使い方は自分で探してね。
0913デフォルトの名無しさん
2010/07/21(水) 19:28:15モジュールなしで行う方法があれば一番良いのですが、
なければそれを使わせていただきます
0914デフォルトの名無しさん
2010/07/21(水) 21:34:42速度的にも
0915デフォルトの名無しさん
2010/07/21(水) 21:47:25なるべくなら実行ファイルを叩いて開けるならそれが一番良いのです
今までWindowsのみで使われているプログラムで、
Windowsだと問題ないようなのですが、
Macで動かしてみると二重起動できないとか言われてしまいまして・・・
モジュール使うしかないようなら
実行ファイルの代わりにモジュールを使うこともできる仕様を追加するつもりなので
それでも問題ないと言えば問題ないのですが、
なるべくなら仕様変更が小さい方がいいかなと
まあ仕事ってわけじゃないので(オープンソースのツールの改良)
仕様変更しまくって怒られるわけではないのですが
0916デフォルトの名無しさん
2010/07/21(水) 22:46:56https://developer.mozilla.org/ja/Command_Line_Options#Mac_OS_X
https://developer.mozilla.org/ja/Command_Line_Options#-new-tab_URL
0917デフォルトの名無しさん
2010/07/21(水) 23:09:29ttp://brunhild.sakura.ne.jp/up/src/up454545.png
でも確かにPerlはあまり関係ないかもしれませんね
Firefoxスレとかで聞く事にします
0918デフォルトの名無しさん
2010/07/21(水) 23:13:180919デフォルトの名無しさん
2010/07/21(水) 23:21:56ttp://brunhild.sakura.ne.jp/up/src/up454549.png
0920デフォルトの名無しさん
2010/07/22(木) 00:07:36久しぶりにObjective-Cやったけど
メモリ管理とかほんとくそ
メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)
メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)
メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)
メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)
メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)
メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)メモリ管理やりたくないよ〜(泣)
0921デフォルトの名無しさん
2010/07/22(木) 00:36:31perl星の敵は楽勝だろうとなめていた
この星では通訳者がメモリ管理してくるし・・・すみごこちがよかった
そして地図を片手にwebアプリの洞窟へむかつのであった
途中には $や@,%みたいな意味分からないオブジェクトが散乱していた
向かう途中 use strict + use warning兄弟というやっかいものが参上してオレの行く手をはばんだ・・・
オレは必死にアロー演算でつきまくって攻撃してもやつらの 怒鳴り声はとまらない
myとかいわないと 自分の名前を名乗れとかほざかれて怒鳴られて殴られる
この兄弟を無事に倒すと楽な道に進めるが
こいつらを相手にしないと、過酷な道で遠回りになるときいた・・・
そして歩き続けた
途中でCPANというお店に立ちよって武装するが、LWPが人気なのでそれをかっといた
さまよってるうちに、製作所みたいな場所にたどりついた・・・
なんかオブジェクトといってモノをつくっている
オレ「なにつくってるの???」
???「newつくってんだよ・・・」
オレ「そんなの作る必要ない そこらへんにおちてる」
???「この星ではnewは自作しなくちゃいけないんだよ・・・」
オレはよくわからずとりあえず webアプリの洞窟まですすんでいった・・・
この国はおかしいときずきはじめた・・・道ばたで土下座してる人がいた さっきの街でみかけた
???という金の仏像の方角をむいて 皆おがんでいるのである
薄々きがつきはじめた 宗教なんじゃね?って
なんかcatalystとsledgeっていう伝説の剣があるらしくて
それは困難をくぐりぬけた者しか抜けないのであるときいた
オレはそれを抜こうとしたが ピクりともいわなかった
もうオレはつかれたから宿でねることにした
0922デフォルトの名無しさん
2010/07/22(木) 00:50:20ぜひ、続きをお願いします。
0923デフォルトの名無しさん
2010/07/22(木) 10:39:47わっふるわっふる
0924デフォルトの名無しさん
2010/07/22(木) 10:55:06ふと思った。
この星にきてまだ1日目 自分が最初にいった C星にいたときとの重力が違いすぎて体が弱くなった
C星の時に、宇宙旅行でObjective-C星の旅行プランを立てて雑誌等を見てみて 良いなーって思っていたのであった
っで2年前に、Objective-C星に言ったときは、オブジェクト指向という街の方針をよくよんでなくて住み心地がわるかったのである・・・
その理由は家にすんでいた時に、その星はおかしく 夜中になると毎日dealloc大魔神という破壊神が家を壊しにくるのだ・・・
だからretainという魔法を使って星の住民は毎晩家をまもっている そして朝に魔法を解除しないと外出ができなくなる
そのためにreleaseという魔法をつかって結界を破壊するのである。 そんなめんどくさい星にはいたくない!という過去の事を思い出した
悩んでる結果 Perl星への旅行が決まったのである、その結果が今である。
今現在はまだ慣れてないだけであって苦労している。そしてwebアプリの洞窟を目指している途中 MySQL大図書館という所に立ち寄る
そこは膨大な本が置いてあり、一人の魔法使いらしき男が「select! insert!」などと杖をもって叫んでいるのである
オレ「ほ〜〜〜こうやって本を魔法であやつっているんだ」と思いみていた
そしたら横にいる戦士っぽい人が「param! fetch! サニタイジング剣法!!」といって本をばしばし切り裂いている
すごいと思い話かけてみると、「XSSって言う危険な生物が入り込んでる場合があるからね」1回本を切り裂いてチェックしてるんだよ
戦士「もしかして、君はwebアプリの洞窟にいくのか?」
オレ「うん」
戦士「よかったらこれをもってくんだ mod_perl2のお守りだ これをもってれば洞窟の強力な磁場に耐えられる もってないと体が張り付いて重くなるんだ」
戦士「あとこれもだ DBIの剣 CGI.pmの盾 MySQL図書館の受信機 これくらいあれば安心して探索くらいはできるだろ 健闘を祈る」
0925デフォルトの名無しさん
2010/07/22(木) 11:07:52???「我はハッシャー・・・ お前がここを通るなら我はお前を倒す」
オレ「さっきもらった 武器があるからいける!!」
オレ「hassher?attack=9999999&fireelement=100&send='%20%00login.html」
ハッシャー「そんなもの効かないよ バリバリ はははははは!!!」
オレ「!!!・・・」
???「しねえ!!ハッシャースライス!!! ブハンブハンナウブハン!! (岩がまっぷたつ」
オレ「なんだあれは?! やばいほんとに よけないと」
と思って避けたが 足にヒットしで大けがをして動けなくなってしまった オレはwebアプリ洞窟にいくまえに訓練場にいっておけばよかったと後悔して
ハッシャー「氏ね!」 おれは死を覚悟した・・・
そのとき!! ???「くらえ・・・」
???「念のため・・・$SIG[ALRM] alerm 20 xxxxx」
???「killall -hasher・・・ rm -rf ps aux 完了」
ハッシャー「うわああああああ!!グアアアアア!体が やめろ・・おまえは・・・」
???「PSGI PSGI・・・ node.jsハッ!!!」
ハッシャー「苦しい 毒がからだに・・・」
???「これで終わりだな・・・」
ハッシャー「うははははお前もこれで道ずれだ、ハッシュ解放・・・」 ハッシャーの腹から沢山のモンスターが溢れかえった
???「20秒経った」といったあと 一気に沢山のモンスターが消えていく
オレ「助けてくれてありがとう」と言おうとしたら姿を消していた
近くにいた老人「あの人たちはPerl大国ジパンーグを守る JPAギルドの聖騎士たちじゃよ そりゃ強い その強さは・・・」
0926デフォルトの名無しさん
2010/07/22(木) 14:36:530927デフォルトの名無しさん
2010/07/22(木) 17:21:000928デフォルトの名無しさん
2010/07/22(木) 17:24:16気がついたらパソコンの前にいた、今までのは夢だったのろうか いやちゃんと痛みもあった
時計をみてみたが 全然時間が経っていなかったのである。
とりあえず気にせず Perlの勉強をしようとしたら 本が見当たらない
オレ「じゃあ インターネットでPerlしらべるか〜」
カタカタ・・・
オレ「あれ?Perlの情報がヒットしない でてくるのは真珠とかだけだ プログラミング perlでもでない」
なんかおかしい 異変にきずいた JPAのサイトを見に行ってみたがそんなサイトは無かったのである
オレ「もしかしたら・・・ この世からPerl言語が消されたのか!!?」
オレ「夢らしき世界の最後の時に、???と名乗る人物が「この星には未来がない 立ち去れ・・・」といっていたのを聞いた気がする」
消えてるっておかしいだろ?!そんなことはあるはずない と思いツイッターでPerlをやっている人のページをみた
口をそろえてこういっている
「Python最高!」といっている これは何かの間違え
ツイッターでPerlはどう?と質問したら Perlってなに?と回答される
オレはおかしさのあまりIRCにいった そしたら
「俺も変な夢をみた Perl星という世界で、敵に襲われていた旅人を助けた」
「Perlがこの世から消されているきがするんだけど」と会話しているのがきこえた」
どうやら記憶がある人たちがいるようだ でも問題は、どうやって記憶を取り戻すか
この星に言った人たちはPerlプログラミングの作業中に突然意識を失って perl星へいったといっている
pythonとの因果関係 なにかが裏でこの世界をpython色で染めようとしているのかもしれない
そして俺ふくめperlコミュニティの人々は立ちあがる・・・
0929デフォルトの名無しさん
2010/07/22(木) 17:39:170930デフォルトの名無しさん
2010/07/22(木) 19:34:420931デフォルトの名無しさん
2010/07/22(木) 19:55:380932デフォルトの名無しさん
2010/07/22(木) 21:02:39実用Perlプログラミングの次の版に、息抜きのページとして、入れてもらおうw
0933デフォルトの名無しさん
2010/07/22(木) 21:05:390934デフォルトの名無しさん
2010/07/22(木) 21:27:32待ち合わせはMySQL図書館にした・・・
よしパソコンの前で勉強を開始・・・ そしてだんだん気を失っていった
オレ「あれ?・・・ここはどこだ 凄いグルグルまわっている 何かがおかしい」
オレ「break!!!」
回転がとまった・・・
しかし、そこは一面真っ暗で何も見えない グォオオオオオ・・・・と何かのうめき声が聞こえてくる
怖くなったのでひたすらおびえながらかがんでいた。でも早くIRCの人たちを捜さないとと困り果てていた
っとその時、突然誰かの声が聞こえた
???「取りあえずここは居てはまずい 他の場所へいこうか 少し目をつぶってくれ」
???「go to MySQL Library・・・」
オレ「すげえワープだ こんな能力があるとは・・・」
アーヘン「自己紹介遅れました 私の名前はアヘン IRCからきました 一応魔法使いです」
オレ「よろしく 俺は戦士みたい・・・魔法とかあんまつかえないし」
アーヘン「では MySQL図書館へと参りましょう」
そしてMySQL図書館へ・・・
アーヘン「なんていうことだ 図書館が崩壊している これはどういう事だ」
オレ「なんか地面や空間が歪んで見える・・・」
ジパンーグ兵「旅の人ですか?! 危ないです!! 向こうの方で巨大なメモリリークが怒っています!!逃げてください!」
オレ「メモリリーク?この星ではどんなかんじなんだろう・・・」
ジパンーグ兵「この世界では地面、物体などが全てメモリという見えない空間に格納されてできています メモリリークが起きたらそこの空間が崩壊しはじめ異次元へと飲み込まれてしまいます!!」
オレ/アーヘン「?!」
アーヘン「このままではまずい 一時テレポートしよう・・・ 目をつぶって・・・ go to mixser・・・」
アーヘン「おかしい 魔法が使えない どういうことだ!!!!!!」
ジパンーグ兵「もう終わりです・・・うああああ・・」
0935デフォルトの名無しさん
2010/07/22(木) 21:40:19オレ「やばい・・・ 解放!解放!」
だめだ全然解放されない 力が足りなさすぎる
アーヘン「逃げた方が良い!!」
オレ「飲み込まれる!!! うあああああ!!」
誰かの声「まだ死んではいかん・・・グルウルルル・・・ お前に力をやろう 逃げろ お前は臆病者だ!!」
オレ「だれ?だれなんだよ!! なんだなんだ力が湧いてくる なんだこれは 体が再生している 早く逃げないと!!!」
シュルルルルルルル・・・ドロンッ
伝説の魔術師「dmesg... mysqlLibrary near memory Liberating!! kill 112」
伝説の魔術師「とりあえず治まりましたね topでプロセスを監視していたんですがメモリの異常事態にきずいてやってきました」
オレ/アーヘン「あなたは?・・・」
伝説の魔術師「私はミーガワ ではごきげんよう」
ドロンッ・・・
近くに居た老人「フォフォフォフォ・・・彼もここまで成長するとはの」
オレ「あなたはさっきも居た 誰なの?」
ンケト大王「フォフォフォフォ 気にするな ワシは ンケトワールドの元大王でな ワシの魔法はもう古いのじゃよ」
アーヘン「あなたがあの有名なンケトワールドの大王様? 私はあなたのweb魔法を参考にして学んできました」
アーヘン「あえて光栄です!」
ンケト大王「ッフォフォフォフォ まあガンバリたまえ 君等にCGIの大魔法を与えよう・・・ アンガタエ!!」
ンケト大王「param escape redirectなどが使えこなせるはずじゃ・・・」
オレ/アーヘン「ありがとう!」
ヒヒーン!!パカパカ 馬の走る音が聞こえる
JPA隊長「遅かったか・・・ もう解決していたのか」
mixser隊長「やつの仕業か」
ライブア隊長「ああ・・ やつだな」
続く・・・
0936デフォルトの名無しさん
2010/07/22(木) 22:11:33調子のんな
0937デフォルトの名無しさん
2010/07/22(木) 22:14:11Perl初心者がたどるであろう部分を的確に表現していると思う。
0938デフォルトの名無しさん
2010/07/22(木) 22:14:570939デフォルトの名無しさん
2010/07/22(木) 22:20:050940デフォルトの名無しさん
2010/07/22(木) 22:20:21面白いか面白くないかも関係無く、単なるスレ違い。又は板違い。
要するに、 VIP でやれ。
0941デフォルトの名無しさん
2010/07/22(木) 22:29:46Perlについて
http://pc12.2ch.net/test/read.cgi/tech/1217851121/
でやってくれ
0942デフォルトの名無しさん
2010/07/23(金) 10:27:580943デフォルトの名無しさん
2010/07/23(金) 10:47:480944デフォルトの名無しさん
2010/07/23(金) 10:50:56てめえみたいなクソガリチビはゴミみたいな発想しかできねえんだろ?
頭湧いてんのかおまえw死んじまえよザコ
なあ?てめえ書いてみろよ雑魚
おいクソガリちゃんよクソみたいなPerl書いてんだろゴミ
てめえのクソコードなんてゴミPerl書いてるお前にNGされる筋合いはねえんだよざこ
ケトルベル60kgで頭ぶっ叩かれたら死にそうなクソガリクソチビは死んどけ
0945デフォルトの名無しさん
2010/07/23(金) 20:13:300946デフォルトの名無しさん
2010/07/23(金) 21:28:140947デフォルトの名無しさん
2010/07/23(金) 23:36:240948デフォルトの名無しさん
2010/07/24(土) 00:29:35切ない
1 悲しさや恋しさで、胸がしめつけられるようである。やりきれない。やるせない。「―・い思い」
>>945 946 947
君たちスレチ
0949デフォルトの名無しさん
2010/07/24(土) 01:02:53日本語の資料は少ないね・・・。スクリーンショットぐらいかな
0950デフォルトの名無しさん
2010/07/24(土) 02:19:46もしかしてこれってcookies.txt のfox2しか対応してない?
3のcookies.sqlite だとダメかな
0951デフォルトの名無しさん
2010/07/24(土) 04:11:52説明読めばちゃんと対応してるの明らかに分かるだろ
0952デフォルトの名無しさん
2010/07/24(土) 12:55:170953デフォルトの名無しさん
2010/07/24(土) 17:10:03でcookies.sqlite をやってみたけど挫折。難しいなこれ
日本語サイトも殆どやっている人いないだけある
0954デフォルトの名無しさん
2010/07/24(土) 17:26:500955デフォルトの名無しさん
2010/07/24(土) 17:32:25WWW::Mechanize::Firefoxで簡単スクリーンショット
WWW::Mechanize::Firefoxってもしかしてmozreplと組み合わせてつかうもの?
0956デフォルトの名無しさん
2010/07/24(土) 17:34:070957デフォルトの名無しさん
2010/07/24(土) 17:38:38どおりで動かないはずだ
0958デフォルトの名無しさん
2010/07/24(土) 17:49:53http://d.hatena.ne.jp/fuba/20070314/1173858739
わずかな日本語で書かれたサイトを見ても
みんなfirefox2.0用の奴なんだよな・・・
0959デフォルトの名無しさん
2010/07/24(土) 20:00:19以下のようにすると、ARRAY(0x1fa7d48)と表示されて、
サイズ(要素数)が取得できませんでした。
取得する方法を教えてください。
$arrayRef = [1, 2, 3];
print scalar $arrayRef;
0960デフォルトの名無しさん
2010/07/24(土) 20:12:180961デフォルトの名無しさん
2010/07/24(土) 20:14:24それもやってみたのですが、0と表示されてしまいます。
0962デフォルトの名無しさん
2010/07/24(土) 20:15:22勘違いしてました。
無事、取得出来ました。
ありがとうございます。
0963デフォルトの名無しさん
2010/07/24(土) 22:29:43ちゃんと動かないことがある
0964デフォルトの名無しさん
2010/07/26(月) 16:53:070965PHP最強戦士
2010/07/26(月) 16:59:130966デフォルトの名無しさん
2010/07/26(月) 23:59:320967PHP=クソ(笑)
2010/07/27(火) 00:36:31と表記くださいますよう、宜しくお願い申し上げます。
-- http://an.to/perl_tm
こいつなんですか?教えてください!!
0968デフォルトの名無しさん
2010/07/27(火) 00:41:13こいつだけは人生破滅させてやろうと思った。
0969デフォルトの名無しさん
2010/07/27(火) 00:43:56……殺したい
死ねばいいのに
0970デフォルトの名無しさん
2010/07/27(火) 01:05:040971デフォルトの名無しさん
2010/07/27(火) 01:27:570972デフォルトの名無しさん
2010/07/27(火) 01:59:59じぶんがうんこにされたよ!
ハ_ハ
('(゚∀゚∩ されたよ!
ヽ 〈
ヽヽ_)
0973デフォルトの名無しさん
2010/07/27(火) 05:19:42こいつの名前を商標登録してやりたいわ
0974デフォルトの名無しさん
2010/07/27(火) 07:42:36以降全員スレチしね^^
940 :デフォルトの名無しさん:2010/07/22(木) 22:20:21
ここは質問箱。
面白いか面白くないかも関係無く、単なるスレ違い。又は板違い。
要するに、 VIP でやれ。
おめえもスレチだろ?しねよ 悔しいのか?凄い書き手が誕生して御前くやしがてんだろ?
そしてしね
0975デフォルトの名無しさん
2010/07/27(火) 08:13:18早くこのスレ潰れないかな
0976デフォルトの名無しさん
2010/07/27(火) 14:29:00オナれ
0977デフォルトの名無しさん
2010/07/29(木) 13:43:44PerlでSQLiteを使い、ログを取るというものを作っています。
PerlでData::Dumperを使い、そのDumperの出力をレコードに追加したいのですが、
my @Str = Dumper ( $entity);
my $insertLog = "insert into lLog ( time, log) values ( $time, \@Str)";
$timeは追加されるのですが、@Strがnullになっています。
どのようにすれば挿入することが出来ますでしょうか?
0978デフォルトの名無しさん
2010/07/29(木) 14:09:101秒間に1件以上の投稿があった際に問題が起きてしまいます。
この問題は一般的にはどうやって解決しているのですか?
0979デフォルトの名無しさん
2010/07/29(木) 14:13:160980デフォルトの名無しさん
2010/07/29(木) 14:31:130981デフォルトの名無しさん
2010/07/29(木) 14:31:59CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://pc11.2ch.net/php/)
0982PHPオタク
2010/07/29(木) 15:30:11ぼくみたいなばかでもCGIのくべつつきますよ
ぼくは30ねんかんPHPつかってるにーとですが
0983デフォルトの名無しさん
2010/07/29(木) 16:22:02while ( -e $file ) { ファイル名変更処理 };
とか
alarm前提で
1秒に数十回アクセスあるんだよ! とかならごめん。俺専門家じゃないからわかんね
0984デフォルトの名無しさん
2010/07/29(木) 19:58:47それじゃ同一IPで二回目以降投稿出来ないだろ・・・
0985デフォルトの名無しさん
2010/07/29(木) 20:08:33受付順でpopすりゃいいじゃん
0986デフォルトの名無しさん
2010/07/29(木) 20:25:500987デフォルトの名無しさん
2010/07/30(金) 02:48:12SQLクエリに直接変数を代入するのはやめれ
プレースホルダを使おう
my $sth = $dbh->prepare('INSERT INTO lLog (time, log) VALUES (?, ?)');
$sth->execute($time, \@Str);
あと\@Strだと参照を挿入することになるけどいいの?
join "\n", @Strの間違いじゃなくて?
0988デフォルトの名無しさん
2010/07/30(金) 05:54:22この問題は
1)Perlは秒単位でしか時間が取れないのか?
2)大量に作成するファイル名、重複を避けるにはどうする?
と分解できるから、入り口がCGIでもPerlの処理の話とみなせるだろ
俺は見てて参考になったぞ
0989デフォルトの名無しさん
2010/07/30(金) 08:02:04関係ない
CGIならwebプログラミング板
0990デフォルトの名無しさん
2010/07/30(金) 08:43:09use Hogehoge; するのが重いモジュールがあって、必要な時だけuseしたいのですが、どうやったらいいのかわかりません。
if (条件) { use Hogehoge;
}
とすると、条件によらず Hogehoge が読み込まれてしまうようです。
0991デフォルトの名無しさん
2010/07/30(金) 09:03:00eval 'use Hogehoge;';
}
0992デフォルトの名無しさん
2010/07/30(金) 10:55:21それで行けました。ありがとうございます。
もうひとつ質問ですが、Hogehogeがuseされたかどうかを調べる方法はありますか。
今は
unless (defined($Hogehoge::varname)) { eval 'use Hogehoge;';
}
としていて、これはこれでうまくうごくのですが、もっとうまいやり方があれば教えてください。
0993デフォルトの名無しさん
2010/07/30(金) 11:09:11とか
0994デフォルトの名無しさん
2010/07/30(金) 11:56:22できました。ありがとうございます。
0995デフォルトの名無しさん
2010/07/30(金) 12:01:05%INCのキーはファイル名ですが、ファイル名の区切りはどのプラットフォームでも「/」でしょうか。
今は unless ($INC{'Foo/Bar/Baz.pm'}) { eval 'use Foo::Bar::Baz;'; } としているんですけど、
%INC のキーに指定している Foo/Bar/Baz.pm が、他のプラットフォームでも使えるのかどうか心配です。
よろしくお願いします。
0996PHPオタク
2010/07/30(金) 13:42:090997PHPオタク
2010/07/30(金) 13:43:310998PHPオタク
2010/07/30(金) 13:45:290999PHPオタク
2010/07/30(金) 13:46:141000PHPオタク
2010/07/30(金) 13:46:5410011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。