Perlについての質問箱 42箱目
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2009/11/02(月) 14:26:31"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
● 2009/11/02 現在の最新版: 5.10.1
▼ 前スレ
Perlについての質問箱 41箱目
http://pc12.2ch.net/test/read.cgi/tech/1249581780/
リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-6 あたり
0002デフォルトの名無しさん
2009/11/02(月) 14:27:32Perl プログラミング講座: 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デフォルトの名無しさん
2009/11/02(月) 14:28:13CPAN.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デフォルトの名無しさん
2009/11/02(月) 14:28:53# このレスは、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デフォルトの名無しさん
2009/11/02(月) 14:29:351 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デフォルトの名無しさん
2009/11/02(月) 14:30:1621 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デフォルトの名無しさん
2009/11/02(月) 15:38:4141 http://pc12.2ch.net/test/read.cgi/tech/1249581780/
0008デフォルトの名無しさん
2009/11/02(月) 19:15:490009デフォルトの名無しさん
2009/11/03(火) 13:43:090010デフォルトの名無しさん
2009/11/05(木) 13:32:33やっぱり、Perl 6が出てからしたほうが無難ですか?
0011デフォルトの名無しさん
2009/11/05(木) 13:49:58> 今からPerlをするのって無駄ですかね?
いや、別に。
> やっぱり、Perl 6が出てからしたほうが無難ですか?
キニスンな
0012デフォルトの名無しさん
2009/11/05(木) 18:58:10同じ名前がついてるのが不思議なレベル
0013デフォルトの名無しさん
2009/11/05(木) 23:37:34おまる!
0014デフォルトの名無しさん
2009/11/06(金) 17:07:27強制終了時にも呼ばれますか?
0015デフォルトの名無しさん
2009/11/06(金) 18:11:260016デフォルトの名無しさん
2009/11/08(日) 10:53:000017デフォルトの名無しさん
2009/11/08(日) 11:02:21「さぶ」は、日本で薔薇族に続き出版された男性同性愛者向け雑誌(ゲイ雑誌)である。
SMを中心とした雑誌アブハンター増刊号として、サン出版より1974年11月に創刊。
当初3号まで隔月発行であったが、1975年6月号(4号)より月刊化された。
創刊編集長は、有名なサブカル編集者である櫻木徹郎。
0018デフォルトの名無しさん
2009/11/08(日) 11:05:240019デフォルトの名無しさん
2009/11/08(日) 11:07:110020デフォルトの名無しさん
2009/11/08(日) 11:28:26だれに何かの略だというデタラメ吹き込まれたんだ?
0021デフォルトの名無しさん
2009/11/08(日) 11:57:06だれにsubとstrを分けるというデタラメ吹き込まれたんだ?
0022デフォルトの名無しさん
2009/11/09(月) 01:25:530023デフォルトの名無しさん
2009/11/09(月) 09:35:170024デフォルトの名無しさん
2009/11/09(月) 13:59:485と6は殆ど互換性が無いらしい。
だからPerl 6に5の互換モードの搭載を検討してるっぽい。
俺は試作品とか大量に作ってるから是非搭載して欲しいな・・・
また覚えるまで時間がかかりそうだし。
0025デフォルトの名無しさん
2009/11/09(月) 14:51:14>>24
Larry Wal 本人が解説してくれているけどな
ttp://www.nicovideo.jp/watch/sm4503164
0026デフォルトの名無しさん
2009/11/09(月) 15:57:450027デフォルトの名無しさん
2009/11/09(月) 16:39:03<>演算子と同等で、ハッシュも使える関数はありますでしょうか?
my $in = $fh->{handle}; <$in>; と一旦、変数に格納してから使うしかないでしょうか?
my $fh = create_fh( 'data.txt' );
while ( my $line = < $fh->{handle} > ) {
・・・
・・・
}
close $fh->{handle};
sub create_fh {
my $file = shift;
open my $fh, '<', $file or die $!;
return { file => $file, handle => $fh };
}
0028デフォルトの名無しさん
2009/11/09(月) 17:06:44readline
0029デフォルトの名無しさん
2009/11/09(月) 17:22:21�d
うまくいきました。
0030デフォルトの名無しさん
2009/11/10(火) 02:48:49うまく置換されないのですがどのようにすればよいのでしょうか
$string =~ s/$buf//;
0031デフォルトの名無しさん
2009/11/10(火) 02:52:420032デフォルトの名無しさん
2009/11/10(火) 13:15:26quotemata $buf;
0033デフォルトの名無しさん
2009/11/10(火) 13:43:20何でもかんでもカッコ付けまくるカッコ病か、おまいは。
こういうヤツってさ、ファイルをコピーするだけでも
C:> copy (hoge.txt hoge.bak)
みたいにカッコつけるんかな。
0034デフォルトの名無しさん
2009/11/10(火) 13:50:060035デフォルトの名無しさん
2009/11/10(火) 14:05:330036デフォルトの名無しさん
2009/11/10(火) 14:59:50$string =~ s/\Q$buf//;
0037デフォルトの名無しさん
2009/11/10(火) 17:45:060038デフォルトの名無しさん
2009/11/10(火) 19:57:02>>32
>>36
ありがとうございます
0039デフォルトの名無しさん
2009/11/11(水) 22:02:48という文字列が有ったとして
文字列に現れる最後のbから一番近いcまでの文字を抜き出すにはどのような正規表現が良いのでしょうか
cに一番近いbという感じで考えたのですが、c以降にbがあるのならばともかく、c以前にbが有り、それがcにとっての最短マッチである場合の表現がわかりません
0040デフォルトの名無しさん
2009/11/11(水) 22:34:370041デフォルトの名無しさん
2009/11/11(水) 22:48:04こんな簡単な記述で出来るのか……
精進します
0042デフォルトの名無しさん
2009/11/12(木) 03:09:48こっちの方が安全じゃないだろうか。
上の例だと、baaacbeeecみたいなのは$1がbaaacになっちゃうし。
0043デフォルトの名無しさん
2009/11/12(木) 03:19:17baaacbeeecaabみたいなのに対応してないことに気がついた
で書き直したのがこれだが、
/(b[^b]*?c)(?:[^b]*|[^b]*b[^c]*)$/
さらに考えたら、これで良いことに気づいた。
/.*(b[^b]*?c)/
0044デフォルトの名無しさん
2009/11/12(木) 15:27:31という配列の各要素をカンマ区切りでハッシュkeyとvalueに分け、かつ特定のkeyでぐぎった2次元配列にしたいです。
具体的には上記の配列を
$list[0]{aa} = 33;
$list[0]{bb} = 44;
$list[0]{cc} = 55;
$list[1]{aa} = xx;
$list[1]{bb} = bb;
$list[1]{cc} = 44;
$list[2]{aa} = yy;
$list[2]{bb} = 44;
$list[2]{cc} = 55;
というような2次元配列にしたいので以下のように書いたのですが、
最後のprintでは何も表示されませんでした。何がいけなかったのでしょうか?
my @list;
my %data;
my @string = qw{aa,33 bb,44 cc,55 aa,xx bb,44 cc,55 aa,yy bb,44 cc,55};
my $n = 0;
foreach my $item (@string) {
my ($key, $value) = split qq{,}, $item;
$data{$key} = $value;
if($key eq qq{cc}) {
$list[$n] = %data; %data=(); $n++;
}
}
print $list[0]{aa};
0045デフォルトの名無しさん
2009/11/12(木) 16:28:46ハッシュを代入すれば動くはず
0046デフォルトの名無しさん
2009/11/12(木) 16:42:41$list[$n] = { %data };
0047デフォルトの名無しさん
2009/11/12(木) 18:08:05$list[$n]{$key} = $value;
$n++ if($key eq qq{cc});
0048デフォルトの名無しさん
2009/11/13(金) 07:59:02$list[$n] = {%data}; %data=(); $n++;
どうちがうかは自分で考えてね
004944
2009/11/13(金) 10:15:26素直にやることにしました。ありがとうございました。
>>48
deep copy と shallow copyの違いですかね?
映らない理由はわかりました。
0050デフォルトの名無しさん
2009/11/13(金) 12:12:020051デフォルトの名無しさん
2009/11/13(金) 13:31:24p obj.methods
でわかりますが、Perlだとどのようにするのでしょうか?
my $obj = new Foo;
print $obj->methods???
0052デフォルトの名無しさん
2009/11/13(金) 14:04:34つClass::Inspector
0053デフォルトの名無しさん
2009/11/13(金) 15:28:01�d
CPANからインストールするんすね。
0054デフォルトの名無しさん
2009/11/15(日) 10:28:23use LWP::Simple;
use Coro;
my $url = 'http://www.yahoo.co.jp/';
my $res;
async {
$res = get $url;
};
print $res; # 何も表示されない
0055デフォルトの名無しさん
2009/11/15(日) 15:17:04asyncの意味わかってるのか
0056デフォルトの名無しさん
2009/11/15(日) 20:35:35取りに行くように書いていないから
0057デフォルトの名無しさん
2009/11/15(日) 20:41:440058デフォルトの名無しさん
2009/11/15(日) 21:36:12Windows XP SP2、ActivePerl 5.8.9です。
あと、>>54で、print $res;の前に、cede;も書いてましたが抜け落ちてました。
普通に、$res = "foo";とかだと表示されるんですけどね。。。
0059デフォルトの名無しさん
2009/11/15(日) 23:24:100060デフォルトの名無しさん
2009/11/16(月) 14:27:03以下のコードを実行すると、"koko"と表示された後、しばらく時間が経ってから
終了します。GCが走っているんじゃないかと思うのですが、こんな箇所でも走るのでしょうか?
use strict;
use warnings;
my @rray;
my $i = 0;
while ($i < 100000000) {
push(@rray, $i);
$i++;
}
$i = 0;
while ($i < 1) {
unshift(@rray, 1);
pop(@rray);
print "koko\n";
$i++;
}
0061デフォルトの名無しさん
2009/11/16(月) 14:37:520062デフォルトの名無しさん
2009/11/16(月) 14:40:30すいません。全然違いますか、、、
0063デフォルトの名無しさん
2009/11/16(月) 14:44:050064デフォルトの名無しさん
2009/11/16(月) 20:59:59http://spicky.net/vipper/uploads/spicky/9/5/8/1859_zeL8gI2.png
http://spicky.net/vipper/image/1859/
0065デフォルトの名無しさん
2009/11/17(火) 01:55:04まあ何でも良いんだけど、このコードをみると、
下のwhileは一回で抜けるように見えるのは俺だけか
0066デフォルトの名無しさん
2009/11/17(火) 09:57:25おそらくデバッグ用にそうしてるんだろ。
それくらい善意に解釈してやれよ。
本質とは関係ないとこをいちいちツッコミ入れる
おまいのようなヤツが一番ウザイんだよ。
0067デフォルトの名無しさん
2009/11/17(火) 10:05:330068デフォルトの名無しさん
2009/11/17(火) 10:11:46お前もうざいよw
0069デフォルトの名無しさん
2009/11/17(火) 10:18:230070デフォルトの名無しさん
2009/11/17(火) 10:43:07小学生かおまえはwww
0071デフォルトの名無しさん
2009/11/17(火) 15:05:45文字列に文字が含まれているか確認するならどっちがいい?
0072デフォルトの名無しさん
2009/11/17(火) 15:31:59index関数のほうが高速だからお薦め
0073デフォルトの名無しさん
2009/11/17(火) 15:46:11サンクス。
0074デフォルトの名無しさん
2009/11/17(火) 20:43:42それって最新の情報?
0075デフォルトの名無しさん
2009/11/18(水) 09:40:09use Benchmark;
my $s = '';
for (1.10000) {
$s .= chr(32 + rand(95));
}
timethese(
undef,
{
re => sub { $s =~ /abcdefgh/ },
index => sub { index($s, 'abcdefgh') },
}
);
結果は
Benchmark: running index, re for at least 3 CPU seconds...
index: 4 wallclock secs ( 3.24 usr + 0.00 sys = 3.24 CPU) @ 7719383.64/s (n=25010803)
re: 4 wallclock secs ( 3.09 usr + 0.00 sys = 3.09 CPU) @ 10203485.11/s (n=31528769)
正規表現すげー。
perlのバージョンは
This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi
です。測定方法に文句ある人はいろいろ試してくれ。
0076デフォルトの名無しさん
2009/11/18(水) 18:12:18>for (1.10000) {
for (1..10000) {
だよね?
0077デフォルトの名無しさん
2009/11/18(水) 18:24:48うお、その通りだ。やりなおしたぜ。
Benchmark: running index, re for at least 3 CPU seconds...
index: 4 wallclock secs ( 3.12 usr + 0.00 sys = 3.12 CPU) @ 131580.13/s (n=410530)
re: 3 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 131156.87/s (n=410521)
indexの方がやや速いが差は微妙という常識的な結果だった。
0078デフォルトの名無しさん
2009/11/19(木) 01:13:24ノ /_.イ / ノト、_」/ |/l/_.斗 \ 〕
. / l  ̄ 7|/| 」ィfて-カ` ィf リハ ! 「|
/ | ∧| ノ 弋zノ 辷ノ' ノ∨|/| おなかいっぱい食べさせられると(ry
. / | // | |、 , | | ノ
. / // | | \ 人 ハ |
/ 厶-、| ト._个 、 ∠フ _. イ| \|
/ / / ̄ ヽ、 >- ≦ノ| | /´⌒ く\
ということでもっと大きいデータや小さいデータを使うと若干差が出たような。
大きさに比例するものとコンスタントな速度を維持できるものと。
0079デフォルトの名無しさん
2009/11/19(木) 18:36:44についてわからないことがあるので、質問させてください。
レンタルサーバに標準で入っていないモジュールをcpanより、~/CPAN以下にインストー
ルしているのですが、自分で制作したCGIはcpanのモジュールを使用しているため@INC
にパスを追加しないといけません。
現在は全てのモジュールを使用するcgiに@INCに追加するコードを追加しているのですが、
何か設定でパスを追加することはできないでしょうか?
共用サーバの為、ホームディレクトリ以下での作業以外はできないと思います。
どうか、宜しくお願いいたします。
0080デフォルトの名無しさん
2009/11/19(木) 18:42:40CGIは板違いな。1読め。
008179
2009/11/19(木) 18:58:17ありがとうございます。
ファイルはCGIなのですが、Perlの設定になるのかと思いこちらで質問をさせていただきました。
Webプログラミング板の方が適切なようですので、もうしばらく書き込みをお待ちした後にWebプログラミング板に移動させていただきます。
0082デフォルトの名無しさん
2009/11/19(木) 21:11:090083デフォルトの名無しさん
2009/11/19(木) 22:21:48みんな冷たいね
つ「use lib;」
0084デフォルトの名無しさん
2009/11/20(金) 01:58:13コマンドラインでもCGIでも共通する部分の質問なんだから
CGIはWebProg板へのwarnを出した上で答えも付けてあげればいいのに。
0085デフォルトの名無しさん
2009/11/20(金) 02:48:490086デフォルトの名無しさん
2009/11/20(金) 06:59:490087デフォルトの名無しさん
2009/11/20(金) 09:01:08「猿でも三日でわかるCGI入門」みたいなものにも必ず書いてあるようなことが
わかってないんだから。聞くのも答えるのも時間の無駄。
0088デフォルトの名無しさん
2009/11/20(金) 09:37:30>>80 とか >>82 とか他人に不快感を与えるレスの方がよっぽど無駄。
0089デフォルトの名無しさん
2009/11/20(金) 09:51:56use libにしろ@INCにしろいちいち全部に書くのが大変だから
まとめて設定したいって話なんじゃないの?
そうすると環境変数PERLLIBだけど、それを設定するにはCGIだと
鯖の設定ファイルとか.htaccessとかいう話になってきてこっち向き
ではないよ。WebProg板に行くべき。
>>88
いやそれ普通の誘導だから。そのくらいで不快感とか言われても
ポカーンだよ。
0090デフォルトの名無しさん
2009/11/20(金) 11:56:070091デフォルトの名無しさん
2009/11/20(金) 12:01:180092デフォルトの名無しさん
2009/11/20(金) 13:16:05世のなかでPerlを使っている人がどれだけいることか・・・
0093デフォルトの名無しさん
2009/11/20(金) 13:38:38>>1をよくお読みの上、WebProg板への移動をお願いいたします。
0094デフォルトの名無しさん
2009/11/20(金) 13:44:23> 無駄だと思うなら答えなきゃいいじゃん。
> >>80 とか >>82 とか他人に不快感を与えるレスの方がよっぽど無駄。
他人に不快感を与えるのが悪いと思っているのなら、まず自分が
>>88のような他人に不快感を与えるレスすんな。
0095デフォルトの名無しさん
2009/11/20(金) 15:17:20まあ質問スレで荒れるのは大体が回答しないけど余計なこと言う奴が原因だけどねw
0096デフォルトの名無しさん
2009/11/20(金) 16:08:23新でくれ
0097デフォルトの名無しさん
2009/11/20(金) 16:12:090098デフォルトの名無しさん
2009/11/20(金) 16:52:580099デフォルトの名無しさん
2009/11/20(金) 18:17:160100デフォルトの名無しさん
2009/11/20(金) 18:21:280101デフォルトの名無しさん
2009/11/20(金) 18:23:570102デフォルトの名無しさん
2009/11/20(金) 18:54:56拡張子を関連付けたのですがhello_world.plをクリックしたらhello,worldと一瞬表示されて消えます。
どうすればいいのでしょうか?
0103デフォルトの名無しさん
2009/11/20(金) 19:06:29方法はいっぱいある。
例えばキーを押すまでループするプログラムを書く。
0104デフォルトの名無しさん
2009/11/20(金) 19:25:260105デフォルトの名無しさん
2009/11/20(金) 19:27:150106デフォルトの名無しさん
2009/11/20(金) 19:30:17これとかどうかな?
WindowsでPerlスクリプトをダブルクリックで実行したいけど
http://d.hatena.ne.jp/charsbar/20090604/1244104249
Perlの処理待ちコマンド - 教えて!goo
http://oshiete1.goo.ne.jp/qa5369764.html
0107デフォルトの名無しさん
2009/11/20(金) 19:37:59>DOSバッチのpauseとかに相当するものです。
`pause`でええやんとか思た
0108デフォルトの名無しさん
2009/11/20(金) 20:00:01勉強用として制作したものが非常に動作の重いものになってしまいました。
どこが原因かの切り分けをおこなっていたところ、
各パッケージをuseしているところ(20箇所ぐらい)がかなり負担になっているみたいでした。
BEGIN{
push(@INC, "model");
push(@INC, "view");
push(@INC, "control");
use Model;
use View;
use Control;
.....
}
そこで↑のところを↓のように変更したらそこそこ改善された
(ログイン画面を表示するだけなのに4secかかっていたのが半分ぐらいに)
のですが、@INCにパスを追加するよりも絶対パス指定をした方がそんなにアドバンテージがあるものなんでしょうか?
use model::Model;
use view::Viewl;
use control::Control;
....
0109デフォルトの名無しさん
2009/11/20(金) 22:00:25> のですが、@INCにパスを追加するよりも絶対パス指定をした方がそんなにアドバンテージがあるものなんでしょうか?
無い
0110デフォルトの名無しさん
2009/11/20(金) 22:03:530111デフォルトの名無しさん
2009/11/20(金) 23:30:09たてたということですね。
0112デフォルトの名無しさん
2009/11/21(土) 00:19:04捜索範囲が広がればそれだけ時間もかかるんじゃないか?
証拠はないけど
というかそもそも名前空間が被ったりしないようにできるだけ@INCは少ない方がいいと思う
例えば lib/control/View.pm と lib/view/View.pm なんかがあった場合に、最初のだと競合して予想外の動作をするかもしれない
0113108
2009/11/21(土) 02:31:47やっぱりほかの部分に原因があって、たまたま速くなっただけでしょうか
>>112
絶対パスで書くのは長くなってしまって面倒だなぁと思って@INCで済ませていました。
MVCのサンプル通りのディレクトリ構造でやると lib::framework::abstract::model::Model.pm となってしまって
なんだかなぁと。。。でもその方が安全みたいなのでそちらで進めてみたいと思います。
0114デフォルトの名無しさん
2009/11/21(土) 06:21:45小文字で始まるのはプラグマ
0115デフォルトの名無しさん
2009/11/21(土) 09:49:46=== Bar.pm ===
package Foo::Bar ;
略
1;
======
って package 宣言して呼び出す方で
use lib qw( /PATH/TO/LIB/ ) ;
use Foo::Bar ;
114氏の言う通りなので、 FOO のディレクトリ名も
お約束として大文字スタート。
0116デフォルトの名無しさん
2009/11/21(土) 09:50:50orz...
0117デフォルトの名無しさん
2009/11/21(土) 19:48:31片方のコアだけ使ってCPU使用率が50%になるんだけど、
なんとか100%にできんもんかな
0118デフォルトの名無しさん
2009/11/21(土) 20:11:040119デフォルトの名無しさん
2009/11/21(土) 20:13:41forkして2つ子プロセスを作って
0120デフォルトの名無しさん
2009/11/21(土) 20:44:36forkしても多分1個しか使わない
0121デフォルトの名無しさん
2009/11/21(土) 20:57:340122デフォルトの名無しさん
2009/11/22(日) 15:37:09これいいんじゃない?
たまにこの手の初心者質問が出るからテンプレに入れるとか。
0123デフォルトの名無しさん
2009/11/25(水) 11:29:010124デフォルトの名無しさん
2009/11/25(水) 11:40:16目標はブログみたいなシステムを作りたいんですが、パールでできますか?
できない場合、他にそういうのを作れる言語を教えてほしいです。
0125デフォルトの名無しさん
2009/11/25(水) 11:42:340126デフォルトの名無しさん
2009/11/25(水) 13:48:34GJ
オレも参考になった
0127デフォルトの名無しさん
2009/11/25(水) 15:12:01サンクス。助かりました。
0128デフォルトの名無しさん
2009/11/26(木) 15:25:22最初見た時「汚ねぇwwwwこんなスクリプト書く奴って顔も心も汚いんだろうなww」
とか思ってすいませんでした。細かいことを気にしない人にとって至高の言語です。
0129デフォルトの名無しさん
2009/11/26(木) 18:51:100130デフォルトの名無しさん
2009/11/26(木) 23:12:16ま、言語の問題じゃ無く、プログラムを作る人間次第ってことだね
お前が作るプログラムをみたら
「汚ねぇwwwwこんなスクリプト書く奴って顔も心も汚いんだろうなww」
と思ってしまうだろう、多分
0131デフォルトの名無しさん
2009/11/27(金) 00:20:48Perlみたいに後から実装しないと実行出来ない機能がデフォでかなり装備されてる!
配列が使いづらいのは痛いけど
0132デフォルトの名無しさん
2009/11/27(金) 06:03:320133デフォルトの名無しさん
2009/11/27(金) 10:22:22良かったね、おめでとう
スレタイを読める日本語力があるともっと良かったのに
0134デフォルトの名無しさん
2009/11/27(金) 10:23:250135デフォルトの名無しさん
2009/11/27(金) 17:39:57これは確定事項です。
0136デフォルトの名無しさん
2009/11/27(金) 17:42:55WEBアプリで動作しています。
これは確定事項です。
0137デフォルトの名無しさん
2009/11/27(金) 17:56:32>135は>136と同様にそんなことはありえない
ということでいいのかな
0138デフォルトの名無しさん
2009/11/27(金) 20:37:300139デフォルトの名無しさん
2009/11/27(金) 21:08:01周知の事実を述べてるだけか
0140デフォルトの名無しさん
2009/11/27(金) 21:13:340141デフォルトの名無しさん
2009/11/28(土) 04:06:450142デフォルトの名無しさん
2009/11/28(土) 19:59:40ODBCの方が少しだけ性能が上でした。単純なSELECTを発行しただけなのですが、これはこんなものなんでしょうか?
ODBCの方が性能がいいとすると、DBD::Pgの存在理由はなんなんでしょうか?
0143デフォルトの名無しさん
2009/11/28(土) 21:56:07コンビニならセブンイレブンがあるのにローソンの存在理由はなんなんなんでしょうか?
0144デフォルトの名無しさん
2009/11/29(日) 17:15:350145デフォルトの名無しさん
2009/11/29(日) 23:03:27できれば日本語で解説しているブログなどをご存知でしたら教えていただけないでしょうか
extract_tagged 関数のみ使えればよいのですが。。。
0146デフォルトの名無しさん
2009/11/30(月) 09:45:02extract_taggedでググれば一発でこんなの出てくるんだが....
ttp://questionbox.jp.msn.com/qa1767267.html
0147デフォルトの名無しさん
2009/11/30(月) 10:28:42後出しですみませんが、それは見つけました。
ただ、それ以外の文献が見つからないです。
やりたいことは
$open_tag = qr/<([a-zA-Z0-9]+)\s+([^>])+\s*>/;
で定義された独自タグのバランスをとることなんですが、そのURLからでは正規表現を使った場合のクローズタグの定義の仕方が分かりませんでした。
また、タグの定義をベタで書いた場合にも思ったとおりに動いてくれない場合があるため、何が分からないか分からない状態です。
具体的には
use Text::Balanced qw/extract_tagged/;
my $data = '<huga>test1<hoge>test2</hoge><hoge>test3<hoge>test4</hoge></hoge></huga>';
my($extracted, $remainder) = extract_tagged($data, '<hoge>', '</hoge>');
print "ext: $extracted\n";
print "rem: $remainder\n";
というスクリプトを作ってテストしてみたのですが、出力結果は期待に反して
ext:
rem: <huga>test1<hoge>test2</hoge><hoge>test3<hoge>test4</hoge></hoge></huga>
となってしまいました。
my($extracted, $remainder) = extract_tagged($data, '<huga>', '</huga>');
とすると期待通りの結果になるので、余計にわけが分からないです。
何か根本的に勘違いをしているような気がします。。。
0148デフォルトの名無しさん
2009/12/01(火) 12:55:30クローズタグ指定省略か undef 渡せば良きに計らってくれそうだけどそれじゃあかんの?
デフォルトだと空白を無視して「文字列先頭」から取り出してくるので無視する部分(第4引数)を
指定すればいいと思われ。>146 でも指定してある。
0149デフォルトの名無しさん
2009/12/01(火) 18:05:54ああなるほど
このモジュールは先頭のタグのみを取り出してくれるだけなんですね
うまくいきました、ありがとうございます
0150デフォルトの名無しさん
2009/12/02(水) 05:36:28という処理をさせたい場合、
いくらでもやり方はあると思うんですが、
一番スマートな感じにするにはどういう風になるでしょうか?
0151デフォルトの名無しさん
2009/12/02(水) 06:12:080152デフォルトの名無しさん
2009/12/02(水) 08:45:240153デフォルトの名無しさん
2009/12/02(水) 12:31:26こんなんどうですか?
my @nums = 1..9;
my @picked_nums = map splice( @nums, rand @nums, 1 ), 1..4;
0154デフォルトの名無しさん
2009/12/02(水) 12:36:000155デフォルトの名無しさん
2009/12/02(水) 13:32:08Perlにおいて、文字列中の非表示文字を、簡単に確認できる方法はないでしょうか?
たとえばある文字列について、改行コードが\r\nか、それとも\nなのかを知りたいとき
これを確認する方法は、Devel::PeekのDump関数しかないのでしょうか?
(RubyでいうString#inspectやString#dumpのようなものがあれば、便利なのですが)
0156デフォルトの名無しさん
2009/12/02(水) 13:54:061要素取り出して
その度、被ってないかチェックすれば良いんじゃね?
0157デフォルトの名無しさん
2009/12/02(水) 14:01:41Unicode 16進表記でパターンマッチをかければいい。
例えば、[\x{ff10}-\x{ff19}]+ とすると、これは、全角の [0-9]+と同じ意味
0158デフォルトの名無しさん
2009/12/02(水) 14:34:02こんな感じでどうでしょうか?
my $min = 1;
my $max = 10**8;
my $num_to_pick = 4;
my @picked_nums;
for ( 1..$num_to_pick ) {
my $picked_num;
do {
$picked_num = $min + int rand( $max - $min + 1 );
} while ( grep { $_ == $picked_num } @picked_nums );
push @picked_nums, $picked_num;
}
print "@picked_nums";
0159デフォルトの名無しさん
2009/12/02(水) 16:17:464 my $cnt;
5 sub hoge{
6 return "@{[ ' [[' . hoge() . ']] ']}" if $cnt++ < 10;
7 return "hoge";
8 }
9
10
11 $huga = "[[@{[hoge()]}]]";
12 print "count : $cnt\n";
13 print $huga;
このような再帰呼び出しを行う場合だと、当たり前ですが
count : 11
[[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[hoge]] ]] ]] ]] ]] ]] ]] ]] ]] ]] ]]
という結果が帰ってきます(この場合についての動きは理解しました)
呼び出すタイミングを遅らせようと
11 $huga = '[[@{[hoge()]}]]';
13 print eval{ $huga };
としたところ、
count :
[[@{[hoge()]}]]
という結果になりました
B::Deparse で確認すると、シングルクォーテーションで囲った文字列の中の @ がエスケープされていました
なので、文字列として展開しても @ がそのままだったようです
質問したいことは、eval の使用制限は1回で、なんとかこの仕様を回避する方法はないかということです
よろしくお願いします
0160デフォルトの名無しさん
2009/12/02(水) 16:22:22eval BLOCK と eval EXPR の違いについて調べてみればいいんじゃない
0161デフォルトの名無しさん
2009/12/02(水) 19:11:13有難うございます
助言より色々試してみた結果、
11 $huga = '"[[@{[hoge()]}]]"';
13 print eval($huga);
とするとうまく行くことが判明しました
0162デフォルトの名無しさん
2009/12/02(水) 20:03:050164デフォルトの名無しさん
2009/12/03(木) 01:30:08あとは任せた
0165デフォルトの名無しさん
2009/12/03(木) 09:07:12モジュール拾ってきてインストールするか1,2行の
プログラム書くかになるだろ。Devel::Peekでできる
んならそれでええやん。
0166150
2009/12/03(木) 15:51:53>>151-154
ありがとうございます。なるほどなるほど
シャッフルは目からウロコでした
範囲が大きい場合は一つずつチェックするやり方の方が良さげですねきっと
0167デフォルトの名無しさん
2009/12/03(木) 19:38:02$ARGV[1]が巨大なファイルなので内容を配列に押し込むとやたらに時間がか
かるのとメモリが一杯一杯になるので、以下のようなコードになってしまいました。
whileループ内でファイルのopen/closeを繰り返す以外に、メモリに負担をかけない
解決策が無いでしょうか?
open(IN0,"<$ARGV[0]");
while(<IN0>){
処理;
open(IN1,"<$ARGV[1]");
while(<IN1>){
if(条件){処理;
last;
}
}
close(IN1);
}
close(IN2);
0168デフォルトの名無しさん
2009/12/03(木) 20:47:580170デフォルトの名無しさん
2009/12/03(木) 23:55:00使えないの?
\数字のかわりに、/(.).+?$^N/とか
書けたら、括弧をいちいち数えなくても
よくなってウマー、と試したけど、なんか
うまくいかない。orz
0171デフォルトの名無しさん
2009/12/04(金) 03:19:47どんな処理してるか/ファイルサイズにもよるけど、いちいちopenするのではなく、
seek(IN1, 0, 0)でファイルポインタを戻してみるとか。
早く処理できるようなデータの持ち方に変えた方がよいのでは。
0172デフォルトの名無しさん
2009/12/04(金) 09:14:52でかいファイル$ARGV[1]を毎回頭から読んでたら負けだと思う。
インデックス的なものを用意して全部読まなくていいように工夫する
しかないんじゃないかなぁ。
0173デフォルトの名無しさん
2009/12/04(金) 12:28:51ファイルシステム版KVSとか使え
速度を問わないならdbopenとかでもいいからさ。
ただこの2つはシーケンシャルな読み出しにめっぽう弱い。
ので固定長ファイルに変換してseekで読み出すのも手。
それか>>172のようにファイルに直接インデックス張っちゃうか。
perldoc界隈がなんか騒がしいな。
0174デフォルトの名無しさん
2009/12/05(土) 15:04:50一度だけハッシュを作ってそれを利用するという方法で高速化が出来ました。
>>173がインデックス的なと言ってくれたので思いつきました。
感謝です。
0175デフォルトの名無しさん
2009/12/05(土) 15:06:28実際のところどうなんだろ?
0176デフォルトの名無しさん
2009/12/05(土) 16:58:380177デフォルトの名無しさん
2009/12/05(土) 17:11:240178デフォルトの名無しさん
2009/12/05(土) 17:13:130179デフォルトの名無しさん
2009/12/05(土) 17:57:170180デフォルトの名無しさん
2009/12/05(土) 20:23:180181デフォルトの名無しさん
2009/12/05(土) 23:37:420182デフォルトの名無しさん
2009/12/05(土) 23:51:040183デフォルトの名無しさん
2009/12/06(日) 16:10:36むしろKVSやdbopenがハッシュ関数を積極的に利用する方なんだがな。
ハッシュって言葉の意味と、DB系の話で何でハッシュって言葉がでてくるのか
ちゃんと勉強しとかないと恥かくぞ。
0184デフォルトの名無しさん
2009/12/06(日) 18:09:07ハードディスクを略してハードと言うのと同じ。
0185デフォルトの名無しさん
2009/12/06(日) 18:59:21プ
0186デフォルトの名無しさん
2009/12/06(日) 21:17:00それはねーよ
0187デフォルトの名無しさん
2009/12/06(日) 21:51:310188デフォルトの名無しさん
2009/12/06(日) 21:59:39他の板ならそれでも許されるかもしれんが、少なくともプログラム板では無理。
0189デフォルトの名無しさん
2009/12/06(日) 22:06:170190デフォルトの名無しさん
2009/12/06(日) 23:05:57「%」→パーシュ(?)ってことでハッシュにしてるんだろう
0191デフォルトの名無しさん
2009/12/06(日) 23:12:295になったときにassociative arrayとかじゃなげーから呼び名を
hashにしたんじゃなかったか
単に内部実装がhash tableだからhashのはず
0192デフォルトの名無しさん
2009/12/06(日) 23:56:280193デフォルトの名無しさん
2009/12/06(日) 23:58:59全然わかってないだろ・・・。
0194デフォルトの名無しさん
2009/12/07(月) 00:22:250195デフォルトの名無しさん
2009/12/07(月) 02:30:05キーをもとに生成されたハッシュ値を添え字とした配列だからでしょ。
0196デフォルトの名無しさん
2009/12/07(月) 07:54:56何で、なんで
0197デフォルトの名無しさん
2009/12/07(月) 11:55:350198デフォルトの名無しさん
2009/12/07(月) 14:06:050199デフォルトの名無しさん
2009/12/07(月) 16:17:150200デフォルトの名無しさん
2009/12/07(月) 16:33:30ハッシュ値が同じになる奴はずるずるチェーンでつなげてたと思った。
0201デフォルトの名無しさん
2009/12/07(月) 23:13:24$lineを2つ使うわけにもいかなくて、どうしたらいいですか?
0202デフォルトの名無しさん
2009/12/07(月) 23:34:050203デフォルトの名無しさん
2009/12/07(月) 23:35:320204デフォルトの名無しさん
2009/12/07(月) 23:40:210205デフォルトの名無しさん
2009/12/08(火) 00:09:59要は確率的に均等に読みだしたいというのがハッシュのそもそもの目的
0206デフォルトの名無しさん
2009/12/08(火) 00:13:480207デフォルトの名無しさん
2009/12/08(火) 04:20:42そもそも実装が違う
0208デフォルトの名無しさん
2009/12/08(火) 04:54:140209デフォルトの名無しさん
2009/12/08(火) 05:00:530210デフォルトの名無しさん
2009/12/08(火) 05:17:20んなこたーない
0211デフォルトの名無しさん
2009/12/08(火) 05:53:020212デフォルトの名無しさん
2009/12/08(火) 07:57:19そもそも、それぞれ1行ずつ読み込む必要があるのか?
一度に読み込めばいいんじゃないの?
>>206
用途による
0213デフォルトの名無しさん
2009/12/08(火) 08:47:35こんな感じでどうでしょうか
#! /usr/bin/perl
use strict;
open FH1, $ARGV[0];
open FH2, $ARGV[1];
while(1){
my($line1, $line2);
$line1 = <FH1>;
$line2 = <FH2>;
last if !defined $line1 and !defined $line2;
print "file 1 : $line1";
print "file 2 : $line2";
}
0214デフォルトの名無しさん
2009/12/08(火) 09:29:44付属ドキュメントに内部構造関係のもたくさんあるので片っ端から読め。
最初はXSでデータの内部表現に慣れるとこから始めるのがいいかな。
0215デフォルトの名無しさん
2009/12/08(火) 09:34:42実際perlのおじいさんみたいな言語であるawkには連想配列しかないな。
0216デフォルトの名無しさん
2009/12/08(火) 10:27:030217デフォルトの名無しさん
2009/12/08(火) 11:34:56おじいさんじゃありません。おかあさんです。
0218デフォルトの名無しさん
2009/12/08(火) 13:05:24その可能性は高い。
リストはランダムアクセスできないから、
添え字の速度はあんまりだったはず。
かわりに、リスト代入とかforeachとかの
処理方法が充実してるってことのはず。
0219デフォルトの名無しさん
2009/12/08(火) 14:12:18ed がひいじいさん
vi がおじさん
php がいとこ
0220デフォルトの名無しさん
2009/12/08(火) 14:52:380221デフォルトの名無しさん
2009/12/08(火) 17:39:010222デフォルトの名無しさん
2009/12/08(火) 19:03:080223デフォルトの名無しさん
2009/12/08(火) 20:46:48いらない子
0224デフォルトの名無しさん
2009/12/08(火) 22:07:41なるほど
XSに挫折したので内部の知識が知りたかったのですが順序が逆だったようですね
もうちょっとねばります
0225デフォルトの名無しさん
2009/12/08(火) 22:35:590226デフォルトの名無しさん
2009/12/09(水) 03:45:15テキスト処理に威力絶大で、LL言語が続出するきっかけになった。
SNOBOLの作者はIcon言語も作ったが、
これもパターンマッチングとかジェネレータとか最近のLL言語の流行を先取りしている
0227デフォルトの名無しさん
2009/12/09(水) 06:16:29マジレスするとperlgutsだろうな。
0228デフォルトの名無しさん
2009/12/09(水) 06:18:15さっきの者だが、
XSに挫折するようだと内部構造はきついだろうから、
まずXS書けるようになるのが先決だな。
あとCリテラシー必須な。構造体理解してないと全く訳わからんぞ。
0229デフォルトの名無しさん
2009/12/11(金) 07:22:08$a{b} = {c=>1};
とした時に$a{b}のキーの一覧を取得するには、どうしたらいい?
my $d = $a{b};
keys(%$d);
でいけることを確認したが、一行では無理?
いろいろ()つけて試したが、全部syntax errorになった。
0230デフォルトの名無しさん
2009/12/11(金) 08:11:30中カッコでいけるんじゃないかな?
keys %{ $a{b} }
0231デフォルトの名無しさん
2009/12/11(金) 18:02:15マッチした結果を参照させる場合はどうすればよいでしょうか?
一応ここまでは考えたのですが
$a="わたしは$1の$2が好き";
my %machted_Reg_Hash = map +( $_, eval "$_"), $a=~ m|(\$[1-9とか])|g;
で、
printf qq|"%s" =>"%s"|, $_, $machted_Reg_Hash{"$_"} for keys %matched_Reg_Hash;
したら、
php=>RegExp
perl=>うんこー
長門=>--○◎●
0232デフォルトの名無しさん
2009/12/11(金) 18:14:340233デフォルトの名無しさん
2009/12/11(金) 18:15:440235デフォルトの名無しさん
2009/12/13(日) 16:44:56今はTest::ClassとTest::Baseが主流ですか?
書き方はTest::Classが好みなんだけど、皆さんはどちらを使われてます?
また、fixtureの仕組みというか、テストデータの読み込み消し込みが解りません。
Test::Fixture::DBIC::Schema を使うのが一般的?
0236デフォルトの名無しさん
2009/12/13(日) 18:35:50そんなの使ったことない
0237デフォルトの名無しさん
2009/12/13(日) 20:46:51ここは匿名掲示板です。
あなたを名指しで質問しているのではありません。
自意識過剰もいいとこです。
0238デフォルトの名無しさん
2009/12/13(日) 21:08:04「特殊な質問ですが」とか言ってくれれば無視したのに
ところで>>236の発言のどこが「自意識過剰」なの?
バカなの?いつ死ぬの?W
0239デフォルトの名無しさん
2009/12/13(日) 21:20:150240デフォルトの名無しさん
2009/12/13(日) 21:22:27┏┛ ⌒
・ .___ ⌒ ___ ━┓
/ ―\ / ― \ ┏┛
/ノ (● X (●) \ヽ ・.
| (●) /_ (⌒ (●) /.
| (__/  ̄ヽ__) /
\ /´ ___/
\| \
/|´ |
0241デフォルトの名無しさん
2009/12/13(日) 21:24:18お前はもう死んでるw
0242デフォルトの名無しさん
2009/12/13(日) 21:40:110244デフォルトの名無しさん
2009/12/13(日) 22:56:08そういう訳でもないですよ。
私はTest::Moreを使っております。
0245デフォルトの名無しさん
2009/12/13(日) 23:13:300246235
2009/12/13(日) 23:15:06回答ありがとうございます。
Test::Moreが基本で、+αの機能を使いたい人が
BaseやClassを使うようですね。
DBICを使って組むことを考えてまして、pl部分にはあまりコードを
書きたくないので、各schemaファイルにコードを書いていこうと思ってます。
その時にある程度纏まった塊でテストしたいため、
Test::Moreではちょっと見辛いなと思ったため、Test::Classを選択しました。
>>245
そ、そうなんですか・・・。
0247デフォルトの名無しさん
2009/12/14(月) 12:51:15b=200
c=300
という内容のファイルが合って、これを
a=100&b=200&c=300
に変換してくれるワンライナーはどうかけばいいですか。
1行ずつ読み込んで配列に格納し、さいごにjoin '&' すればいいんだと思うんですけど、さくっとかけるワンライナーがわかりません。
みなさんの黒魔術をおしえてください。
0248デフォルトの名無しさん
2009/12/14(月) 12:58:440249デフォルトの名無しさん
2009/12/14(月) 14:50:39% cat hoge
a=100
b=200
c=300
% perl -pe 's/\n/\&/ unless eof' hoge
a=100&b=200&c=300
アレイコンテキストで読んでjoinする方法だとだとchomp
しないと改行がのこるからさくっといかなかった。なんか
良い技ある?
% perl -e '@x=<>; chomp(@x); print join("&",@x)' hoge
a=100&b=200&c=300
0250デフォルトの名無しさん
2009/12/14(月) 15:33:28黒くないとだめなのか
perl -e '$"="&",$_="@{[<>]}",s/\s//g,print' file
0251デフォルトの名無しさん
2009/12/14(月) 17:55:33perl -0ple 's/\n(?=.)/&/g' file
Array で join に拘るなら、こう言う方法も。
perl -F"\n" -0ape '$_ = (join "&", @F)."\n"' file
perl -lne 'push @A, $_ }{ print join "&", @A' file
0252デフォルトの名無しさん
2009/12/14(月) 18:12:01perl -pe 'eof||s/\n/&/' file
249を||使って書き直しただけだけどな
0253デフォルトの名無しさん
2009/12/14(月) 18:44:04join('&',map{chomp($_);}(<>))
0254デフォルトの名無しさん
2009/12/14(月) 21:57:42そこで、CGIが使用許可されている最大メモリ量を調べたいのですが、
Perl自体を使って調べるいい方法はないでしょうか?
0255デフォルトの名無しさん
2009/12/15(火) 00:59:271byteずつ、メモリを埋めていく。
一杯になったら、それが使用可能なメモリ容量。
0256デフォルトの名無しさん
2009/12/15(火) 09:20:08/proc/self/limitsを覗いてみるとか、syscallでgetrlimit呼ぶとか。
0257デフォルトの名無しさん
2009/12/15(火) 09:23:42あまり無茶をしてくれるなよ・・・
0258254
2009/12/15(火) 10:22:11print length("x" x int(1024*1024*3.52)), "\n";
こんなコードでいいんでしょうか?
>>256
残念ながら/procがないんですよ。
getrlimitはunlimitedのようでした。
0259デフォルトの名無しさん
2009/12/15(火) 11:10:200260デフォルトの名無しさん
2009/12/15(火) 12:45:44quataは?
個人的な感覚としては、共用サーバーで
Out of memoryと言われて、その制限を
調べようとするのは、逆恨みに近い気が。
そんなに使ってないはずなの?
0261デフォルトの名無しさん
2009/12/15(火) 21:21:06perlでリフレクションというとシンボルテーブルへのアクセスですが、
レキシカル変数にはどうもアクセスできないように思いまして・・・
↓今現在の用途としてはこんな場面をイメージしています。
erb風のテンプレートクラスに値を渡す
(resultメソッド内でevalを実行するにあたり、現在は手作業でハッシュを作って渡しています)
my $name = 'my name';
my $output_text = $epl->result({'name'=>$name});
rubyではbindingオブジェクト、pythonではlocals()やvars()で
任意のスコープにあるすべての値を集めることができるので、近い形にできればと思ったのですが・・
erb.result(binding) #ruby
epy.result(locals()) #python
0262デフォルトの名無しさん
2009/12/16(水) 01:14:20PadWalker とかそんな感じだった気がする
http://search.cpan.org/~robin/PadWalker-1.9/PadWalker.pm
0263261
2009/12/16(水) 02:56:32ありがとうございます。やっぱりCで書かれてるようですね。
こちらでも、perlの内部構造に直接アクセスすれば可能ということはわかったのですが
自分で書くにはハードルが高いようです・・・。
>>261のテンプレートクラスに関してはもう一案あるので、尚、検討してみようと思います。
0264デフォルトの名無しさん
2009/12/16(水) 08:45:500265デフォルトの名無しさん
2009/12/16(水) 14:26:13use strict;
use warnings;
use Encode qw(from_to);
use Encode::Guess qw( euc-jp cp932 7bit-jis );
my $data = '日本語';
from_to($data, 'Guess' => 'cp932');
print $data;
Use of uninitialized value in subroutine entry at D:/Lang/Perl/lib/Encode/Guess.pm line 56.
というwarningsが出るのですが、何が悪いのでしょうか?
ActivePerl 5.8.9、Windows XP SP2です。
0266デフォルトの名無しさん
2009/12/16(水) 14:36:580267266
2009/12/16(水) 14:42:38>Use of uninitialized value in subroutine entry at D:/Lang/Perl/lib/Encode/Guess.pm line 56.
これは値がundefの変数が使用されたことを示してる
>from_to($data, 'Guess' => 'cp932');
from_to($data, 'Guess', 'cp932');
こうじゃねーの?
0268デフォルトの名無しさん
2009/12/16(水) 16:15:11Guess に失敗してるんじゃ?
>>266-267
ttp://d.hatena.ne.jp/chaichanPaPa/20090111/1231666260
0269デフォルトの名無しさん
2009/12/16(水) 16:27:24なるほど
しかし、=>はハッシュの定義のみに使うべきだと思う
文字列短すぎて判別に失敗してるのかな
0270デフォルトの名無しさん
2009/12/16(水) 16:50:57Guessが使えるのは、Encode::decode
0271デフォルトの名無しさん
2009/12/16(水) 17:28:420272デフォルトの名無しさん
2009/12/16(水) 17:34:51from_toでGuessするなって言ってんじゃないの?
0273デフォルトの名無しさん
2009/12/16(水) 18:13:25与えると警告が出るというところまではつきとめた。
use warnings;
use Encode qw(find_encoding encode);
$enc = find_encoding('cp932');
$s = encode('cp932', 'ほげほげ');
warn "check なし";
$enc->decode($s);
warn "check = undef";
$enc->decode($s, undef); # これだけ警告
warn "check = 0";
$enc->decode($s, 0);
Encodeでは省略可能な$checkパラメタをとる関数から
decode呼ぶときは、
$check ||= 0;
として確実に0にしてから渡しているのだが、Encode::Guess
のdecodeはその辺の配慮がされていない。どっちが正しい
のかはわからんけど。
0274デフォルトの名無しさん
2009/12/16(水) 21:36:510275デフォルトの名無しさん
2009/12/16(水) 21:54:27仕事で一回使ったけど、後でとんでも無く大変な目にあったw
utf8で使わなければ大丈夫なのかな?
0276デフォルトの名無しさん
2009/12/16(水) 22:18:210277デフォルトの名無しさん
2009/12/16(水) 22:55:23encode decode祭りで発狂寸前の俺がいる。
何がどうなってるのか訳解らんちん。
0278デフォルトの名無しさん
2009/12/16(水) 23:04:02「すべての文字列がエンコーディング情報を持つ、なんて面倒なことせずに
全部UTF-8に統一すればいいんじゃね」と思ってたが
PerlとEncode.pmを使い始めて理解した。統一方式はものすごく面倒だ
>>275
どういう使い方でEncode.pmを使ってたんだ
0279275
2009/12/16(水) 23:17:59単体テスト段階では気が付かなかったけど、DBのデータをコンバートのプログラムを作って実行した時点で文字化けがw
そのときにguessも使ったけど、文字数少ないとまともに文字コードを認識しないし、元々Jcode.pm使っててEncode.pmの使用実績も無いから、完全にEncode.pmに対する信頼性が全く無くなってなw
単体レベルの開発もほぼ終わって、結合・総合テストに入ろうとした段階だったのに、文字コード変換にかかわる部分をすべて手を入れててんやわんやw
多分、ウチの会社ではEncode.pmは二度と使わんな、きっと
0280275
2009/12/16(水) 23:20:370281デフォルトの名無しさん
2009/12/17(木) 00:02:00Guessだけのモジュール書いたら、需要ありそうな。
0282デフォルトの名無しさん
2009/12/17(木) 00:14:12変換失敗することがあるなんて当たり前でしょ
何のヒントも無しに文字コードの自動認識が完璧に出来るわけないんだから
0283デフォルトの名無しさん
2009/12/17(木) 00:19:05もしかして「げすのかんぐり」の語源?
まぁ、いっぺん辞書で guess の意味を調べてゴランよ。
こんなもん信頼する方がバカ
http://ocndictionary.goo.ne.jp/srch/all/guess/m0u/
0284デフォルトの名無しさん
2009/12/17(木) 00:40:00ついて理解があれば至極当然のこと。
だからといって、出来不出来の差がないなんてことはまったくない。
>>283
中学生はオナニーでもしてさっさと寝ろ。
0285デフォルトの名無しさん
2009/12/17(木) 00:46:03乳なんだろ。
0286デフォルトの名無しさん
2009/12/17(木) 01:19:460287デフォルトの名無しさん
2009/12/17(木) 02:13:47プッ
guess と一緒に心中しろw
0288デフォルトの名無しさん
2009/12/17(木) 09:15:52いざ知らず、utf8とeucはかぶりまくりだからなぁ。
文字化けして困る用途ならguessなんかせずに文字
コードをちゃんと決めて使わないとね。
0289デフォルトの名無しさん
2009/12/17(木) 17:51:51EUCからUTF8に変換したとき&とか変換できなくて困った覚えがある
あれ、Encode以外にEncode::EUCJPMSとか使わなきゃいけないんだよ
Encodeのバグかと思ったら、作者いわくEUC自体がまずいんだとか
0290275
2009/12/17(木) 18:31:16use utf8とno utf8つけることに統一したな
慣れないから文字数の入力チェックもどうするか悩んだw
0291デフォルトの名無しさん
2009/12/17(木) 19:33:21EUC自体がまずいというかCP20932で定義されていないベンダ特有文字
が変換出来ないのは当然でそういった場合はCP51932使うのが普通でしょ。
guessに関しても対象文字列が全て定義されているか否かを調べるという単純な機能で
文字数が少なければ複数の候補が残る可能性が高まるし00-FF全て定義されてる
iso系なんかは全てパスしてしまう。
guessの候補が二つ以上残ったらdieするとか厳格すぎる気もするけどゆとり対応してないだけで
ユーザーの無知による誤った評価が多い気がする。
0292デフォルトの名無しさん
2009/12/17(木) 22:45:35>>261
Filter::Simple で適当にフィルタ書けば?
ってレスしたかったのに
0293デフォルトの名無しさん
2009/12/17(木) 23:53:540294デフォルトの名無しさん
2009/12/18(金) 01:47:41何をすれば真面目に対応したという事になるの?
0295デフォルトの名無しさん
2009/12/18(金) 08:22:08今さらいらん。
utf8でおk。
それに、ShiftJISはもうあんまり文字を
追加できないだろ。
将来性がない。
0296デフォルトの名無しさん
2009/12/18(金) 08:26:380297デフォルトの名無しさん
2009/12/18(金) 08:45:130298デフォルトの名無しさん
2009/12/18(金) 10:41:05$_ =~ /(\d+)-(\d+)-(\d)/;
$year=$1;$month=$2;$day=$3;
特にグループが多くなった場合、対応がすぐわかるとうれしいので、
Pythonの名前付きグループ化みたいなのができればいいんですが。
0299デフォルトの名無しさん
2009/12/18(金) 10:49:20http://www.google.co.jp/search?q=perl+named-capture
0300デフォルトの名無しさん
2009/12/18(金) 10:55:070301デフォルトの名無しさん
2009/12/18(金) 11:00:22> UTF-8厨の勢力がどんどん増してゆく.....
もう、ShiftJISなら3秒の処理をUTF-8にすると47秒かかるという時代じゃ
ないんだからさ……
0302デフォルトの名無しさん
2009/12/18(金) 11:21:260303デフォルトの名無しさん
2009/12/18(金) 17:48:18それじゃ等価じゃないしやりたいことを単純化して説明しているだけかもしれないから
my ($year, $Month, $day) = /(\d+)-(\d+)-(\d)/;
の方が適切じゃない?
0304デフォルトの名無しさん
2009/12/18(金) 23:57:38スピードは、どっちで書いても昔から一瞬だ
0305デフォルトの名無しさん
2009/12/19(土) 00:24:210306デフォルトの名無しさん
2009/12/19(土) 11:35:43EUCで14秒なのをUTF-8にしたら約3分ということがあったのを覚えている。
0307デフォルトの名無しさん
2009/12/19(土) 12:15:500308デフォルトの名無しさん
2009/12/19(土) 12:19:310309デフォルトの名無しさん
2009/12/20(日) 06:36:28sjisに固執する奴の方が厨房に見える
0310デフォルトの名無しさん
2009/12/20(日) 08:52:54やろうと思う処理を素直に書くとUTF-8なんか入ってこない
perlのバグを回避する為に回り道させられてるだけ
0311デフォルトの名無しさん
2009/12/20(日) 11:02:530312デフォルトの名無しさん
2009/12/20(日) 16:45:13@all=@all[sort {$keys[$a]<=>$keys[$b]} 0..$#all];
ってやると
1,青,#0000ff 2,緑,#00ff00 3,赤,#ff0000
になるんですが
@all[sort {$keys[$a]<=>$keys[$b]} 0..$#all];ここの意味がよくわかりません
動き方がいまいち掴めません、詳しい方教えてください。
0313デフォルトの名無しさん
2009/12/20(日) 17:40:51keysの要素の順番に沿うようにallをソート?
ようわからんけど
0314デフォルトの名無しさん
2009/12/20(日) 17:47:18@all=sort {$a<=>$b} @all;とやっても出来ました。
perl/CGIの極意600に書かれてた方法です上の難しい書き方は
@all=@all[sort {$keys[$a]<=>$keys[$b]} 0..$#all];
意味が同じってことですよね?
0315デフォルトの名無しさん
2009/12/20(日) 18:17:33@allの要素数は3なので、0..$#allは(0, 1, 2)の配列になる。
my @keys = (2,1,0)としておくと、
sort {$keys[$a]<=>$keys[$b]} (0, 1, 2);
は@keysの要素でソートされた順番で配列の要素が返り、(1,2,0)になる。
@all = @all[(1,2,0)];
は2番目・3番目・1番目の順で@allの要素を返し、@allに格納するので
結果は>>312になる。
0316デフォルトの名無しさん
2009/12/20(日) 18:22:35my @keys = (1,2,0);
と書き換えると、(2,0,1)の順番で@allの要素が返されるので結果は
2,緑,#00ff00
3,赤,#ff0000
1,青,#0000ff
になる。
ぶっちゃけややこしいね。
0317デフォルトの名無しさん
2009/12/20(日) 18:51:00そう思っとけば良いよ、お前さんは
0318デフォルトの名無しさん
2009/12/20(日) 20:06:45最近perlを使ってどんなことをやりましたか?
0319デフォルトの名無しさん
2009/12/20(日) 21:03:310320デフォルトの名無しさん
2009/12/20(日) 21:10:31はい次
0321デフォルトの名無しさん
2009/12/20(日) 21:11:56加工元のデータが自分の所で発生するケースはあんまりない
0322デフォルトの名無しさん
2009/12/20(日) 21:20:14>>319氏は ファイル名に対してオペしてるのかとおもいました。。。。。
はい次
0323デフォルトの名無しさん
2009/12/20(日) 21:37:56やっぱこれだね
0324デフォルトの名無しさん
2009/12/20(日) 21:48:53それともエロ画像検索用にperlが走ってるのでしょうか。そんなわけはないな
はい次
0325デフォルトの名無しさん
2009/12/20(日) 21:53:450326デフォルトの名無しさん
2009/12/20(日) 22:10:11スレ立ての頻度を考えれば手間対効果、効率の面で疑問ですね。
はい次
0327デフォルトの名無しさん
2009/12/20(日) 22:12:59perlやりとおしてるから意地はって適当に便利に使ってるふりしてる。
0328デフォルトの名無しさん
2009/12/20(日) 22:28:070329デフォルトの名無しさん
2009/12/20(日) 22:30:46※ただしローマ数字は除く
ということをやりたいんですが、ローマ数字が文字化けしてしまいます。
どうしたらいいでしょうか。
SJISのテキストで保存されたファイル内の全角数字を半角数字に変換してSJISで保存したいです。
たとえば、「12�V�W�X6789」→「12�V�W�X6789」と変換したいのですが、
下記の方法では「12?V?W?X6789」となってしまいます。
試したこと1:
$test = decode('sjis', $test);
$test =~ tr/\x{ff10}-\x{ff19}/0-9/;
$test = encode('sjis', $test);
試したこと2:
use Lingua::JA::Regular::Unicode;
$test = decode('sjis', $test);
$test = alnum_z2h($test);
$test = encode('sjis', $test);
試したこと3(スクリプトもSJIS)
use Jcode;
$from = jcode('[0-9]')->euc;
$to = jcode('[0-9]')->euc;
$test = jcode($test)->tr($from, $to)->sjis;
0330デフォルトの名無しさん
2009/12/20(日) 22:51:35use utf8;
use Encode;
# ファイル開いてSJISのバイナリ列持ってくる
my $test = ...;
# flagged-utf8にして
$test = decode 'cp932', $test;
# tr///で全角数字を半角にして
$test =~ tr/0-9/0-9/;
# SJISバイナリ列に戻す
$test = encode 'cp932', $test;
print $test;
0331デフォルトの名無しさん
2009/12/20(日) 22:53:21自動ツールがあるけどいたちごっこで対策されたりしてる分野に、
自分専用スクリプトを書くとかなり効果的だな
0332デフォルトの名無しさん
2009/12/20(日) 23:00:13虹が好きなんですね。
どうやったらperlが「おっ、虹画像見っけた」って判断できるのか?おせーてください
>>331
ネットで公開してるくせに自動ツールは拒否したりするのですね。ネットって不思議ですね
はい次
0333デフォルトの名無しさん
2009/12/20(日) 23:11:23@ls=`ls -al`;
foreach (@ls)
{
s/rwx/7/g;
s/r-x/5/g;
s/rw-/6/g;
s/-wx/3/g;
s/--x/1/g;
s/-w-/2/g;
s/r--/4/g;
s/---/0/g;
}
print "@ls";
パーミッションを分かりやすく表示してる
0334デフォルトの名無しさん
2009/12/20(日) 23:17:16保守合戦になっても絶対生き残る
0335デフォルトの名無しさん
2009/12/20(日) 23:33:30保守age
保守age
保守age
保守age
ってのがそれですね。需要がないのを理解してください
はい次
0336デフォルトの名無しさん
2009/12/20(日) 23:37:58こ、こ、、、これは?
数字のほうがわかりやすい?????
へんな人ですね
あと、ファイル名に rwx なんてのがあったら可笑しくなりそうなので
タンゴ協会みたいなのいらないですか? g なんていらなくない?
はい次
0337デフォルトの名無しさん
2009/12/20(日) 23:42:29ファイル名にrwxなんて使うのか
ugoの3つあるからgは必要
はい次
0338デフォルトの名無しさん
2009/12/20(日) 23:59:37俺間違えてるワラワラワラ
-rwxr-xr-x
自分、グループ、他人だっか?でならんでるのか
じゃ、変換してよろし
ただg はいるじゃんw
はい次
0339デフォルトの名無しさん
2009/12/21(月) 00:00:44致命的なバグがあるね
>>ファイル名にrwxなんて使うのか
はい次
0341デフォルトの名無しさん
2009/12/21(月) 00:25:05my @ls = `ls -al`;
s{(?<=^\S)([r-])([w-])([x-])([r-])([w-])([x-])([r-])([w-])([x-])}
{ @_ = map { $$_ eq '-' ? 0 : (4,2,1)[($_-1)%3] } 1..9; join '', sum(@_[0..2]), sum(@_[3..5]), sum(@_[6..8]) }efor@ls;
print @ls;
これでいいんだろ
0342デフォルトの名無しさん
2009/12/21(月) 00:36:51練習問題としては勉強になります
ただ >>318への回答としては、失格です
はい次
0343デフォルトの名無しさん
2009/12/21(月) 00:41:36はい次
0344デフォルトの名無しさん
2009/12/21(月) 00:44:55はい次
0345デフォルトの名無しさん
2009/12/21(月) 00:49:020346デフォルトの名無しさん
2009/12/21(月) 01:13:520347デフォルトの名無しさん
2009/12/21(月) 01:15:28s{(?<=^\S)([rwx-]{3})([rwx-]{3})([rwx-]{3})}{ join " . ", map { (local $. = $$_) =~ y/rwx-/4210/; join "+", split //, $. } 1..3 }ee
関係ないので
はい次
0348デフォルトの名無しさん
2009/12/21(月) 01:39:54のほうが見やすい
はい次
0349デフォルトの名無しさん
2009/12/21(月) 06:31:30はい汁
0350デフォルトの名無しさん
2009/12/21(月) 06:49:54かなりつまんないです
はい次
0351デフォルトの名無しさん
2009/12/21(月) 09:14:540352デフォルトの名無しさん
2009/12/21(月) 10:15:37サバサバ気取ってるのわかる
心の広い人間に憧れる乙
0353デフォルトの名無しさん
2009/12/21(月) 10:17:44ここに質問していいのか判りませんが
一つご教授お願いします
モジュールの追加についてです
当方、winXPにてprel5.8を使用しています
IPのDNS問い合わせに「Net::DNS」を使用しようと思うのですが
Net::DNSのモジュールの追加がうまく行きません
ttp://footmark.wordpress.com/2008/02/13/dns%E9%80%86%E5%BC%95%E3%81%8D%E9%AB%98%E9%80%9F%E5%8C%96/
ここの説明どおりライブラリパスに置いているつもりなのですが
どうもうまく行きません
perl自体はCドライブの直下に置いてるんで
ライブラリパスとは
C:\Perl\「lib」←ここの事ではないのでしょうか?
プログラミング以前の問題ですが
どうかご教授よろしくお願いします
0354353
2009/12/21(月) 10:52:35Net::DNSの「::」の意味を考えたら
自己解決しました
スレ汚し申し訳ありませんでした
0355デフォルトの名無しさん
2009/12/21(月) 15:13:150356デフォルトの名無しさん
2009/12/21(月) 15:32:13単純にOSが用意したgethostbyaddr(3)を
呼んでそうなもんだけど。
自分でソース読んで確かめろって話だけど、
この手のシステム依存部分って抽象化と
場合分けがぐじゃっとしていて読みにくいん
だよな。
0357デフォルトの名無しさん
2009/12/21(月) 16:26:12Strawberry Perlを使ってるのか?
Active Perl 5.8/5.10ならppmにあるし、そちらを使う方が楽だと思うが
0358デフォルトの名無しさん
2009/12/21(月) 17:16:19あまりのレベルの低さにワロタw
0359デフォルトの名無しさん
2009/12/21(月) 17:25:17自分の人としてのレベルの低さ、みみっちさに早く気づいてください
はい次
0360デフォルトの名無しさん
2009/12/21(月) 17:43:59自己紹介乙
はい次
0361デフォルトの名無しさん
2009/12/21(月) 18:30:51クリスマス前に振られたのか?
0362デフォルトの名無しさん
2009/12/21(月) 19:12:02>>346
0363デフォルトの名無しさん
2009/12/21(月) 19:18:090364デフォルトの名無しさん
2009/12/21(月) 20:06:540365275
2009/12/21(月) 20:10:47システム開発者
今もperlでWEBオープン系の仕事してる
PHPもするし、汎用系もなんでもするよ
趣味で遊ぶのはperlだな
でも実用性重視で、細かいことは気にしない
0366デフォルトの名無しさん
2009/12/21(月) 20:10:500367デフォルトの名無しさん
2009/12/21(月) 20:20:530368デフォルトの名無しさん
2009/12/21(月) 20:28:530369275
2009/12/21(月) 20:29:250370デフォルトの名無しさん
2009/12/21(月) 22:05:45おれも研究者……4月以降どうなるかわからんが(泣
0371デフォルトの名無しさん
2009/12/21(月) 22:39:19以下のようなプログラムがあるとします。
Shift_JISの文字列に対し、DBIのquote()メソッドを使ってサニタイジング&シングルクォート囲むプログラムです。
use DBI;
my $dbh = DBI->connect(略);
my $inStr = '出席表\'; #いわゆるダメ文字が最後に来る文字列
my $outStr= $dbh->quote($inStr);
print "$outStr\n";
さて、このプログラムを構成の異なる2つのサーバで実行したところ、出力に差異が生じました。
サーバA(perl 5.0+DBI 1.37) → '出席表'
サーバB(perl 5.6+DBI 1.67) → '出席表\'
サーバBの出力のままでは、シングルクォート自体がエスケープされることになり、DB(MySQL)に投げることができません。
このような違いは何が原因で起きるのでしょうか?
何かヒントなどあればよろしくお願いします。
・DBに投げる際、プレースホルダを使っても変化なし
・スクリプトの文字コードをEUCやUTF-8にしても変化なし
・「表示」のように、ダメ文字が最後に来なければ問題なく動く
0372デフォルトの名無しさん
2009/12/21(月) 22:41:560373デフォルトの名無しさん
2009/12/21(月) 22:46:34与えられる文字列そのものがShift_JISなので変わりません
0374デフォルトの名無しさん
2009/12/21(月) 23:03:270375デフォルトの名無しさん
2009/12/21(月) 23:51:540376デフォルトの名無しさん
2009/12/22(火) 00:08:14'出席表\'は実際のスクリプト中でも、そのまま書かれているんだよね?
それとも実際のスクリプトでは、$inStrは外部から読み込んできた文字列になる?
それと、372の言う通りuse utf8は試してみた?
0377デフォルトの名無しさん
2009/12/22(火) 00:24:32すみません、色々テンパってました
>>376
あ、はい。実際には外部からの入力です。
use utf8は既に試しています。
調べているうちにuse encoding 'shiftjis' というプラグマを見つけたのでそっちも試してみます。
0378デフォルトの名無しさん
2009/12/22(火) 00:54:18use encodingは色々と問題が多いので使わない方がいい
それを使うなら、代わりにEncodeを使うべき
詳しくはこの辺
ttp://blog.livedoor.jp/dankogai/archives/51031595.html
ttp://blog.livedoor.jp/dankogai/archives/51221731.html
ttp://www.rwds.net/kuroita/program/Perl_unicode.html
0379デフォルトの名無しさん
2009/12/23(水) 02:00:04どうすればパネルにアイコンを置くことができるでしょうか
よろしくお願いします
0380デフォルトの名無しさん
2009/12/23(水) 14:23:33はい次
0381デフォルトの名無しさん
2009/12/23(水) 14:26:310382デフォルトの名無しさん
2009/12/23(水) 14:34:27これはひどい
0383デフォルトの名無しさん
2009/12/23(水) 16:25:15相手にしないことだ
0384デフォルトの名無しさん
2009/12/23(水) 16:25:34確かにeuc厨すごいなww
0385デフォルトの名無しさん
2009/12/23(水) 16:54:250386デフォルトの名無しさん
2009/12/23(水) 16:58:380387デフォルトの名無しさん
2009/12/23(水) 17:01:02息子のcp932さんが仇討ちに来るがな・・・
0388デフォルトの名無しさん
2009/12/23(水) 17:07:320389デフォルトの名無しさん
2009/12/23(水) 17:42:130390デフォルトの名無しさん
2009/12/23(水) 18:27:170391デフォルトの名無しさん
2009/12/23(水) 21:50:45具体的には処理の進捗状況を出したくて、一度表示した後に何秒後かにそれを消してまた表示するという感じなのですが。
0392デフォルトの名無しさん
2009/12/23(水) 22:17:040393デフォルトの名無しさん
2009/12/23(水) 22:58:27\b(バックスペース)か\r(復帰)を使って消せるよ
0394デフォルトの名無しさん
2009/12/23(水) 23:13:56有難う御座います!!
0395デフォルトの名無しさん
2009/12/23(水) 23:16:14はい次
0396デフォルトの名無しさん
2009/12/23(水) 23:31:44はい次
0397デフォルトの名無しさん
2009/12/23(水) 23:59:280398デフォルトの名無しさん
2009/12/24(木) 00:04:52はい次
0399デフォルトの名無しさん
2009/12/24(木) 00:12:02悲しくならないか?
0400デフォルトの名無しさん
2009/12/24(木) 01:19:160401デフォルトの名無しさん
2009/12/24(木) 01:31:31はい次
0402デフォルトの名無しさん
2009/12/24(木) 01:35:400403デフォルトの名無しさん
2009/12/24(木) 15:55:050404デフォルトの名無しさん
2009/12/24(木) 19:37:010405デフォルトの名無しさん
2009/12/24(木) 19:37:50ファイルサイズが大きくなってくるとセグメンテーション・フォールトで止まちゃうんだけど。。
ファイルを二つに分けると普通に動く。
これは仕様なの?
0406デフォルトの名無しさん
2009/12/24(木) 21:32:300407デフォルトの名無しさん
2009/12/24(木) 21:47:290408デフォルトの名無しさん
2009/12/24(木) 22:13:440409デフォルトの名無しさん
2009/12/24(木) 22:18:410410デフォルトの名無しさん
2009/12/24(木) 22:21:460411デフォルトの名無しさん
2009/12/24(木) 23:12:370412デフォルトの名無しさん
2009/12/25(金) 10:31:00「刺身の上にタンポポのせる仕事」より酷いな
0413デフォルトの名無しさん
2009/12/26(土) 03:48:44それに絶望してwxPerlに逃げた
0414デフォルトの名無しさん
2009/12/26(土) 10:34:44unixでしかも英語力があれば何とかなるのかいな。
windowsでしかも英語力がないと、モジュールを組み込むのは不可能だ。
0415デフォルトの名無しさん
2009/12/26(土) 10:40:490416デフォルトの名無しさん
2009/12/26(土) 10:42:23ActivePerlにppmあるし。
0417デフォルトの名無しさん
2009/12/26(土) 10:46:04お前は何もわかってない
0418デフォルトの名無しさん
2009/12/26(土) 10:52:53Perlも同じくインタプリターだからぼろい。
0419デフォルトの名無しさん
2009/12/26(土) 10:54:250420デフォルトの名無しさん
2009/12/26(土) 10:59:500421デフォルトの名無しさん
2009/12/26(土) 11:12:260422デフォルトの名無しさん
2009/12/26(土) 11:21:120423デフォルトの名無しさん
2009/12/26(土) 11:43:290424デフォルトの名無しさん
2009/12/26(土) 11:46:32適度にぼろいものがウケるのだ
0425デフォルトの名無しさん
2009/12/26(土) 11:54:11レコードの配列は無理だろう。
0426デフォルトの名無しさん
2009/12/26(土) 12:10:500427デフォルトの名無しさん
2009/12/26(土) 12:17:380428デフォルトの名無しさん
2009/12/26(土) 13:05:140429デフォルトの名無しさん
2009/12/26(土) 13:07:460430デフォルトの名無しさん
2009/12/26(土) 13:19:22その理屈なら、printfも言語コアには入らないことになるぞ
0431デフォルトの名無しさん
2009/12/26(土) 13:19:270432デフォルトの名無しさん
2009/12/26(土) 13:23:02ただの関数だろ
0433デフォルトの名無しさん
2009/12/26(土) 13:30:11関数だから何なんだ
0434デフォルトの名無しさん
2009/12/26(土) 13:31:34言語に組み込むことと、組み込みライブラリに含めることではレベルが違う
0435デフォルトの名無しさん
2009/12/26(土) 14:27:19言ってることがよくわからん
関数だろうと制御文だろうと、コア機能であるべきものは言語に組み込むべきだろう
0436デフォルトの名無しさん
2009/12/26(土) 14:31:270437デフォルトの名無しさん
2009/12/26(土) 14:42:31「ライブラリは暗記しなくていい」
という幻想
0438デフォルトの名無しさん
2009/12/26(土) 16:24:470439デフォルトの名無しさん
2009/12/26(土) 16:46:000440デフォルトの名無しさん
2009/12/26(土) 17:09:420441デフォルトの名無しさん
2009/12/26(土) 17:49:37Cじゃなく、sh+awk+sedと比べるべき。
0442デフォルトの名無しさん
2009/12/26(土) 20:04:37低レベルな質問なんですが
テキストのIPアドレスを読み込み、逆引きして
ドメイン名検出をしようとしてるのですが
どうもうまく行きません
以下のプログラムでやっているのですが
結果は
ドメイン不明
ドメイン不明
・
・
・
となります。
テキストファイルの中身は
一行に一つのIPが書かれている状態で
それが約5万件ほどです。
0443デフォルトの名無しさん
2009/12/26(土) 20:06:49use Net::DNS;
use vars qw/ $myRes $query $rr $host $str @word $st /;
$myRes = Net::DNS::Resolver->new;
sub myLookup($){
$query = $myRes->search($_[0], 'PTR');
if (!$query) {
return "ドメイン不明";
}
foreach $rr ($query->answer) {
if ($rr->type eq "PTR") {
return $rr->ptrdname;
}
}
}
open(FILE,"<IP.txt"); #ファイル読み込み
while ($str = <FILE>){ #ファイル関連
$host = &myLookup($str);
print $host."\n";
}
close(FILE);
プログラムはこのようになっています
本当に低レベルな質問なんですが
どうかご教授お願いします
0444デフォルトの名無しさん
2009/12/26(土) 20:18:52$host = &myLookup("202.131.30.146");
このようにテキストから読み込むプログラムは
書かずにそのままIPを入れると正常にドメインが出力されます
。
結果は
crawl-202-131-30-146.naver.jp.ne.jp
(これはテキストの一行目のIPのドメインです。)
以前に似たような形でカントリーコードを
出力させるプログラムは普通に動きました。
0445デフォルトの名無しさん
2009/12/26(土) 20:28:57$host = &myLookup($str);
の前に
chomp $str;
を入れてみるとか
0446デフォルトの名無しさん
2009/12/26(土) 20:43:250447デフォルトの名無しさん
2009/12/26(土) 20:44:460448デフォルトの名無しさん
2009/12/26(土) 20:53:45もどきなことができるのか。
何で、こんな裏技的な方法で、もどきなことをさせるのか。
解決策を見つけるまで、回り道をしながら余計な学習時間が掛かったじ
ゃないか。
異常性格なPerlのぼろさだ。
0449デフォルトの名無しさん
2009/12/26(土) 21:04:06異常性格言語Perl。
Perlが完全に未学習で初めてなのに、いきなりソース持ってきて、このCGI
を作れと言われて、俺の知能が低いからソース読めないと思ってたが、実は
ソースが汚いとか可読性が悪いとか随分評判が悪いらしい、異常性格なPerl。
0450デフォルトの名無しさん
2009/12/26(土) 21:07:35異常性格なPerl。
0451デフォルトの名無しさん
2009/12/26(土) 21:10:370452デフォルトの名無しさん
2009/12/26(土) 21:18:260453デフォルトの名無しさん
2009/12/26(土) 21:32:24何かよくわからないまま、この場合はこのように対応する
らしいから、それに従うみたいになるだけで、応用力を身
に付けるのには適してないように思える。
なぜだ、それだけ異常性格なPerlだからか。
0454デフォルトの名無しさん
2009/12/26(土) 21:33:05いくら話しても馬鹿にされて終わるだけですよ。
0455デフォルトの名無しさん
2009/12/26(土) 21:34:090456デフォルトの名無しさん
2009/12/26(土) 21:38:37普通に勉強する準備時間も無い状態でいきなり仕事やらされたんだぞ。
0457デフォルトの名無しさん
2009/12/26(土) 21:49:46普通じゃない状況のせいだとわかっているなら、言語批判に置き換えるのはおかしい。
あと、普通の知能の持ち主だったら、その状況でももっとマシな仕事できてたろうね。
0458デフォルトの名無しさん
2009/12/26(土) 21:55:22だがPerlは異常だからそうはいかないから言語批判
0459デフォルトの名無しさん
2009/12/26(土) 21:57:21片方でヘマこいた人のレベルが低いようにしか思えない。
0460デフォルトの名無しさん
2009/12/26(土) 21:57:34この異常性格Perl。
0461デフォルトの名無しさん
2009/12/26(土) 22:03:44普通の人ならPerlを初めて触った日の最初の3時間で解決するレベルの
基本事項だってことだな。
0462デフォルトの名無しさん
2009/12/26(土) 22:13:46ARGVだろボケ
0463デフォルトの名無しさん
2009/12/26(土) 22:22:43ぱっと見Cみたいに見える頃はとても読みやすい
0464デフォルトの名無しさん
2009/12/26(土) 22:30:37本読んでも何の前触れもなく突然意味不明なコードが出現したり、
目次や索引とかgoogleで常に疑問の解決に直結する情報が即座に
得られるというわけでもないし、地道に順を追って学習せざるを
得ないことが多い。
0465デフォルトの名無しさん
2009/12/26(土) 22:39:14if+elseは、内部でswitchのように
実行される(こともある?)らしいので、
実装難度が理由ではない。
つか、switchくらい面倒なわけないだろ。
理由は、後方互換と意地だと思う。
0466デフォルトの名無しさん
2009/12/26(土) 22:48:330467デフォルトの名無しさん
2009/12/26(土) 22:49:12そういうライブラリって既にある?
0468466
2009/12/26(土) 22:49:180469デフォルトの名無しさん
2009/12/26(土) 22:49:37use English;
0470442
2009/12/26(土) 22:53:00見難いコードにも拘らず
ありがとうございます
上手く起動しました。
chompを調べたところ
行末の文字を消去すると出ていたのですが
どうやらCR+LFの改行コードで詰まっていたんですね
0471デフォルトの名無しさん
2009/12/26(土) 23:23:470472デフォルトの名無しさん
2009/12/26(土) 23:28:330473デフォルトの名無しさん
2009/12/26(土) 23:32:470474デフォルトの名無しさん
2009/12/26(土) 23:55:37そんなの普通にあるな。 甘えんな
0475デフォルトの名無しさん
2009/12/26(土) 23:57:43まだ俯瞰で物を見る力が残っているなら、客観的に周り見てみ。 誰が一番異常か。
0476デフォルトの名無しさん
2009/12/26(土) 23:59:10\ 丶 i. | / ./ /
\ ヽ i. .| / / /
\ ヽ i | / / /
\
-‐
ー
__ わ た し で す --
二 / ̄\ = 二
 ̄ | ^o^ |  ̄
-‐ \_/ ‐-
/
/ ヽ \
/ 丶 \
/ / / | i, 丶 \
/ / / | i, 丶 \
0477デフォルトの名無しさん
2009/12/27(日) 00:02:08あと難しい言葉使うな!!
0478デフォルトの名無しさん
2009/12/27(日) 00:05:010479デフォルトの名無しさん
2009/12/27(日) 00:13:07お前だ
0481デフォルトの名無しさん
2009/12/27(日) 00:45:27お前、今、輝いてるよ
0482デフォルトの名無しさん
2009/12/27(日) 02:28:540483デフォルトの名無しさん
2009/12/27(日) 02:41:570484デフォルトの名無しさん
2009/12/27(日) 02:57:060485デフォルトの名無しさん
2009/12/27(日) 03:31:030486デフォルトの名無しさん
2009/12/27(日) 09:43:01given when って知らなかったな。って、5.10からか。
仕事で使ってる人は、圧倒的に5.8系が多いんじゃないか?
俺がそうだから、みんながそうだとは限らんけど、RHEL使ってるなら、そうだよね。
5.10や、6の機能なんか調べても意味ないから調べないな。
5.10はもうちょっとして、新規の案件があれば調べるかも、程度だなぁ。
6はちょっと論外だなぁ。5年後くらいには、5.10がメインになってるかもね。
でも、Perl6::Sayは使っちゃう。
0487デフォルトの名無しさん
2009/12/27(日) 10:11:40Solaris9 前提なら Perl 5.6.1 でもいいんだろうけど
0488デフォルトの名無しさん
2009/12/27(日) 10:23:53今からPerlやるとか変態だろう。
RubyとかPythonがある今で。
0489デフォルトの名無しさん
2009/12/27(日) 10:30:270490デフォルトの名無しさん
2009/12/27(日) 10:47:34うへぇ、そういう環境って、やっぱCPANもろくに使えないとか?
Perlって、CPANなけりゃとてもとても使えたもんじゃねーって思ってる。
0491デフォルトの名無しさん
2009/12/27(日) 12:06:59配列のperl用語だろうか。
0492デフォルトの名無しさん
2009/12/27(日) 12:12:320493デフォルトの名無しさん
2009/12/27(日) 12:14:470494デフォルトの名無しさん
2009/12/27(日) 12:43:530495デフォルトの名無しさん
2009/12/27(日) 12:55:19CPANのパッケージは、比較的最新のPerl版数を要求するものが多かったり、
他のパッケージを要求するものが多く、芋づる式にたくさんのパッケージを
入れると、どこかで Perl 版数に引っかかったりして、こういう環境では使いづらいね
でも、素 Perl であっても、シェルスクリプトでは出来ないことが出来るし、
全然役に立つ。Solaris8以降なら最小インストールでも入るのも大きい
0496デフォルトの名無しさん
2009/12/27(日) 13:08:22エクセルで並び替えたり変換したり抽出したり計算したりを全部perlでやるようになった
負荷の高い数値計算とかだと今でもCだけど
0497デフォルトの名無しさん
2009/12/27(日) 13:10:13から
#!/usr/bin
に変わった時はうれしかったよ
0498デフォルトの名無しさん
2009/12/27(日) 13:11:15#!/usr/local/bin
だたw
0499デフォルトの名無しさん
2009/12/27(日) 13:48:02とかできひんの?
0500デフォルトの名無しさん
2009/12/27(日) 13:48:430501デフォルトの名無しさん
2009/12/27(日) 18:01:26use Perlのjournalとか読んでるとサンプルソースで#!/usr/bin/env perl
って書いてるのをよく見かけるな。
0502デフォルトの名無しさん
2009/12/28(月) 01:30:36その書き方は、稀によく見掛けるね
自分は好きじゃないけど
0503デフォルトの名無しさん
2009/12/28(月) 01:47:450504デフォルトの名無しさん
2009/12/28(月) 02:09:23どうした?
0505デフォルトの名無しさん
2009/12/28(月) 12:48:36規制中による遅レス失礼。
うまくいきました。
カーリーブレースがデリファレンスの正式な方法って知らなかった。
続•初めてのperlを買ったら、載っていて理解した。
0506デフォルトの名無しさん
2009/12/28(月) 13:04:100507デフォルトの名無しさん
2009/12/28(月) 13:53:500508デフォルトの名無しさん
2009/12/28(月) 14:03:010509デフォルトの名無しさん
2009/12/28(月) 16:50:33バックスラッシュ以外の一文字っていう正規表現がわかりません。
/[^\\]/
かなと思ったのですが[]が閉じてないと言われてしまいます。
/[^\]/でも同様でした。
文字列を指定した文字で、分割したくて、エスケープ処理も使いたいってことなんですが、
1:2\::3
↑この文字列を1,2:,3に分割したいってことで\が前にない:で分割ってのをしたいんです。
よろしくお願いします
0510デフォルトの名無しさん
2009/12/28(月) 17:03:550511510
2009/12/28(月) 17:05:250512デフォルトの名無しさん
2009/12/28(月) 17:05:410513デフォルトの名無しさん
2009/12/28(月) 17:08:200514デフォルトの名無しさん
2009/12/28(月) 17:10:09phpは正規表現リテラルがなくて文字列で表すので、
/[^\\]/
を得ようと思ったら、
"/[^\\\\]/"
と書かなきゃいけないんじゃなかったっけ。(めんどくさー)
まあスレチだからちゃんとききたきゃPHPスレで。
0515デフォルトの名無しさん
2009/12/28(月) 17:12:44/(?<!\\)\:/
こういうことですか?これでも()が閉じてないと言われてしまいました。
0516デフォルトの名無しさん
2009/12/28(月) 17:16:26でいけました。スレ汚し失礼いたしました。
0517デフォルトの名無しさん
2009/12/28(月) 17:18:21phpだと関数だからstringで渡さなきゃいけないのか
0518デフォルトの名無しさん
2009/12/28(月) 18:47:57flashplayerにあーだこーだすることはできませんか?
具体的にはニコニコ動画のコメントを読み込んだり書き込んだりしたいんですが
0519デフォルトの名無しさん
2009/12/28(月) 19:07:050520デフォルトの名無しさん
2009/12/28(月) 19:08:58ありがとうございます
0521デフォルトの名無しさん
2009/12/28(月) 23:22:50/[^\\]/
笑ってるゾウみたい。
0522デフォルトの名無しさん
2009/12/28(月) 23:50:35| ^ U |
| |ι |つ
U||  ̄ ̄ ||
 ̄  ̄
0523デフォルトの名無しさん
2009/12/29(火) 08:06:14たとえば/usr/local/lib/perl/5.10.0/xxx.pmを多少変更したxxx1.pmというのを作って使おうとしたら、
どうやって読み込めばいいでしょうか?
よろしくお願いします。
0524デフォルトの名無しさん
2009/12/29(火) 08:10:140525デフォルトの名無しさん
2009/12/29(火) 08:11:14use lib /home/perl/Modules;
use NewModule;
でした。
0526デフォルトの名無しさん
2009/12/29(火) 08:11:47/home/hoge/lib/xxx1.pm
に設置したとしたら、スクリプトの冒頭(じゃなくてもいいんだけど)で、
use lib qw(/home/hoge/lib);
とすると吉。
0527デフォルトの名無しさん
2009/12/29(火) 08:12:46俺の立場をどうしてくれるw
まあ、use libの後は何らかの引用符で囲んでリストで渡すように。
0528デフォルトの名無しさん
2009/12/29(火) 08:21:46ありがとうございました。qwでやります。
0529デフォルトの名無しさん
2009/12/29(火) 08:58:01それで出来るんだね。
push(@INC, '/home/perl/Modules');
ってやってたけど、そっちのがよさげだね。
0530デフォルトの名無しさん
2009/12/29(火) 13:36:49あれっ、それ無理でしょ。
@INCはコンパイル時に評価されるから。
BEGINでくくるなら別だけど。
0531デフォルトの名無しさん
2009/12/29(火) 15:59:38@list=uniq @list
みたいな?
0532デフォルトの名無しさん
2009/12/29(火) 16:06:260533デフォルトの名無しさん
2009/12/29(火) 16:08:33自力で重複分を捨てないといけないのですね?
需要高そうですけど、、、、、、どなたかコピペお願いします
0534デフォルトの名無しさん
2009/12/29(火) 16:12:410535デフォルトの名無しさん
2009/12/29(火) 16:23:220536デフォルトの名無しさん
2009/12/29(火) 16:37:32Perlクックブックより
my %seen;
@list = grep !$seen{$_}++, @list;
0537デフォルトの名無しさん
2009/12/29(火) 16:38:17@id=sort @id;
for(@id){
unless($temp eq $_){
push(@temp,$_);
}
$temp=$_;
}
for(@temp){
print;
print "\n";
}
プロフェッショナルな皆さん、評価お願いします
0538デフォルトの名無しさん
2009/12/29(火) 17:06:24最初からハッシュ配列に入れれば?
0539デフォルトの名無しさん
2009/12/29(火) 17:14:42$hash{$_}++
ってして
@list=keys %hash
で良いんじゃないの?
0540デフォルトの名無しさん
2009/12/29(火) 17:25:26上のほうの方も、
>>最初から
>>配列作るときに
の方も、、、根本的にプロフェッショナルの方はやり方が違うのですね・・・・
尾恥ずかしながら、最初 @id を作ってるところがこんな感じです。
ここでハッシュというものが登場するわけでしょうかww
while(<>){
if(/(\d\d:\d\d:\d\d).*ID:(........)/){
#print "$2"."\t";
#print "$1";
#print "\n";
push(@id,"$2");
}
}
0541デフォルトの名無しさん
2009/12/29(火) 17:55:40これで動いたみたいです!!
ありがとうございます。勉強します
while(<>){
if(/(\d\d:\d\d:\d\d).*ID:(........)/){
#push(@id,"$2");
$hash{$2}++;
}
}
@list=keys %hash;
#@id=sort @id;
#for(@id){
#unless($temp eq $_){
#push(@temp,$_);
#}
#$temp=$_;
#}
for(@list){
print;
print "\n";
}
0542デフォルトの名無しさん
2009/12/29(火) 18:07:32%hashのkeyあたりどれぐらい重複していたかは
$hash{key}
で分かるよ
0543デフォルトの名無しさん
2009/12/29(火) 23:58:540544デフォルトの名無しさん
2009/12/30(水) 10:27:51リファレンスが対象だったとしたら、「リファレンスのアドレスが同じ」か、
「リファレンスの中身(例えば中身のスカラーが同じとか)が全て同じ」かで
処理は全く変るわけだし。
前者だったら、Scalar::Util の refaddr 関数とかで各固有のアドレス(数値)を
得てハッシュに突っ込む。
Scalar::Util qw( refaddr ) ;
my %seen ;
my @arr = .... ;
my @uniq = grep { ! $seen{ refaddr $_ } ++} @arr ;
# + 0 でいいじゃん、なんて某氏が言いそうな突っ込みは禁止。
0545デフォルトの名無しさん
2009/12/31(木) 21:56:34数日前から色々と苦戦しています。。
当方、超初心者です。
現在、CGIのページで携帯のチャットサイトを作っています。
携帯の機種名を取得して表示したいのですがうまくいきません。
-----------------------------------------------------------
sub html_view {
&html_header;
if ($FORM{'mode'} eq 'reg') { &html_form2; }
else { &html_form1; }
@DATA = &read_file($datefile);
$kizi = @DATA;
if($kizi >= $max_page) { $dataview = $max_page; }
elsif($kizi < $max_page) { $dataview = $kizi; }
foreach (0 .. ($dataview - 1)) {
local($date,$name,$com,$cl) = split(/,/,$DATA[$_]);
chop($cl);
print "<HR SIZE=1>\n";
$name =~ s/\0/,/g;
$com =~ s/\0/,/g;
print "<FONT COLOR=\"$cl[$cl]\">$name</FONT>\>$com<br>★($date)\n";
}
&html_footer;
exit;
}
-----------------------------------------------------------
上記のソースの★の部分に携帯の機種名を表示したいのです。
0546デフォルトの名無しさん
2009/12/31(木) 21:58:01(http://www.kawa.net/works/perl/phone/pnews.html)
テストとして、こちらのサイトさんのプログラムをダウンロードして、
phone.plをアップロード、そしてtest.cgiを作り、
------------------------------------------
#!C:/perl/bin/perl
print "機種名: $phone->{name}<BR>\n";
------------------------------------------
として保存してtest.cgiにアクセスしましたが、
internal server errorと表示されてしまいます。
どのようにしたら、★の位置に携帯の機種名を表示できるのでしょうか・・・
どうかよろしくお願い致しますm(_ _)m
0547デフォルトの名無しさん
2009/12/31(木) 22:32:48数日前から色々と苦戦しています。。
当方、超初心者です。
現在、CGIのページで携帯のチャットサイトを作っています。
携帯の機種名を取得して表示したいのですがうまくいきません。
-----------------------------------------------------------
sub html_view {
&html_header;
if ($FORM{'mode'} eq 'reg') { &html_form2; }
else { &html_form1; }
@DATA = &read_file($datefile);
$kizi = @DATA;
if($kizi >= $max_page) { $dataview = $max_page; }
elsif($kizi < $max_page) { $dataview = $kizi; }
foreach (0 .. ($dataview - 1)) {
local($date,$name,$com,$cl) = split(/,/,$DATA[$_]);
chop($cl);
print "<HR SIZE=1>\n";
$name =~ s/\0/,/g;
$com =~ s/\0/,/g;
print "<FONT COLOR=\"$cl[$cl]\">$name</FONT>\>$com<br>★($date)\n";
}
&html_footer;
exit;
}
-----------------------------------------------------------
上記のソースの★の部分に携帯の機種名を表示したいのです。
0548デフォルトの名無しさん
2009/12/31(木) 22:33:51二回書き込んでしまいました。
0549デフォルトの名無しさん
2009/12/31(木) 22:57:52httpヘッダ出力してねえのに、エラー出ない訳ないわなw
0550デフォルトの名無しさん
2009/12/31(木) 22:58:22cgiに関することはスレ違い
0551デフォルトの名無しさん
2009/12/31(木) 23:36:24ありがとうございました!
やってみます!
>>550
すみません。
適切なスレを探したいと思います。
0552デフォルトの名無しさん
2010/01/01(金) 12:38:21http://pc11.2ch.net/php/
こっちからPerlでスレ検索
0553デフォルトの名無しさん
2010/01/02(土) 22:02:35簡単な例で説明してくれると嬉しいです。
p 文字列へのポインタ
P 構造体 (固定長文字列) へのポインタ
0554デフォルトの名無しさん
2010/01/02(土) 22:30:030555デフォルトの名無しさん
2010/01/02(土) 23:01:28どうunpackすれば?
0556デフォルトの名無しさん
2010/01/02(土) 23:07:310557デフォルトの名無しさん
2010/01/03(日) 00:27:130558デフォルトの名無しさん
2010/01/03(日) 09:24:59wperl を使ってウィンドウを出さない状態で
実行したいのですが、スクリプトの中で
バッククォートとか system を使うと、
DOS窓が出てきてしまいます。
DOS窓を出さずに、相当のことができる方法は
何かありますでしょうか?
0559デフォルトの名無しさん
2010/01/03(日) 09:46:41ていうか今時バッククオートとか有り得ないから。
同等の機能を持ってるモジュールがあるはずだから、
ググって探せ。
0560デフォルトの名無しさん
2010/01/03(日) 10:16:18一発じゃ無理じゃないんかなあ。
unpack使いたいなら、一旦普通にunpackしてMSB立ってたら1の補数を取れ。
それか一旦4バイト列にするかだが、補数取る方がコスト低い希ガス。
0561デフォルトの名無しさん
2010/01/03(日) 10:17:08○2バイト
0562デフォルトの名無しさん
2010/01/03(日) 17:12:03日本語処理の正規化について
これを読めば一通り理解できるってサイトや書籍ってありますか?
もしくは何らかのヒントが欲しい。
0563デフォルトの名無しさん
2010/01/03(日) 22:54:51「日本語処理の正規化」ってどういうこと?
内部エンコーディングのUTF-8で扱う、って話なら
「perl encode」でググれ
0564デフォルトの名無しさん
2010/01/04(月) 00:01:41情報科学の最近の課題なのかと思った
0565デフォルトの名無しさん
2010/01/04(月) 00:05:310566デフォルトの名無しさん
2010/01/04(月) 01:02:14具体的にこれこれこういう処理をPerlで実装したいとか言うんならともかく。
0567デフォルトの名無しさん
2010/01/04(月) 01:07:210568デフォルトの名無しさん
2010/01/04(月) 02:38:020569デフォルトの名無しさん
2010/01/04(月) 08:57:200570デフォルトの名無しさん
2010/01/04(月) 09:29:00お前が言ってるのはこの手合いか?
http://www.amazon.co.jp/dp/4320122380/
Perl全然関係ないんですけど。
0571デフォルトの名無しさん
2010/01/04(月) 13:55:590572デフォルトの名無しさん
2010/01/04(月) 14:06:20いい感じのフリースクリプトのページを見つけたのですが、全然意味がわかりません!
http://homepage1.nifty.com/kkuri/computer/ExAuction.html
ここに載ってるスクリプトをどなたか解説していただけませんか??(涙)
0573デフォルトの名無しさん
2010/01/04(月) 14:07:47…私はWEBプログラミング板で質問するべきだったのでしょうか??
失礼しました!
0574デフォルトの名無しさん
2010/01/04(月) 19:28:02if (($userid eq 'root') and ($action eq 'scoredsply')) {&scoredsply;}
if ($action eq 'calldsply') {&calldsply;}
elsif ($action eq 'formdsply') {&formdsply;}
elsif ($action eq 'accept_sell') {&accept('accept_sell');}
elsif ($action eq 'accept_buy') {&accept('accept_buy');}
elsif ($action eq 'cancel_sell') {&accept('cancel');}
elsif ($action eq 'cancel_buy') {&accept('cancel');}
elsif ($action eq 'call_sell') {&callsave('sell');}
elsif ($action eq 'call_buy') {&callsave('buy');}
elsif ($action eq 'call_mess') {&callsave('message');}
elsif ($action eq 'ses_start') {&session_start;}
elsif ($action eq 'ses_end') {&session_end;}
elsif ($action eq 'logoff') {&logoff;}
elsif ($action eq 'final') {&final;}
elsif ($action eq 'newauction') {&newauction;}
elsif ($action eq 'backup') {&backup;}
elsif ($action eq 'payofftable') {&payofftable;}
elsif ($action eq 'pricetable') {&pricetable;}
elsif ($action eq '') {&framedsply;}
exit;
どういう処理がなされているのでしょうか?
0575デフォルトの名無しさん
2010/01/04(月) 19:37:250576デフォルトの名無しさん
2010/01/04(月) 20:01:350577デフォルトの名無しさん
2010/01/04(月) 20:58:32で済みそうな。
0578デフォルトの名無しさん
2010/01/04(月) 22:22:140579デフォルトの名無しさん
2010/01/04(月) 22:22:250580デフォルトの名無しさん
2010/01/04(月) 23:35:22スマートに書こうと無駄な努力をしがち
0581デフォルトの名無しさん
2010/01/05(火) 00:31:11ていうかwebprog板で報酬を要求されたからって
こっちに戻ってきてもいいことないぞ
0582デフォルトの名無しさん
2010/01/06(水) 02:23:35ある文字列について一定確率で文字を置換するプログラムを作りたいのですが
いくつか条件があるために頭が混乱してしまいます。
そもそも一定確率でランダムに置換する方法が分からないのですが・・。
条件1.一文字一文字に対して一定確率で文字置換が起こるようにする。
条件2.置換を起こさない文字もある。
----------------
AADBCCBCDACA
| | || |
BADCAACCDABA
----------------
上の例で言えば
条件2:Dは置換することはない
条件1:A,B,Cはそれぞれ一定の確率で、A,B,Cのいずれかの文字に置き換わる。
例では1/2。*結果的には1/2になっていなくても良い。
置換後の配列と元の配列それぞれのABCの含有量は一緒でなくても良い。
文字を一文字ずつ認識することはできているのですが、この先どうすればいいのでしょうか。
ご指導よろしくお願いします。
0583デフォルトの名無しさん
2010/01/06(水) 02:25:450584デフォルトの名無しさん
2010/01/06(水) 02:55:40'A' => 0.5,
'B' => 0.5,
'C' => 0.5,
'D' => 1,
);
foreach (split//,'AADBCCBCDACA') {
$s .= rand(1) < $r{$_} ? $_ : ('A','B','C')[rand(3)];
}
print $s;
0585デフォルトの名無しさん
2010/01/06(水) 02:58:170586デフォルトの名無しさん
2010/01/06(水) 03:06:200587デフォルトの名無しさん
2010/01/06(水) 03:38:28'A' => 0.5,
'B' => 0.5,
'C' => 0.5,
'D' => 1,
);
print join ('',map {rand(1) < $r{$_} ? $_ : ($_ eq 'A' ? ('B','C')[int rand(2)] : ($_ eq 'B' ? ('A','C')[int rand(2)] : ('A','B')[int rand(2)] ) );} split//,'AADBCCBCDACA');
0588デフォルトの名無しさん
2010/01/06(水) 03:44:08寝よう…
0589デフォルトの名無しさん
2010/01/06(水) 04:13:420590デフォルトの名無しさん
2010/01/06(水) 04:18:35$l="ABC";
s/[$l]/int rand 2?(grep$&ne$_,split"",$l)[rand -1+length$l]:$&/eg;
print;
ABCが置換される確率1/2固定だけど
0591デフォルトの名無しさん
2010/01/06(水) 09:12:000592デフォルトの名無しさん
2010/01/06(水) 09:15:19$foo{log} = "$time: written\n";
みたいなクオート略記を多用するなら全部覚える必要あり。
ついでにインポートした関数もな。
ちなみに上記はlogが予約語なので期待した動作をしない。ありがちなミスの例として有名。
0593デフォルトの名無しさん
2010/01/06(水) 09:16:13三項演算子の条件部で各文字の確率と比較してあげればいいよね。
my $str = "AADBCCBCDACA";
my %r = (
A => 0.5,
B => 0.5,
C => 0.5,
D => 1,
);
my @chrs = grep $r{$_} != 1, keys %r;
$str =~ s/(@{[join '|', @chrs]})/
rand() < $r{$1} ? (grep $1 ne $_, @chrs)[rand $#chrs] : $1/eg;
0594デフォルトの名無しさん
2010/01/06(水) 09:31:35へーと思って試してみたけど特に不思議なことはないみたいなんだが??
% perl -MData::Dumper -e '$foo{log} = 1; print Dumper(\%foo)'
$VAR1 = {
'log' => 1
};
バージョンは
This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi
0595デフォルトの名無しさん
2010/01/06(水) 10:21:21http://codepad.org/lYxkZxCO
0596デフォルトの名無しさん
2010/01/06(水) 13:12:430597デフォルトの名無しさん
2010/01/06(水) 13:38:46ですから、
$array{ "aaa" }{ "bbb" }{ "ccc" }
の代わりに以下のように書けて:
$array{ aaa }{ bbb }{ ccc }
そして添え字が予約語であるかどうかを心配することはありません。以下のようなことがしたいという珍しい場合には:
$array{ shift }
裸の単語でないようにさせる何かを追加することで予約語であるように強制的に解釈させることができます。
$array{ shift() }
$array{ +shift }
$array{ shift @_ }
0598デフォルトの名無しさん
2010/01/06(水) 19:43:48ありがとうございます
親切にお答えいただいて
0599デフォルトの名無しさん
2010/01/06(水) 20:01:18仕様全部覚えようとすると圧倒的にダメな言語だなw
0600デフォルトの名無しさん
2010/01/06(水) 22:15:360601デフォルトの名無しさん
2010/01/06(水) 23:35:53同じソース上で動かすと問題なく可動し
ライブラリをrequireしようとすると
入力フォームから得たUTF8が表示されなくなります。
#!/usr/local/bin/perl
require 'getformdata.pl';
use utf8;
use encoding "utf8";
use open IO => ":utf8";
use open ":std";
use Encode;
open(OUT,">text.txt");
#本来は別途のライブラリを介して値を得たい
#%formdata=plab::getformdata();
%formdata=getformdata();
#同じソース上でしか、utf8を得られない。
print "content-type: text/html;charset=UTF-8\n";
print "\n";
while (($key, $val) = each(%formdata)) {
print "$key = $val<br>";
}
close(out);
0602デフォルトの名無しさん
2010/01/06(水) 23:38:48sub getformdata
{
local $rawdata;
local %formdata;
local @inputs;
local ($input,$name,$val);
if($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN,$rawdata,$ENV{'CONTENT_LENGTH'});
}
elsif($ENV{'REQUEST_METHOD'}eq "GET"){
$rawdata=$ENV{'QUERY_STRING'};
}
@inputs=split('&',$rawdata);
foreach$input (@inputs){
($name,$val)=split('=',$input);
$val=~tr/+/ /;
$val=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C",hex($1))/eg;
$formdata{$name}=$val;
}
return %formdata;
}
どうやったら別々のソース上でUTF8が表示できるようになるか教えてください。
0603デフォルトの名無しさん
2010/01/06(水) 23:40:31少し訂正。
package宣言はすでにしている物とします。
0604デフォルトの名無しさん
2010/01/07(木) 00:06:050605デフォルトの名無しさん
2010/01/07(木) 00:15:34実行結果は同じでした。同じソース上でサブルーチンした場合は
UTF8は表示されますが、ライブラリとして呼び出したらまるでUTF8
自体存在しなかったような挙動をとります。
0606デフォルトの名無しさん
2010/01/07(木) 00:17:030607デフォルトの名無しさん
2010/01/07(木) 00:20:320608デフォルトの名無しさん
2010/01/07(木) 00:59:37そうなることもあるだろうね
私も少し前までそうだったよ
0609デフォルトの名無しさん
2010/01/07(木) 04:02:27Fedora11を使用しています。
Perl v5.10.0で, utf8でコードを書いています。
例えば、
#!/usr/bin/perl
$str = "こんにちは。";
$buffer = $str;
while ($buffer) {
$letter = substr($buffer, 0, 1, "");
$out .= $letter ."";
}
print $out . "\n";
ならば、「こんにちは。」と表示させることができるのですが、
6行目を
$out .= $letter ." ";
とすると(ダブルクォーテーションの中に半角スペースを入れると)、
ハテナ文字が18個ぐらい続いて、文字化けします。
「こ ん に ち は 。 」と表示させたかったのですが、
この場合、どうすればよいでしょうか。
0610デフォルトの名無しさん
2010/01/07(木) 04:35:08substrなどの文字列操作関数が、バイト列のどこからどこまでが1文字なのか適切に判断出来るようになる。
0611デフォルトの名無しさん
2010/01/07(木) 07:19:47perl4の時の話じゃなかったっけそれ?Perl5.003でやったけど大丈夫だな。
詳しく調べてないけど、use strict subsで警告でないから問題ないんだろ。
思いつく例だと、
open(log, ">", "log.txt");
print log "hello\n";
これは問題になるわな。だかららくだ本では大文字推奨なわけだね。
まあ最近はそもそも裸のリテラルをファイルハンドルにするなって
話になってるけど。
0612デフォルトの名無しさん
2010/01/07(木) 07:24:20Perl vs PHPとかだとお互い様な気がするが、Javaとかとそこを比べられると辛い。
でもPerl好きな人はそういう言語仕様のお茶目なところが堪らんかったりするんだよ。
PHPの言語仕様の揺れは、お茶目というよりは単なる嫌がらせ。
PHP好きな人はたいていそういう言語仕様のお茶目なところに泣かされている。
0613デフォルトの名無しさん
2010/01/07(木) 08:37:000614デフォルトの名無しさん
2010/01/07(木) 15:25:04質問が来ないね。
やっぱ廃れた言語なんだね。
C言語はいっぱい質問が来るのに。
0615デフォルトの名無しさん
2010/01/07(木) 15:44:390616デフォルトの名無しさん
2010/01/07(木) 17:04:170617デフォルトの名無しさん
2010/01/07(木) 17:10:39これを表示させずにバックグラウンドで実行させる方法はありますか?
0618デフォルトの名無しさん
2010/01/07(木) 17:49:19my $n = 123.45;
print $n | 0; #=> 123
0619デフォルトの名無しさん
2010/01/07(木) 17:57:540620デフォルトの名無しさん
2010/01/07(木) 18:07:09お前がそう思うんならそうなんだろう。お前ん中ではな。
>>617
恐らくダブルクリックなら引数がつかないから、それを利用して自身を1度だけ呼び出すとか。
system("start /b cmd /c perl \"$0\" 1"),exit(0) if !@ARGV;
# バックグラウンド処理
0621デフォルトの名無しさん
2010/01/07(木) 18:10:59systemの実行が終わるのを待ってからexitするので意味がなかった。
0622デフォルトの名無しさん
2010/01/07(木) 18:17:540623デフォルトの名無しさん
2010/01/07(木) 22:51:29そのとーりです。
どうもありがとう
0624デフォルトの名無しさん
2010/01/07(木) 23:20:18#!/usr/bin/perl -w
use strict;
use Win32;
my $old = Win32::SetChildShowWindow(0); # 小プロセス起動時のコンソール表示無効化
my $retval_invisible = system 'dir';
# my $retval_invisible = `dir`;
Win32::MsgBox qq(system 'dir' executed: $retval_invisible);
Win32::SetChildShowWindow($old); # 復元
my $retval_visible = sytem 'dir';
# my $retval_visible = `dir`;
Win32::MsgBox qq(system 'dir' executed: $retval_visible);
__END__
0625デフォルトの名無しさん
2010/01/08(金) 04:29:36朝から悪戦苦闘してます
どうしてもわからないので、先輩方、教えてください
下記のような二桁の数字を羅列したtxtファイル(sample.txt)があったとします
64
72
88
55
77
33
29
94
86
で、二行目の72と七行目の29をれぞれ$aと$bに代入し
そんで、仮に$aは$bより10以上多い場合はtrueを返すというスクリプトを作りたいんですが・・・
open (IN, "sample.txt");
このあとがもうわかりません!><
説明不足かも知れませんが、よろしくおながいします
ちなみに、上戸彩に似てるって言われます、Dカップの処女です
0626デフォルトの名無しさん
2010/01/08(金) 04:32:590627デフォルトの名無しさん
2010/01/08(金) 05:30:16Perl使う人はリテラシー高い人が多いのでYahoo!知恵袋みたいな
情報精度の極端に低いものは使いません。
Cの質問が多いのはどう見ても学校の宿題。
0628デフォルトの名無しさん
2010/01/08(金) 07:42:14依頼されたツールを誰かが作るスレ
http://pc11.2ch.net/test/read.cgi/php/1078997682/
0629デフォルトの名無しさん
2010/01/08(金) 14:36:58しかし結果がうまくいきません。どこが間違っているのでしょうか?
予定:2009-September-14 08:52:12
結果:2009-September-September September
-----
$DATE_FORMAT{'hoge'} = '^([a-zA-Z]+) (\d{1,2}), (\d{4}) (\d{2}:\d{2}:\d{2}).*';
@DATE_ARRAY{'hoge'} = (2,0,1,3); # 年月日 時分秒の順番を指定
$pattern_id = 'hoge';
$date_str = 'September 14, 2009 08:52:12 PDT EST';
&date_cnv($pattern_id,$date_str);
sub date_cnv {
my($id,$date)=@_;
my(@date_array) = @DATE_ARRAY{$id};
$date =~ /$DATE_FORMAT{$id}/;
my(@factor) = ($1,$2,$3,$4);
print qq|$factor[$date_array[0]]-$factor[$date_array[1]]-$factor[$date_array[2]]|.
qq| $factor[$date_array[3]]|;
}
----
print (@factor); で確認すると、@factorには期待していた値がちゃんと入っているようなのですが・・・
0630デフォルトの名無しさん
2010/01/08(金) 14:45:58@date_arrayも確認しろよ
0631デフォルトの名無しさん
2010/01/08(金) 14:50:47たぶん君がやりたいことは @{$DATE_ARRAY{'hoge'}}
0632デフォルトの名無しさん
2010/01/08(金) 15:06:31あ、すみません。値が変ですね... [0] に 2 が入ってて、あとは空だ・・・
2行目のmy(@date_array)が期待通りいってないですね..
>>631
@{$DATE_ARRAY{'hoge'}} = (2,0,1,3);
おおおおお、こうすればうまくいきました!!
うまくいかなかった理由をもう少し勉強してみます。。。さんくす!!
0633デフォルトの名無しさん
2010/01/08(金) 15:33:21my $date_str = 'September 14, 2009 08:52:12 PDT EST';
print strftime( '%Y-%B-%d %T', strptime( '%B %d, %Y %T', $date_str ) );
0634デフォルトの名無しさん
2010/01/08(金) 16:44:02それは宿題だな。宿題スレへ逝け、....と言っても無いみたいだな。
Perlの宿題スレでも作ったら?
0635デフォルトの名無しさん
2010/01/09(土) 01:55:22立てずともこの辺のゴミスレをリサイクルすればよろし。
俺の課題を誰か作ってくれ!!
http://pc12.2ch.net/test/read.cgi/tech/1169822971/
プログラムをしたいけどなにしたらいかおしえて
http://pc12.2ch.net/test/read.cgi/tech/1214703631/
大卒ニーツです。プログラムマスターしたいです。
http://pc12.2ch.net/test/read.cgi/tech/1175864871/
何を作ればいいですか?
http://pc12.2ch.net/test/read.cgi/tech/1172057161/
0636デフォルトの名無しさん
2010/01/09(土) 04:01:32close IN;
my($a,$b)=(72,29);
print 'true' if $a>$b+10;
0637デフォルトの名無しさん
2010/01/09(土) 14:55:48my ($a,$b) = $_[2,7];
return $a>$b+10 ? 'true' : 'false';
}
0638デフォルトの名無しさん
2010/01/09(土) 17:38:13open (IN, "sample.txt");
return 'ture';
}
0639デフォルトの名無しさん
2010/01/09(土) 17:47:03open (IN, "sample.txt");
print 'ずっと前から先生の事が好きでした';
}
0640デフォルトの名無しさん
2010/01/09(土) 18:34:100641デフォルトの名無しさん
2010/01/09(土) 22:30:59$x=1;
$y=43;
$g=0;
$sum=0;
while($y){
$g=length($y);
if($g==1)
{
unshift(@a,$y);
last;
}
if($g!=1)
{
$xx=10*($g-1);
unshift(@a,$y%$xx);
$y=$y/$xx;
redo;
}
}
print "@a\n";
43を一つずつ10^桁数で割ってそのあまりを入れてるんですが
43って出力されるはずなんですが、出力結果が。
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 3
となってしまうのは何故ですか?
教えてください。
0642デフォルトの名無しさん
2010/01/09(土) 22:55:11最初の $y /= $xx は $xx == 10 だから $y eq "4.3" になって次の length($y) が 3 。
以降 $y を割り続け、アンダーフローして 0 になった時に $g == 1 == length($y) になって
while から抜ける。
詳しくは「浮動小数点数」でウィキペドれ。
0643デフォルトの名無しさん
2010/01/09(土) 23:54:070644デフォルトの名無しさん
2010/01/10(日) 00:15:55$y=($y-($y%$xx))/$xx;
でいけた。
0645デフォルトの名無しさん
2010/01/10(日) 01:52:15#BMI値の計算
$tall=165;
$weight=65;
$tall=$tall/100;
$bmi=$weight/$tall/$tall;
print "あんたのBMIは$bmi\n"
#判定
if ($bmi >= 30) {print "救えないデブだな!!\n";}
elsif ($bmi >= 25) {print "このデブが!!\n";}
elsif ($bmi >= 18) {print "普通だ!つまらないね!!\n";}
else {print "カマキリみたな体してるね!!\n";}
0646デフォルトの名無しさん
2010/01/10(日) 02:04:110647デフォルトの名無しさん
2010/01/10(日) 02:28:40ありがとう。くだらなすぎてびっくりした
0648デフォルトの名無しさん
2010/01/10(日) 06:57:14環境によっちゃエラーにならないってことか
0649デフォルトの名無しさん
2010/01/10(日) 07:22:410650デフォルトの名無しさん
2010/01/10(日) 08:36:30ifの前は;抜けてもエラーにならないのか
0651デフォルトの名無しさん
2010/01/10(日) 08:42:34ブロックが続くと後置でないことがバレるみたいだけど。
0652デフォルトの名無しさん
2010/01/10(日) 09:00:32まあ、セミコロンは見た方が良いやね
セミコロン忘れがちな俺は、エディタの強調文字列としてセミコロンを登録して
それを一番目立つ色+太字にしてるぜ
0653デフォルトの名無しさん
2010/01/10(日) 09:15:22出力されないんじゃなくて、やっぱりコンパイルが通ってない筈
0654デフォルトの名無しさん
2010/01/10(日) 18:13:4116進数と符号付き10進数で表示したいのですが、
なぜか符号なし10進数として表示されてしまいます。
read(INPUTFILE,$buf,2);
$value = unpack("n", $buf );
printf("HEX : %04X¥n", $value);
printf("DEC: %d¥n", $value);
出力
HEX: FFFC
DEC: 65532
FFFCは-4なのに、符号なしと解釈されて65532になっています。
unpackで"n"としたときに、符号なしと決めうちになってしまうのでしょうか。
0655デフォルトの名無しさん
2010/01/10(日) 18:19:100656デフォルトの名無しさん
2010/01/10(日) 18:19:240657デフォルトの名無しさん
2010/01/10(日) 22:01:420658デフォルトの名無しさん
2010/01/10(日) 22:58:16よくコロンと打ち間違える俺もそうしてる:
0659デフォルトの名無しさん
2010/01/11(月) 05:00:18> なんでnetworkって言うんだろう
networkを流す時のバイトオーダーをそう決めたから。
0660デフォルトの名無しさん
2010/01/11(月) 09:07:500661デフォルトの名無しさん
2010/01/11(月) 09:23:27マシだと思うが。
0662デフォルトの名無しさん
2010/01/11(月) 12:47:32org_methodを次のような別名定義により書き換えをおこないました。
*old_method = \&org_method; #オリジナルに別名を割り当て
*org_method = \&my_method; #書き換えたメソッドをオリジナルの名前に割り当て
sub my_method {...}
プログラム動作は正常ですが「メソッドを再定義した」というエラーがログに残ってしまいます。
=>Subroutine Hoge::org_method redefined
呼び出し頻度の高いメソッドなので、あっという間にログが埋まってしまうありさま・・・
コードが微妙に誤っているのか・・・
このメッセージが出ないように対処することは可能でしょうか?
0663デフォルトの名無しさん
2010/01/11(月) 12:52:55何いってんだお前
0664デフォルトの名無しさん
2010/01/11(月) 13:01:41特に問題ないなら警告消せばいいだろ
no warnings 'redefine';
0665デフォルトの名無しさん
2010/01/11(月) 13:10:34warningsも個別に制御できるんですね。ありがとうございます。
個別のテストでは警告もなかったので、どうも1回の実行のうちの複数箇所で
このモジュールが読み込まれているからだと思います。
モジュール内に直接書かない方がいいのかな・・・。
0666デフォルトの名無しさん
2010/01/11(月) 14:46:52何度も呼ばれるサブルーチンの中で再定義してるんじゃないの?
0667デフォルトの名無しさん
2010/01/11(月) 15:00:51そのモジュールはなんなんだ?
OOPで書いたのか?関数のセットとして書いたのか?
0668デフォルトの名無しさん
2010/01/11(月) 17:34:15そのモジュール読むときには、useやrequire使ってるよね?
(他の方法だと1つのファイルが複数回読み込まれることがある)
0669デフォルトの名無しさん
2010/01/12(火) 10:49:28requireは複数回読むことがあると思うんだが。
0670デフォルトの名無しさん
2010/01/12(火) 11:41:04%INCをいじるとか、同じファイルを指すけど字面的には別なファイル名で
指定する、といったような特殊なことをしない限り2回読むことはないはず
じゃなかったっけ。
0671デフォルトの名無しさん
2010/01/12(火) 11:47:46どういう場合で?
http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_require
do なら特別な事をせずとも呼ばれた回数だけ読むけれど。
http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_do_EXPR_do
>>662
OO的に行儀のいい書き方だと、親の名前空間を直接いじったりしない。
http://perldoc.jp/docs/perl/5.10.0/perlboot.pod
http://perldoc.jp/docs/perl/5.10.0/perlbot.pod
0672デフォルトの名無しさん
2010/01/12(火) 12:22:54> 同じファイルを指すけど字面的には別なファイル名で
それ。1回目フルパス、2回目相対パスとか。やってみてないから分からんけど、
確かRequireはその欠点があったはず。
0673デフォルトの名無しさん
2010/01/12(火) 12:43:270674デフォルトの名無しさん
2010/01/12(火) 12:45:54% cat hoge.pl
print "hoge!!!\n";
% perl -e 'require "hoge.pl"; require "./hoge.pl";'
hoge!!!
hoge!!!
% perl -e 'require "hoge.pl"; undef %INC; require "hoge.pl";'
hoge!!!
hoge!!!
0675デフォルトの名無しさん
2010/01/12(火) 13:00:20字面が違うと複数回読む挙動が欠点と言うより、
違う字面で複数回指定してしまう設計・実装の方がマズく思えるな。
>>673
use はモジュール名での指定に限られるから、@INC 内で最初に
見つかるファイルに限定される。更にコンパイル時に読まれるから
>>674 みたくわざと %INC を改変して eval "use Foo" のように
しない限り複数回読む事は無いよ。
0676デフォルトの名無しさん
2010/01/12(火) 14:28:26ないよ。文脈中じゃなくて初回に読まれるから%INC変えても意味ないし。
0677デフォルトの名無しさん
2010/01/12(火) 14:29:440678デフォルトの名無しさん
2010/01/12(火) 20:39:44簡易的なバックアップシステムを作ろうとしているのですが、そのコアの部分で悩んでいます。
以前のバックアップから変更があったファイルのみを抽出したいと思っているのですが、どのような方法がありますでしょうか?
抽出と言うのはファイル名(PATH)さえわかれば、そのファイルをコピーする作業は行えています。
現在考えているのは、バックアップを行った時点でファイル名とファイルサイズの対応表を作っておき、次回にバックアップを行うときに、その時点でのリストを作り以前のリストと比較。
その比較の結果、ファイルサイズや新たに追加されたファイルがあればコピー。
以前のリストにあり、最新のリストにないファイルは削除。
というようなことを考えています。
ですが、これだと編集後に同じ要領になったファイルが検出できないと思います。
ファイルのチェックサムを作れば、ファイル名ではなくそのチェックサムで確認が行えると思うのですが、バックアップファイルが数千や数万になることを考えると、チェックサムは現実的でない気がしています。
何か効率のいい方法や、やりかたがあればお教えいただければと思います。
どうかよろしくお願い致します。
0679デフォルトの名無しさん
2010/01/12(火) 20:50:420680デフォルトの名無しさん
2010/01/12(火) 20:59:44カレントディレクトリ配下にあるファイル名の一覧ってどうやって入手すんの?
globでやるとカレントディレクトリにあるファイル一覧しかとれん
0681デフォルトの名無しさん
2010/01/12(火) 21:00:260682デフォルトの名無しさん
2010/01/12(火) 22:04:28わざわざ作らず rsync を使う。
>680
一発じゃないけど File::Find 使えば?
0683デフォルトの名無しさん
2010/01/12(火) 22:42:44と気になって「rsync perl」でググったら検索トップだったw
0684デフォルトの名無しさん
2010/01/12(火) 23:53:04ぼくは、filenameとsizeとi-nodeとmtimeが一致したら同じと見なすという妥協をやっている。
0685デフォルトの名無しさん
2010/01/13(水) 01:04:560686デフォルトの名無しさん
2010/01/13(水) 03:59:040687デフォルトの名無しさん
2010/01/13(水) 07:19:13俺もrsync推しとく。君が言ってる面倒なことは全部やってくれて、
なるべく少ない転送量で済ませてくれるから。
rsyncはどんだけ転送量を節約したか表示されるが、それを抜くのは困難だと思われ。
あとチェックサムは桁が概して小さすぎるし、文字の入れ替えで同じ結果が出たりするから、
現在はメッセージダイジェストなどを使うのが一般的。
0688デフォルトの名無しさん
2010/01/13(水) 22:14:26この新ログファイルでは新しく増えた行、旧ログファイルより削除された行があります。
この増えた行、削除された行を抽出したいのですが、どうすればいいでしょうか?
私が考え付いたのは、 旧ファイルを配列に読み込む。
配列より1行づつ新ファイルと比較する。
新ファイルに無ければ、削除された行。
上述の逆を行い、旧ファイルに無ければ追加された行。
というのをかんがえています。
0689デフォルトの名無しさん
2010/01/13(水) 22:15:14CPANからDevel-Profiler-0.04.tar.gzをダウンロードしてきてreadmeのとおりにインストールしたのだけど
nmake testで
C:\bin\Perl\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib\lib', 'blib\arch')" t/*.tt/01basic.t .......
Not a GLOB reference at C:\bin\Perl\cpan\build\Devel-Profiler-0.04-K04u79\blib\lib/Devel/Profiler.pm line 155.
INIT failed--call queue aborted.
とでて完走せず。。
0690デフォルトの名無しさん
2010/01/13(水) 22:31:510691デフォルトの名無しさん
2010/01/14(木) 00:35:49A-A-A-B-B-B-A-B-B-A-B-A (要素数12)
Bがあったら、それより前のAに吸収させたいのですが、
A-A-ABBB-ABB-AB-A (要素数6)
どうやればいいでしょうか?
0692デフォルトの名無しさん
2010/01/14(木) 00:42:16ppmではDevel-ProfilerでもDevel::Profilerでもそんなパッケージ見つからねえぞと言われた;;
Devel-Profiler以外のものでもactiveperlで使えるプロファイラがあれば教えてください・・
0693デフォルトの名無しさん
2010/01/14(木) 00:44:51makeとかコンパイラは入れたの?
0694デフォルトの名無しさん
2010/01/14(木) 00:52:43VisualStudio2008を入れてる。
CPANのConfig.pmでmakeはnmake使えとかいう設定を済ませてあるので
そのへんは大丈夫だと思うんだけども・・
0695デフォルトの名無しさん
2010/01/14(木) 01:09:160696デフォルトの名無しさん
2010/01/14(木) 01:37:30my @data = (元データ);
my ($append_to, $i);
for (@data) {
if (/^ひづけ/) {
$append_to = $i;
}
else {
$data[$append_to] .= $_;
undef $_;
}
$i++;
}
@data = grep defined, @data;
# てきとう
>>694
とりあえずStrawberryPerlでも試してみたら
0697デフォルトの名無しさん
2010/01/14(木) 01:43:23それは一度環境を構築したActivePerlから乗り換えろってことを言ってんのか
結構無茶いうね
0698デフォルトの名無しさん
2010/01/14(木) 01:48:39ActiveState以外のレポジトリも当たってみたのか?
0699デフォルトの名無しさん
2010/01/14(木) 02:42:00原因特定のために別の環境でも試してみたらってことを言いたかったんだが…
今Linuxで試したら>>689のエラーが出たからActivePerlのせいではないな。
forceでインストールしても実際使おうとすると同じエラーが出る。
0700デフォルトの名無しさん
2010/01/14(木) 04:07:05乗り換えもぜんぜん無茶じゃないと思うがなぁ
ppm listで導入したモジュールを調べて、cpanで入れるバッチを組むだけでしょ
0701デフォルトの名無しさん
2010/01/14(木) 09:13:47ttp://d.hatena.ne.jp/perlcodesample/20091106/1246274997
0702デフォルトの名無しさん
2010/01/14(木) 10:52:25それはあらかじめ用意しなくてもよくなったという話じゃないのかな。
0703デフォルトの名無しさん
2010/01/14(木) 11:20:585.10はデフォで動くのか。
他人にperlを勧めるときは良いかも。
0704デフォルトの名無しさん
2010/01/14(木) 12:41:38今までもMinGW入れれば良かったんだけど、より手軽になった
ppmも使えるしね
0705デフォルトの名無しさん
2010/01/14(木) 14:12:49そうゆうときはdiffを使う
0706デフォルトの名無しさん
2010/01/14(木) 15:51:45CPAN Testerを見ると5.10はみんなFAILしてるからダメなんじゃ
0707デフォルトの名無しさん
2010/01/14(木) 16:10:15Perlのバージョンじゃね?
0708689
2010/01/14(木) 20:11:22今日いろいろ聞いてまわったら今は後継のDevel-Profileを使うのが定石らしいです。
(昨日ぐぐりまくってたけど1字違いで検索にかからなかった・・)
こちらはppmであっさりインストール完了。
Devel-Profilerとほぼ同じ情報を提示してくれます。
ということで参考になれば。
0709デフォルトの名無しさん
2010/01/14(木) 23:45:41>配列より1行づつ新ファイルと比較する。
1行毎に新ファイルの全行と比較するって言ってるんだよね?
longest common subsequence と呼ばれる問題(の派生)で賢い人々がもっと効率的なアルゴリズムを考えてるから
>705 の言うとおり diff 呼び出すか diff がなければ Algorithm::Diff あたりを使えばいい。
0710デフォルトの名無しさん
2010/01/14(木) 23:50:33splitし、所定のフィールドの値を関数の戻り値に置き換え、必要なフィールドだけをjoin
して別のファイルに書き出していく、という処理を書いたのですが、Core2Duo 3.16GHz/
2GB-RAMなWinXP環境でActivePerl5.8.8で実行させたところ、70分くらいかかって
しまいました。CPUパワーは平均して2/3程度占有していました。
3000万件あるのである程度は仕方ないにしても、このような処理を高速で行うために有効な
方法がなにかありますでしょうか。
0711デフォルトの名無しさん
2010/01/15(金) 00:22:34Cでこんな感じでやるような、、
#if 0
#endif
今は
if (0) {}でやってます。
0712デフォルトの名無しさん
2010/01/15(金) 00:43:02まと
まった
行
=cut
0713デフォルトの名無しさん
2010/01/15(金) 01:19:260714デフォルトの名無しさん
2010/01/15(金) 01:31:47色々やりかたがあるんですね。ありがとうございました。
0715デフォルトの名無しさん
2010/01/15(金) 01:52:10以下のようにやると出来たのですが、Perlのワンライナーの書き方として正しいでしょうか?
grep "XXXX" *.log | perl -ne 'if ($_ =~ /(\d\d\d\d\-\d\d\-\d\d \d\d:\d\d:\d\d)/) { print $1,"\n";}'
0716デフォルトの名無しさん
2010/01/15(金) 02:39:55ワンライナーの書き方に正しいも何もないと思うけど、期待通りに動いてるならそれでいいだろ。
ただそれだと日時が行の先頭以外にあっても抜き出しちゃうけど。
grep無しで書くとこんな感じか。
perl -lne 'print $& if /XXXX/ && /^\d{4}-\d\d-\d\d \d\d:\d\d:\d\d/' *.log
0717デフォルトの名無しさん
2010/01/15(金) 11:20:54sub isNumeric {
$a * 1 == $a;
}
0718デフォルトの名無しさん
2010/01/15(金) 11:28:59$aやめれとか引数の受け取り方がなってないというのは置いといて、
数値に見えない文字列は0扱いだから0 * 1 == 0になって、判定式
が成り立っちゃうぞ。もう少しよく考えよう。
0719デフォルトの名無しさん
2010/01/15(金) 12:52:460720デフォルトの名無しさん
2010/01/15(金) 23:28:33aaa
$str
bbb
--
というファイルtestを作って
$str = 'xxx';
open(READR,"<test");
while(<READR>) { $buf .= $_; } close(READ);
print $buf;
を実行するとそのまま出力されるのですが、
aaa
xxx <--- ここ
bbb
と表示するようにする方法はないでしょうか?
今はテキスト置換で無理矢理やってるんですけど、いい方法があれば教えてください。
0721デフォルトの名無しさん
2010/01/15(金) 23:58:100722デフォルトの名無しさん
2010/01/16(土) 00:00:11楽だけどお勧めはしない
0723デフォルトの名無しさん
2010/01/16(土) 00:06:41evalっぽいなと思ってたんですけど、使い方がよくわからなくてうまくいきませんでした。
>>721
えっと、最後の print $buf; 行をそれに変えてみましたがエラーになってしまうんですけど、
フォローいただけると助かります。
>>722
そうですか。普通の置換でやるのがベストでしょうか?
0724デフォルトの名無しさん
2010/01/16(土) 00:12:21print eval '"' . $buf . '"';
0725デフォルトの名無しさん
2010/01/16(土) 00:16:03自己解決できなくてすみまそんw
eval で '"' なんてするとは全然思いつきませんでした。
もう少し勉強してみます
0726デフォルトの名無しさん
2010/01/16(土) 00:17:020727デフォルトの名無しさん
2010/01/16(土) 00:22:11�d!
ちょっといじって
s/\$([A-Za-z_]\w*)/$$1/g
でいきましたー
いろんな方法があるもんですね・・・参考になりますた!
0728デフォルトの名無しさん
2010/01/16(土) 00:23:350729デフォルトの名無しさん
2010/01/16(土) 00:25:570730717
2010/01/16(土) 03:36:10すんません、もしもしから書いててshift入れるの忘れてました。
結局そのブロック内だけno warningsしてとりあえずは動きました。
移行スクリプトなので、現行のデータで動けばいいやと妥協しましたorz
0731デフォルトの名無しさん
2010/01/16(土) 06:31:13IO::Pipeで立ち上がったプロセスにシグナルを送りたいんですけど
立ち上がったプロセスのIDってどうやれば取得できますか?
----
my $pipe = IO::Pipe->new;
$pipe->reader(qw{./hoge arg1 arg2 arg3});
# 処理
my $pipe_pid = q{hogeのプロセスIDが欲しい};
kill 10, $pipe_pid;
----
pkillやpgrepだと他のhogeプロセスまで拾っちゃうし。。。
どうすればいいのか分かりません ><
0732731
2010/01/16(土) 06:55:28perldoc -m IO::Pipe
でソース見たら
${*$pipe}{'io_pipe_pid'}
でとれました。
0733デフォルトの名無しさん
2010/01/16(土) 10:04:15その用途には大仰かもしれないが Text::Template 辺りを使うって方法もあるよ。
0734デフォルトの名無しさん
2010/01/16(土) 17:00:342010年にこんなコンテンツを公開するなんて驚き。
即刻公開停止を求めるべきじゃね?
0735デフォルトの名無しさん
2010/01/16(土) 17:03:10&jcode'convert(*company, 'euc');
すでにこれ読めない人とかいるんじゃないだろうかw
0736デフォルトの名無しさん
2010/01/16(土) 17:16:420737デフォルトの名無しさん
2010/01/16(土) 17:24:12for $c(split(//,$mail)){
if($c =~ /[0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\-\_\@\.]/){
} else {
$mail_error = "-";
&error;
}
}
oh...
0738デフォルトの名無しさん
2010/01/16(土) 17:34:020739デフォルトの名無しさん
2010/01/16(土) 18:21:220740デフォルトの名無しさん
2010/01/16(土) 20:23:28while(<FH>)
{
chomp($user=<FH>);
last;
}
open PH,"pass.txt";
{
chomp($pass=<PH>);
last;
}
$passには値が読み込まれるんですが
なぜか$userには値が読み込まれません
誰か教えてください。
0741デフォルトの名無しさん
2010/01/16(土) 20:35:31もしそうだとすれば、<FH>を2回読んでるので$userが空であることにほぼ間違いないと思います。
1行しかないならchomp($user=<FH>)
複数行ならwhile(<FH>){chomp($user=$_);}
0742デフォルトの名無しさん
2010/01/16(土) 21:07:03昔の書き方だって書いてあったと思う
0743デフォルトの名無しさん
2010/01/16(土) 21:31:060744デフォルトの名無しさん
2010/01/16(土) 23:02:460745デフォルトの名無しさん
2010/01/16(土) 23:49:580746デフォルトの名無しさん
2010/01/16(土) 23:59:59while(chomp($buf=<SOCKET>))
とやるんですが、最初のログイン時のレスポンスコードが入り込んでしまい
うまく取得できません。
そこで、<SOCKET>の中身は
230----
331--password
530
となっています。
最初のwhileの繰り返しで230が入ってしまうんですが、これを230と331を読み込まず
530だけを取得するにはどうすればいいんでしょう。詳しい方教えてください。
seek(SOCKET,x,x)やsysseek(SOCKET,x,x)などで飛ばせるかと思ったんですがうまくいかず。
0747デフォルトの名無しさん
2010/01/17(日) 00:06:10いいんじゃないの?
0748デフォルトの名無しさん
2010/01/17(日) 08:31:50読み込むとパターンマッチ処理で実行速度が遅くなるので
なるべく飛ばして処理をしたいのですが、何か方法はないですか?
0749デフォルトの名無しさん
2010/01/17(日) 08:45:470750デフォルトの名無しさん
2010/01/17(日) 08:56:46たとえば2行捨てたいなら
$null = <SOCKET>;
$null = <SOCKET>;
でできるけど?
0751デフォルトの名無しさん
2010/01/17(日) 09:46:18そもそもstatus code以下の文字列は任意長だからseekしてもね
0752デフォルトの名無しさん
2010/01/17(日) 10:01:33で目的以外を読み飛ばす処理しか思いつかん
0753デフォルトの名無しさん
2010/01/17(日) 10:14:24while(<SOCKET>)
{
next if 1..2;
print "\n$_";
if($_=~/^230/)
{
$flg=1;
$okusr=$user;
$okpass=$pass;
last;
}
last;
}
気づかなかった。
どうもありがとうございました。
0754デフォルトの名無しさん
2010/01/17(日) 12:36:22Perlさんなめすぎ
0755デフォルトの名無しさん
2010/01/17(日) 13:00:53$buf = $buf[2];
0756デフォルトの名無しさん
2010/01/17(日) 18:05:440757デフォルトの名無しさん
2010/01/17(日) 18:13:040758デフォルトの名無しさん
2010/01/17(日) 18:19:210759デフォルトの名無しさん
2010/01/17(日) 21:22:59Parallel::ForkManagerと併用するとエラーでたから、
ソースちら見したらそんな気がした。
0760デフォルトの名無しさん
2010/01/17(日) 22:11:060761デフォルトの名無しさん
2010/01/19(火) 20:44:42base使ってたりMoose使ってたりグロブでメソッド生やしてたり、
モジュールによって実装方法がてんでばらばら
おまいらどうやって拡張したり継承したりしてますか
読むと幸せになれる本とかありますか
0762デフォルトの名無しさん
2010/01/19(火) 21:40:28http://perldoc.jp/docs/perl/5.10.0/perlboot.pod
http://perldoc.jp/docs/perl/5.10.0/perlbot.pod
0763デフォルトの名無しさん
2010/01/19(火) 22:06:40LWPを使うとひとつのURLを完全に取得し終えるまで次の処理にいけないので
threadsを使ってみたんだがthreads自体が重すぎて萎えた。
複数のURLを素早く軽快に取得するにはsocket使ってガリガリ書いてくしかないのかね・・
0764デフォルトの名無しさん
2010/01/19(火) 22:12:27LWP::Parallel::UserAgent
0765デフォルトの名無しさん
2010/01/19(火) 22:29:02おっとこんなに早くレスもらえるとは!
そんなのあったのねありがとー
0766デフォルトの名無しさん
2010/01/19(火) 23:34:48そんなんあったんだ
いつから?
0767デフォルトの名無しさん
2010/01/19(火) 23:57:24> Fri Mar 27 1998 Marc Langheinrich
> o First official CPAN release, version 2.31
いちおう貼っとくね。
http://search.cpan.org/~marclang/ParallelUserAgent-2.57/
0768デフォルトの名無しさん
2010/01/20(水) 13:44:00おそらく200くらいだと最速は、
AnyEvent::HTTP + Coro::AnyEvent + Coro + Coro::sephorma。
threadsは糞。
0769デフォルトの名無しさん
2010/01/20(水) 13:44:510770デフォルトの名無しさん
2010/01/20(水) 13:46:32http://d.hatena.ne.jp/unau/20100114/1263432308
0771デフォルトの名無しさん
2010/01/21(木) 10:34:37my @ary = ($str =~ /\d+/);
print @ary[0], "\n";
とやると、1と表示されるんですが、どうして123じゃないのでしょうか?
Greedyじゃなかったんでしょうか?
0772デフォルトの名無しさん
2010/01/21(木) 10:42:030773デフォルトの名無しさん
2010/01/21(木) 10:50:14my @ary = $str =~ /\d+/g;
0774デフォルトの名無しさん
2010/01/21(木) 10:57:17括弧があるのとないのとで動きが違ってくる理由がわかりません。。。
が、本当に違いますね。
0775デフォルトの名無しさん
2010/01/21(木) 11:07:150776デフォルトの名無しさん
2010/01/21(木) 11:13:240777デフォルトの名無しさん
2010/01/21(木) 11:24:28それはスカラーコンテキストの場合で、リストコンテキストのときは違うよ。
成功したときは、括弧を含むパターンなら、キャプチャーした文字列の
リスト、括弧がなければ(1)
失敗したときは空リスト
なので、今回の場合は括弧がないから(1)になった。
0778デフォルトの名無しさん
2010/01/21(木) 11:39:280779デフォルトの名無しさん
2010/01/21(木) 11:56:110780デフォルトの名無しさん
2010/01/21(木) 12:07:300781デフォルトの名無しさん
2010/01/21(木) 12:16:17/\d+/ : (1) #真。失敗時は ()
/(\d+)/ : ('123') #最初にマッチした部分の$1〜$9
/\d+/g : ('123', '456', '789', '012') #全ての$&
/(\d+)/g : ('123', '456', '789', '012') #全ての$1〜$9
#スカラーコンテキストの場合、マッチ成功時は 1 、失敗時は ''
scalar /\d+/ scalar /(\d+)/ scalar /\d+/g scalar /(\d+)/g
あと、誰か@ary[0]にも突っ込んでやれよ
0782デフォルトの名無しさん
2010/01/21(木) 12:39:50Perlのバージョンによるのかな
0783デフォルトの名無しさん
2010/01/21(木) 13:05:010784デフォルトの名無しさん
2010/01/21(木) 13:23:530785デフォルトの名無しさん
2010/01/21(木) 15:01:09コンテキストとかよくわからないし、、、
Perlってなにか奥が深いですね
0786デフォルトの名無しさん
2010/01/21(木) 16:59:250787デフォルトの名無しさん
2010/01/21(木) 18:41:54初心者はあまり気にしなくてもいいところ。
0788デフォルトの名無しさん
2010/01/21(木) 19:52:15> Perlってなにか奥が深いですね
「奥が深い症候群」でググっておいたほうがいい。
0789デフォルトの名無しさん
2010/01/21(木) 19:56:250790デフォルトの名無しさん
2010/01/21(木) 22:57:435.10にこれインストールしようとすると
http://www.perlmonks.org/?node_id=758739
これと同じエラーが出たので断念。
libwww-perlのバージョンが新しすぎるとダメらしい・・
UserAgent.pmの一部をコメントアウトしたらOKとかいう情報も
あったけどうちの環境ではだめだった。
>>768
この方法も試してみるありがとー
0791デフォルトの名無しさん
2010/01/22(金) 02:17:48WWW::Curl::Multi
Parallel::Forkmanager
Mojo::Client + Mojo::Trunsaction
IO::Lambda
多すぎ
0792デフォルトの名無しさん
2010/01/22(金) 13:03:11俺も見るからに厨臭いと感じたがググってみたら
発信してるのがその著書にお世話になったこともある有名人で驚いたw
0793デフォルトの名無しさん
2010/01/22(金) 14:14:37と書いたときFHというのは何になるのですか?
変数でも配列でもハッシュでもないし。
0794デフォルトの名無しさん
2010/01/22(金) 14:29:490795デフォルトの名無しさん
2010/01/22(金) 17:18:500796デフォルトの名無しさん
2010/01/22(金) 17:43:290797デフォルトの名無しさん
2010/01/22(金) 17:50:36俺も詳しく理解してはいないんだけれど
どっかでファイルハンドルopenと変数openは違うという説明を見たような
今から新しいコードを書くなら、変数を使った方がいいそうだ
詳しくは、下記記事の「ファイルハンドルにはレキシカル変数を使うこと」の項にある
ttp://d.hatena.ne.jp/perlcodesample/20091120/1246679588
0798デフォルトの名無しさん
2010/01/22(金) 18:59:55半端なページを引っ張り出さずにマニュアル読もうよ。
http://perldoc.jp/docs/perl/5.10.0/perlopentut.pod
http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_open_FILEHANDLE
http://perldoc.jp/docs/perl/5.10.0/perldata.pod
http://perldoc.jp/docs/perl/5.10.0/perlmod.pod
0799デフォルトの名無しさん
2010/01/22(金) 19:22:45apach2+activeperlの最新。
環境はwinxp home
コマンドプロンプトではperl helloworld.plで正しく出力できるが、cgiとして動かすとインターナルサーバーエラー。
パスにはスペースを含めていないし、
うーん。
ヒントをお願いします。
0800デフォルトの名無しさん
2010/01/22(金) 19:25:340801デフォルトの名無しさん
2010/01/22(金) 19:39:56エラーログ
0802デフォルトの名無しさん
2010/01/22(金) 19:45:05>インターナルサーバーエラーで、苦しんでいる。
Webプログラミングの話はWebプログラミング板へ
0803デフォルトの名無しさん
2010/01/22(金) 19:53:39生ファイルハンドルつか型グロブなんか
もう使う気にはならんよ。
0804デフォルトの名無しさん
2010/01/22(金) 21:07:49なんぞこの fuga
0805デフォルトの名無しさん
2010/01/22(金) 21:11:560806デフォルトの名無しさん
2010/01/23(土) 00:01:57http://search.cpan.org/~dconway/Class-Std-0.011/lib/Class/Std.pm
http://d.hatena.ne.jp/nyaago69/20090929/1254192165
http://d.hatena.ne.jp/cooldaemon/20060317/1142562536
=======CODE==========
package test;
use strict;
use warnings;
use Class::Std;
{
my %test :ATTR( :get<test>);
my %hoge :ATTR( :get<hoge>);
sub BUILD {
my ($self, $ident, $arg_ref) = @_;
$test{$ident} = 'test string';
$hoge{$ident} = 'fuga fuga';
}
sub DEMOLISH {
my ($self, $ident) = @_;
print $self->get_test."\n";
print $self->get_hoge."\n";
}
}
1;
=======CODE==========
何か原因になりそうな箇所等でもいいので、助言を頂ければなと思います・・・><
0807デフォルトの名無しさん
2010/01/23(土) 12:43:22例えば、
sub function() {
my @array;
return \@array;
}
とかやったら駄目ですか?
0808デフォルトの名無しさん
2010/01/23(土) 12:54:130809デフォルトの名無しさん
2010/01/23(土) 13:35:040810デフォルトの名無しさん
2010/01/23(土) 14:14:54やってもいいよ。というか、複数の配列を返すなら基本的にそうするしかない
一つの配列を返すだけなら return @array; でもいい
808の言うように参照渡しするという手もあるけど、俺にはメリットがよくわからない
0811デフォルトの名無しさん
2010/01/23(土) 15:11:58コード部分をtest.pmというファイルに書き込んで試してみたけど
DEMOLISHは普通に呼ばれてるようだが?
% perl -e 'use test; $x=test->new'
test string
fuga fuga
これで不満ならもう少し説明してもらわないとなんとも。
あとついでだが全て小文字のモジュール名はプラグマ用なので
避けた方がいいよ。
0812デフォルトの名無しさん
2010/01/23(土) 22:58:17コピーが起きないから早くなる
0813デフォルトの名無しさん
2010/01/24(日) 00:41:180814デフォルトの名無しさん
2010/01/24(日) 01:35:41大丈夫だよ。リファレンスカウントってのがあってスコープ抜けても値は保持される。
リファレンス返すのも良いし呼び出し時にfunction([1,2])みたいにリファレンスを渡す
方法も結構使われてると思う。
0815デフォルトの名無しさん
2010/01/24(日) 02:56:35/usr/lib/perl5/vendor_perl/5.10/Net/HTTP/Methods.pm 内の
sub http_configure にブレークポイントを設定する場合はどうやったらいいの?
0816デフォルトの名無しさん
2010/01/24(日) 03:33:25しかし副作用って嫌いなんだよな
他人の書いたソースに
sub hoge{
my($str, $opt) = @_;
$opt->{fuga} ||= 'hogefuga';
~~~
}
のような処理があって$opt->{fuga}が自動生成されたためにバグが起きたことがあったんだが、
それ以来副作用の起こる関数はトラウマだ
それ考えたらちょっと遅くなるほうが断然マシだ
0817デフォルトの名無しさん
2010/01/24(日) 03:44:150818デフォルトの名無しさん
2010/01/24(日) 11:13:56http://perldoc.perl.org/perldebug.html#b-subname-[condition]
http://perldoc.jp/docs/perl/5.10.0/perldebug.pod
http://perldoc.jp/docs/perl/5.10.0/perldebtut.pod
0819デフォルトの名無しさん
2010/01/24(日) 12:17:35を使っています。
ターミナルの文字コードもプログラムも utf-8 を使用しています。
以下のプログラムでは、文字のエンコードとデコードがうまくいくときといかないときがあるのですが、どうしてしょうか。
また、その解決のためにはどうすればいいでしょうか。
#!/usr/bin/perl
use utf8;
use Encode;
use Encode::Guess qw/euc-jp shiftjis 7bit-jis/;
my $original_string = $ARGV[0];
my $internal_string = decode('Guess', $original_string);
my $utf8_string = encode('utf8', $internal_string);
print $utf8_string . "\n";
exit;
~
で、
$ ./encodeco_test.pl あ
だと、
あ
を返して成功するのですが、
$ ./encodeco_test.pl に
だと、
shiftjis or utf8 at /usr/lib/perl5/5.10.0/i386-linux-thread-multi/Encode.pm line 162
と返って、うまくいきません。
どうすればうまくいく「に」と返ってくるでしょうか。
0820デフォルトの名無しさん
2010/01/24(日) 12:33:130821デフォルトの名無しさん
2010/01/24(日) 14:11:23エンコーディングの自動判別ってのはそういうもんだよ
必ず正確に判別できるわけじゃないから、できれば使わないほうがいいし
使うのなら失敗した時にどうするか考える必要がある
0822デフォルトの名無しさん
2010/01/24(日) 15:07:350823デフォルトの名無しさん
2010/01/24(日) 17:27:34ちゃんと判別てきると考えてる
0824デフォルトの名無しさん
2010/01/24(日) 17:36:23結果のバイト数が少ないほうを採用すると大抵はうまくいく。大抵は。
>>822
ウェブ拍手のような、送信元の文字コードが不定になる
レンタルサービスを作るなら欲しくなるときもあるんじゃない。
FORMのaccept-charset(は通じないブラウザがある)か、インラインフレームで対処可能だけど。
・・・板違いか。
0825デフォルトの名無しさん
2010/01/24(日) 18:12:18その文字コードの定義範囲に収まっているものだけに絞るといった点
では完璧な動作するのに(jis系は除く)。
0826デフォルトの名無しさん
2010/01/25(月) 00:57:50判別できたんだけど、utf8が入ってきた時点で区別のつかないパターンが
増えてどうにもならなくなったよな。
0827デフォルトの名無しさん
2010/01/25(月) 03:25:57エンコーディングの自動判別とはそういうものなのですね。
できれば使わない方がよく、使う場合は、失敗時の対応を用意すると。
また、utf8が入った段階で区別がつきにくくなった、という歴史的な経緯もあるとのこと。
勉強になりました。
>>824
いろいろなヒントをありがとうございます。
試してみます。
0828デフォルトの名無しさん
2010/01/25(月) 05:29:390829デフォルトの名無しさん
2010/01/26(火) 00:58:490830デフォルトの名無しさん
2010/01/26(火) 08:25:470831デフォルトの名無しさん
2010/01/26(火) 09:28:25そうもいかない場合も時としてあって、そのときどうしようねって感じ
0832デフォルトの名無しさん
2010/01/26(火) 11:21:19sjis、euc、jisの他に8859-1を加えた中から判別とかになるとguessじゃ絶望的だけど。
0833デフォルトの名無しさん
2010/01/26(火) 22:17:15Excel1 の特定セルの値を配列に保持し、Excel2 の特定セルに書き、
Excel3で別名保存と処理がしたいのですが、別名保存ができません。
my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
|| Win32::OLE->new('Excel.Application', 'Quit');
# 読込むエクセルオープン
my $ReadBook = $Excel->Workbooks->Open("C:\\Excel1.xls");
my $ReadSheet = $ReadBook ->Worksheets('Sheer1');
# セルの内容を配列にする処理。読込んだらClose
$ReadBook->Close();
# 書込むエクセルオープン
my $WriteBook = $Excel->Workbooks->Open("C:\\Excel2.xls");
my $WriteSheet = $WriteBook->Worksheets('Sheer1');
# 配列の内容をセルに書込む処理。書込んだら保存
$WriteBook->SaveAs("C:\\Excel3.xls") or die "保存失敗";
$WriteBook->Close();
$Excel->quit() ;
申し訳無いのですが、どなたかお心当たりありましたらご教授お願いします。
0834デフォルトの名無しさん
2010/01/27(水) 11:02:54そのコードで試してみたけどエラーが出なかった。
dieのところで Win32::OLE->LastError() を調べてみてはいかが。
0835デフォルトの名無しさん
2010/01/27(水) 23:08:55ありがとうございます。LastError()やってみました。
エラーコード:0x8002000E
無効なパラメーター数です。と出ました。
引数の数が合ってないのかな。
ネットのサンプルやActivePerlのサンプル見ても引数1つだし、分からんです・・・。
リファレンス何処かにありませんか?
0836デフォルトの名無しさん
2010/01/27(水) 23:17:120837デフォルトの名無しさん
2010/01/28(木) 01:02:16これはメモリが足りないということでしょうか
0838デフォルトの名無しさん
2010/01/28(木) 11:59:370839835
2010/01/28(木) 23:18:21使いたいですよ・・・。でもなんでか知らないんですがPerlの案件なんです。
自己解決というか、なんでか分からないけど回避できました。
$WriteBook->SaveAs("C:\\Excel3.xls") or die "保存失敗";
ではなく、
$WriteSheet->SaveAs("C:\\Excel3.xls") or die "保存失敗";
にしたら保存できました。何でだよ・・・。意味が分からん・・・。
0840デフォルトの名無しさん
2010/01/29(金) 08:08:17超長い文字列に正規表現適用したら起こるって記事見たことあるな
0841デフォルトの名無しさん
2010/01/30(土) 03:53:35普通はどういう方法でやるものなのでしょうか
シリアライズした後に置換すれば問題ないでしょうか
0842デフォルトの名無しさん
2010/01/30(土) 04:09:450843デフォルトの名無しさん
2010/01/30(土) 05:51:55申し訳ないですがその解決策は HTML::Parser に依存しているようなので却下で。。。
できればあまりCで書かれたライブラリに依存せずに実装したいです
0844デフォルトの名無しさん
2010/01/30(土) 13:27:34HTML::Parser使ってるのは駄目って後出し条件言うなよw
そもそもJSON.pmとタグのサニタイズの関係性がわからないんだけど
なんでJSON.pmにそんなメソッドがついてると思ったの?
0845デフォルトの名無しさん
2010/01/30(土) 13:43:57なら置き換え演算子で置き換えろよカス
0846デフォルトの名無しさん
2010/02/01(月) 09:10:29その通りですね、すみませんでした
そういったことをしたい場合はHTML::Entityを使うというのが普通なのですね
ありがとうございます
サニタイズについては、JSONで通信をする場合に不適切なコンテントタイプによって
スクリプトタグを通されてしまう可能性があるという記事を見つけまして、
サーバー側でサニタイズしてしまえばブラウザ間の差異も考えずに済むし楽なのではないかと思いました
そしてそういう欲求は多くの人が持っているのではないかと考えました
JSON.pm を見ても / やら ascii 文字以外やらをエスケープするメソッドはあったので、
簡単な手法で < や > などもエスケープすることができるのではないかと思いました
>>845
ラッパーモジュールを作ってセッターで置換することにしました
お手数お掛けしました
0847デフォルトの名無しさん
2010/02/01(月) 14:41:43なんでも一カ所にぶち込むなや
0848デフォルトの名無しさん
2010/02/01(月) 20:06:31print "\L\uabc\n";
どっちも「Abc」となるのだけど、なぜだろう?
0849デフォルトの名無しさん
2010/02/01(月) 20:11:58どっちも\Lが無視されるから同じ文字列になる
0850デフォルトの名無しさん
2010/02/01(月) 21:33:23print "\L\uABC\n";
えっと、これでも両方「Abc」になるんだけど、なぜだろう?
bとcが小文字に変換されているので\Lは動いていると思うのだけど
どうも理解が出来ず。
0851デフォルトの名無しさん
2010/02/01(月) 22:10:520852デフォルトの名無しさん
2010/02/01(月) 22:32:160853デフォルトの名無しさん
2010/02/02(火) 00:39:27print "\u\LABC\E\n";
print "\L\uABC\E\n";
\Eを入れても動作変わらない。
前者は\Lでabcになってその後\uでAbcになると思っていて
後者は\uでABC(何も変わらない)になってその後\Lでabcになると思ってるんだが
そうならない。
0854デフォルトの名無しさん
2010/02/02(火) 01:42:58範囲指定と1文字指定がかぶってるところは1文字指定の効果が優先される。
0855デフォルトの名無しさん
2010/02/02(火) 02:34:110856デフォルトの名無しさん
2010/02/02(火) 03:34:05perl6のスレはWEBプログラミング板にある
0857デフォルトの名無しさん
2010/02/02(火) 09:34:23実験するとそんな感じなんだけどマニュアルのどこかで説明されてる?
perlopのQuote and Quote-like Operatorsのあたりかなと思ったけど
その辺は明記されてないし。
0858デフォルトの名無しさん
2010/02/02(火) 12:31:06優先順位みたいなのがあるのね、なんとなく理屈は分かった。
ラクダ読んだ感じだとそういう記載は見当たらなかったけど
perlのソースでも読めば書いてあるんかな。
0859デフォルトの名無しさん
2010/02/02(火) 12:36:340860デフォルトの名無しさん
2010/02/02(火) 12:37:01MT4 のプラグイン周りの本で、「プラグイン開発入門(関根元和著)」より詳しい本ってありますか。
この本はほとんど理解できたんだけど(実践した)、もうちょっと細かいところを知りたいんですが。
MT 自体がもう落ち目なのかもしれないけど。。
0861デフォルトの名無しさん
2010/02/02(火) 13:50:23ないこともない。
Perlについて
http://pc12.2ch.net/test/read.cgi/tech/1217851121/
0862854
2010/02/03(水) 14:33:33ラクダかリャマで読んだ記憶が・・と今見返してみたらリャマに載ってた。
初めてのPerl第3版P148〜149とその脚注参照。
マニュアルは全部目通してないからわからない。。
0863デフォルトの名無しさん
2010/02/04(木) 00:52:06http://www.jaist.ac.jp/ICGA-events-2010/olympiad/
1989年にロンドンで第1回目のコンピュータオリンピアードが開催されました。
毎年開催される本イベントでは,コンピュータゲームプレイヤー同士が競技し,世界最高位を決定します。
これまでの優勝者には,Neurogammon(バックギャモン, 1989年), Chinook (チェッカー, 1989年および1990年) そして Tacos(将棋, 2005年, 2006年, 2008年, 2009年)などがあります。
コンピュータオリンピアードは国際コンピュータゲーム協会(ICGA)が主催して実施されています。
競技部門には,アマゾン,バックギャモン,ブリッジ,コンピュータプール,六目並べ,象棋,ドッツアンドボックス,国際ドローツ,囲碁,9路盤囲碁,ヘックス,ハバナ,ラインズオブアクション,
将棋,スラカルタなどがあります。
この他のゲームもコンピュータによる競技会を開催する可能性があります。主催者までコンタクトしてください。
2010年に第15回目となるコンピュータオリンピアードは金沢市内で開催されます。
ICGAとJAISTとの共同イベントとして9月25日から10月2日にかけて金沢市内で開催されます。
各競技の日程は後日決定します。
参加申し込みなどの詳細も後日お知らせ致します。
0864デフォルトの名無しさん
2010/02/07(日) 17:18:28これで2バイト文字使うと取り出した際に必ず文字化けする
どーすればいいんだ
かれこれ7時間悩んでる
0865デフォルトの名無しさん
2010/02/07(日) 17:33:46とりあえず、mysql_enable_utf8オプションをつければPerl側からフラグ付きUTF-8を受け渡しできるはずだが
0866デフォルトの名無しさん
2010/02/07(日) 17:48:33ありがとう!!!!!!!!!!!!!
sqliteだったからフラグで検索して
$dbh -> {unicode} =1
で解決したぁぁ
ほんとありがと!
あとこれ使わない時は
$text = Encode::decode('utf8', $text);
とすればよかったのか
0867デフォルトの名無しさん
2010/02/07(日) 18:18:37文字で何も悩まなくて済む
0868デフォルトの名無しさん
2010/02/07(日) 18:30:41ダウト
0869デフォルトの名無しさん
2010/02/07(日) 20:00:56多分。
0870デフォルトの名無しさん
2010/02/07(日) 22:45:48それぞれに特徴があるけど、どっちでもだいたいおんなじ
0871デフォルトの名無しさん
2010/02/07(日) 22:55:56perlの次はC/C++かjavaだろjk
0872デフォルトの名無しさん
2010/02/07(日) 22:56:120873デフォルトの名無しさん
2010/02/08(月) 00:29:52一概にこれがいいって議論は不毛だし、ここでは必要ない
0874デフォルトの名無しさん
2010/02/08(月) 01:53:04いや自分で作るからって人にはどのスクリプト言語使おうが同じだし
最初に覚えたスクリプト言語を使い続けるのが普通だと思うけど
外的要因で他も使わざるを得ない人はほんとに気の毒だね。
0875デフォルトの名無しさん
2010/02/08(月) 12:12:280876デフォルトの名無しさん
2010/02/08(月) 12:33:22戻ってメソッドが呼べなくなるバグに悩まされています。
ためしに
sub DESTROY {
my ($obj) = @_;
print $obj->{"Name"}, " was destroyed.\n";
}
て感じで書いてみたら見事にオブジェクトが壊されていました。
このDESTORYがいつ、どこで、どうして呼ばれるのか
知る方法は無いでしょうか?
0877デフォルトの名無しさん
2010/02/08(月) 13:08:050878デフォルトの名無しさん
2010/02/08(月) 13:14:48・・・と書こうと思ったけど877の方がいいな
0879デフォルトの名無しさん
2010/02/08(月) 13:28:15「ローカル変数を宣言する場合はmy関数を使用するのが望ましいが、
配列や連想配列をmy関数によってローカル化できない為にそういった場合にはlocal関数を使用する」
と書いてあるのですが、参考サイトを見てみるとそういったことは書いてありません。
本当にlocal関数でしか配列はローカル化できないのでしょうか?
my関数の方が完全にローカル化出来るので、できればmy関数を使用したいのです。
0880デフォルトの名無しさん
2010/02/08(月) 14:00:06ちなみになんていう本よ?
0881デフォルトの名無しさん
2010/02/08(月) 14:31:080882876
2010/02/08(月) 14:41:35at c:/xampp/htdocs/test//Foo.pm line 224 ←&cluck()を書いた行
Foo::DESTROY('Foo=HASH(0x........)') called at ./baa.pl line 0
eval {...} called at ./baa.pl line 0
at c:/xampp/htdocs/test//Foo.pm line 224
Foo::DESTROY('Foo=HASH(0x........)') called at ./baa.pl line 0
eval {...} called at ./baa.pl line 0
at c:/xampp/htdocs/test//Foo.pm line 224
Foo::DESTROY('Foo=HASH(0x........)') called at ./baa.pl line 0
eval {...} called at ./baa.pl line 0
…
て感じで続きます(オブジェクトの配列です)。正直line 0 とか意味が分かりません。
分かる方お教え下さい。
でもその前の配列のsortに使う関数の中で、Use of uninitialized value in 〜 が
頻発しているので、この時にすでにオブジェクトが壊れているのかなとも思います。
これ以上なにかヒントありますでしょうか?
0883デフォルトの名無しさん
2010/02/08(月) 15:15:45運が良いときはeval {...} called at 〜 が解放の起きた付近を示していることも
あるんだけど、line 0じゃ手がかりないねぇ。
878が紹介してたDevel::Trace使ってみれば?
0884デフォルトの名無しさん
2010/02/08(月) 16:01:46確かなことは言えないが、もしかすると書籍の引用の前後の文脈では
配列の「要素」について説明してるんじゃないか?
myは変数に対して宣言するわけだから、つまり↓のようなことを言ってるのでは。
×my $foo{'bar'}
○local $foo{'bar'}
0885デフォルトの名無しさん
2010/02/08(月) 16:13:05プログラムってどうよ?
0886デフォルトの名無しさん
2010/02/08(月) 18:47:470887デフォルトの名無しさん
2010/02/08(月) 20:55:29すいません「要素ローカルにできない」とちゃんと書いてありました。
自分の目が節穴だったためにお手数をお掛けして申し訳ありませんでした。
0888デフォルトの名無しさん
2010/02/08(月) 21:53:53こういう使い方以外に思い浮かばない
0889876
2010/02/10(水) 13:18:17お前ら使えねえな。
0890デフォルトの名無しさん
2010/02/10(水) 14:17:50分かったら教えてよw
0891デフォルトの名無しさん
2010/02/10(水) 17:51:35お力になれず申し訳ありませんでしたm(_ _)m
0892デフォルトの名無しさん
2010/02/10(水) 20:43:40自分の程度の低さを棚に上げて最低な奴だな
死ね
0893デフォルトの名無しさん
2010/02/11(木) 00:36:31Win32::OLE->new で、iTunes を起動するスクリプトを書いて、
それはうまくいっています。
iTunesが動いていないときも、new を実行すると iTunes を起動してくれるのですが、
少しありがた迷惑なので、iTunes が起動していないときには、
何もせず終了するようにしたいのです。
どういうオプションを渡せばよいでしょうか?
0894デフォルトの名無しさん
2010/02/11(木) 10:33:34それとも勝手に起動されると迷惑だから、起動している時だけ、スクリプトを実行させたいのかな。
newの前に、
return 0 if !Win32::OLE->GetActiveObject('iTunes.Application');
とかやるのはどう?
0895デフォルトの名無しさん
2010/02/11(木) 14:21:29perl からphpファイルを実行するのはどうすればいいでしょうか
$ans = `php -f post.php`;
print $ans;
print system("/usr/local/bin/php -f /virtual/user/public_html/post.php");
my $PHP = '/usr/local/bin/php';
my $PHP_FILE='/virtual/user/public_html/post.php';
open FH, "$PHP -f $PHP_FILE|";
while (my $x = <FH>) {
print "$x\n";
}
close FH;
この3つ試したんですがphpのソースが表示されてしまいます
サーバーはcoreserverです
0897デフォルトの名無しさん
2010/02/11(木) 15:09:07> Win32::OLE->GetActiveObject('iTunes.Application');
は、iTunes が起動していても、起動していなくても、
取得に失敗してしまい、判別に使えませんでした。
0898デフォルトの名無しさん
2010/02/11(木) 15:31:06のあたりにも同じ質問があって、解決策は見つからないみたいです。
なにか、抜け道をご存じの方いらっしゃいませんか?
new をすると、iTunes を起動して、OLEハンドラを取得できます。
GetActiveObject が、iTunes を起動していても失敗するのが問題です。
0899デフォルトの名無しさん
2010/02/11(木) 16:03:19>>1をよく読んでくれ
0900デフォルトの名無しさん
2010/02/11(木) 16:58:51すみません
Webプログラム板にいってきます
0901デフォルトの名無しさん
2010/02/11(木) 17:23:26psのwin移植版かwin標準で入っている(かもしれない)tasklist.exeを呼び出せばよいのでは?
`ps` =~ m/iTunes/i とか `tasklist` =~ m/iTunes\.exe/i あたり。
0902デフォルトの名無しさん
2010/02/11(木) 17:31:54perl だけでなんとかしたかったのですが、tasklist をつかってごまかすことにします。
ありがとうございました。
0903デフォルトの名無しさん
2010/02/11(木) 18:42:170904デフォルトの名無しさん
2010/02/12(金) 09:18:24わかる人教えてください。
eメール形式のファイルから本文や添付ファイル等を取り出したいのですが、
利用しているレンタルサーバー(webarena)の契約では
MIME::ParserやMIME-toolsがなく、できるだけ
依存関係が少ないパッケージモジュールを検索していましたら
Matts::Message::Parser
http://search.cpan.org/~msergeant/Matts-Message-Parser-1.0/lib/Matts/Message/Parser.pm
にたどり着きました。
Message.pmと
Parser.pm(use Matts::Message;をrequire './Message.pm'に変更)
で何とか動きました。
require './Parser.pm';
open(my $fh, "foo.eml");
my $msg = Matts::Message::Parser->parse($fh);
my $msg_size=$msg->size; #メッセージサイズ
my $msg_enc=$msg->body_enc; #エンコードタイプ
my $msg_id=$msg->header('message-id'); #メッセージID
my $msg_time=$msg->header('date'); #受信時間
my $msg_subject=$msg->header('subject'); #件名
と取得できたのですが肝心の本文(body?)と
添付ファイル(attachment?)の取得ができません。
$msg_body=$msg->body()?
$msg_body=$msg->bodies?
とかしたんですけど型グロブ?がなんたらでよく
わかりませんでした。
どなたか助け舟をお願いします。
0905デフォルトの名無しさん
2010/02/12(金) 17:08:20$msg_body=$msg->parse_body;
とかじゃないの?
0906デフォルトの名無しさん
2010/02/12(金) 17:17:26$msg->bodies は Content-Type とファイルハンドルが組になったリストを返すし、
$msg->body はファイルハンドルを返す。
どおりでサンプルはcloseしてないわけだ。
だから、body を読みたければ例えばこうする。
my $bodyfh = $msg->body;
my $body = join '', <$bodyfh>;
こんなもんでいい?
0907デフォルトの名無しさん
2010/02/12(金) 17:24:42libフォルダを丸々コピーして
use strict;
use warnings;
use lib(qw{ ./lib });
use Matts::Message::Parser; # require がいいならそれでも桶
すればいいよ。
0908デフォルトの名無しさん
2010/02/12(金) 20:43:08>>907
ありがとうございます。
use Encode;
use MIME::QuotedPrint;
my $msg_size=$msg->size; #メッセージサイズ
my $msg_enc=$msg->body_enc; #エンコードタイプ
my $msg_id=$msg->header('message-id'); #メッセージID
my $msg_time=$msg->header('date'); #受信時間
my $msg_subject=$msg->header('subject'); #件名
my $msg_cenc=$msg->header('Content-Transfer-Encoding'); #Content-Transfer-Encoding
my $bodyfh = $msg->body;
my $msg_body = join '', <$bodyfh>;
$msg_body=encode(lc($msg_enc),$msg_body); #エンコード
if (lc($msg_cenc)=~ /quoted-printable/){
$msg_body=decode_qp($msg_body); #quoted-printableの場合
}
としてみたらうまく取得できました。
添付ファイルもわかったら解読していただけませんでしょうか?
私には暗号にしか見えませんので。。
0909デフォルトの名無しさん
2010/02/12(金) 23:14:19>Don't use in your own projects, unless you are willing to figure out the API
yourself.
(てめえが API を自分で見つけ出す気がないなら、てめえのプロジェクトで使ってくれるなよ)
とあるしな。
他のお暇な方どうぞ。
0910デフォルトの名無しさん
2010/02/13(土) 00:03:070911デフォルトの名無しさん
2010/02/13(土) 00:09:140912デフォルトの名無しさん
2010/02/13(土) 02:36:58途中で固まっちゃうのだが、なんか手立てはないかな?
Tarball extraction: [/usr/src/redhat/SOURCES/DBIx-Class-0.08118.tar.gz]
が出て固まる。
ソースからコンパイルしてインストールすればいいのだろうけど。
0913デフォルトの名無しさん
2010/02/13(土) 07:12:26グローバル変数として用意した設定値が困る
外部ファイルでrequireしてもエラーだし
useでもそうだけど$package:hoge
みたいに書かないといけないから見た目がださいよね
数が多いからファイル毎に空の宣言並べるのも馬鹿みたいだし
なんかこうC言語のincludeみたいにコンパイル前にソースに結合するとか
綺麗なやり方はないのかな?
使い方としては別ファイルに固定定数を並べといて
実行時には$hogeみたいに変数名だけでアクセス出来るようにしたくて
かつuseやrequireみたいな一文を冒頭に追加するだけでいいみたいな
0914デフォルトの名無しさん
2010/02/13(土) 07:58:31つExporter
0915デフォルトの名無しさん
2010/02/13(土) 10:19:13Exportってそういう使い方も出来るのか
でもまだ効率悪いな
qwで変数名書いて、定義して、値を代入する
の3個書かないといけないんだな
CGIだから無駄にソース膨らめばその分遅くなるんだがな
0916デフォルトの名無しさん
2010/02/13(土) 16:25:42行くべきで、そんなところで頑張るのは無駄。
0917デフォルトの名無しさん
2010/02/13(土) 21:52:44↓の例だと3行を抜き出したいです.
hogehoge
\begin{align}
a=b\\
c=d\\
e=f
\end{align}
hogehoge
教えてください.
0918917
2010/02/13(土) 22:00:31print ifを使わずに,中身を変数に格納したいです.
よろしくお願いします.
0919デフォルトの名無しさん
2010/02/13(土) 22:02:310920デフォルトの名無しさん
2010/02/13(土) 22:03:08言っている意味がわかんない。
0921デフォルトの名無しさん
2010/02/13(土) 22:06:44ありがとうございます.
>920
分かりにくくてすんません.
print if /\\begin{align}/../\\end{align}/;
でprintならできるけど...という意味でした.
0922デフォルトの名無しさん
2010/02/13(土) 22:14:10$s .= $_ if /\\begin{align}/../\\end{align}/;
とか、
if( /\\begin{align}/../\\end{align}/){
$s .= $_ ;
}
で好きな様に料理すれば良かろ?
0923デフォルトの名無しさん
2010/02/13(土) 22:18:350924デフォルトの名無しさん
2010/02/13(土) 23:25:280925デフォルトの名無しさん
2010/02/14(日) 01:39:54perlエンジン自体をローカルアプリで利用したい場合は
別途perlをインストールしてshellで呼ぶのが一般的なんだろうけど
アプリ自体に組み込んで利用出来るライブラリとかはあるんでしょうか?
mod_perlみたいな
mod_perlはライセンスの関係で他のアプリに組み込んで配布していいのか良く分からんし
アプリを配布するのにperlを別途インストールしてねなんてやりたくないし
なんかいい方法ありますかね?
0926デフォルトの名無しさん
2010/02/14(日) 01:47:18http://www.perl.com/doc/manual/html/pod/perlembed.html
俺はやったことないけど
0927デフォルトの名無しさん
2010/02/14(日) 02:57:01こういう用途ならpp (Perl Packager) 、perlcc、perl2exeとかがあるよ。
0928デフォルトの名無しさん
2010/02/14(日) 03:37:30そうだ、盲点だった
ありがとう
0929デフォルトの名無しさん
2010/02/14(日) 08:43:000930デフォルトの名無しさん
2010/02/15(月) 20:03:52$x=100;print $hoge; #value="100"
という結果が欲しいのですが
$hoge = print("value=\"".$x.\""); や
$hoge = print qq{value="$x"};
とやってもダメでした・・・何か方法が有れば教えて頂けないでしょうか。
0931デフォルトの名無しさん
2010/02/15(月) 20:31:21my $x = 100;
print $hoge->($x);
↓だとpiyoを出力した上でその成否(成功なら1)を$hogeに代入する、という意味にしかならない。
$hoge = print "piyo";
0932デフォルトの名無しさん
2010/02/15(月) 21:28:50$x = 10;
eval $hoge;
0933デフォルトの名無しさん
2010/02/15(月) 21:59:41おかげさまでうまく廻すことが出来ました!
成否判断やeval関数のご指摘、とても勉強になりました。
有り難うございます。また精進してきます
0934デフォルトの名無しさん
2010/02/16(火) 12:58:21my $aart = new HTML::AA;
$aart -> code('sjis');
を宣言して、
$dot = $aart -> shorter(@a);
とするとパニック起こして動きません。
@aはpushによって動的に作成された配列です。
リストで @a = (1,2,3); のように作成した配列なら正常に通ります。
原因わかる方いらっしゃいますか?
最初のコード宣言をeucにすると通りますが、出来上がりの表示が崩れてダメでした。
配列に放り込む時に文字コードを変換してみましたがそれでもダメでした。
0935デフォルトの名無しさん
2010/02/16(火) 13:07:570936デフォルトの名無しさん
2010/02/16(火) 13:19:280937デフォルトの名無しさん
2010/02/16(火) 13:27:46少なくともうちの環境ではpushだろうが正常に通るので、
パニックだし環境依存の問題じゃね-の?
0938デフォルトの名無しさん
2010/02/16(火) 13:29:191 out of 13 found this review helpful:
HTML-AA (0.10)
WTF?
Dan Dascalescu - 2009-01-21 01:17:46
0939デフォルトの名無しさん
2010/02/16(火) 15:32:16だって君の能力は透明化じゃないか
肝心なときだけ見られてるけど
0940934
2010/02/16(火) 17:03:32#!/usr/bin/perl
use HTML::AA;
my $aart = new HTML::AA;
$aart -> code('sjis');
@TeamRanking = ('順位'); @TeamScore = ('スコア ');
for(0..150){
push @TeamRanking, $_;
push @TeamScore, int(rand(1000000));
}
$dot_R = $aart -> shorter(@TeamRanking);
$dot_S = $aart -> shorter(@TeamScore);
@TeamRanking_c = ();
@TeamScore_c = ();
foreach (@TeamRanking){ push @TeamRanking_c,$aart -> adjust('', $_, 'R', $dot_R); }
foreach (@TeamScore){ push @TeamScore_c,$aart -> adjust('', $_, 'L', $dot_S); }
$txt_team = "成績\n";
for(0..$#TeamRanking){
$txt_team .= "|$TeamRanking_c[$_] $TeamScore_c[$_]\n";
}
open DATA,"> ranking.txt";
print DATA $txt_team;
close DATA;
0941デフォルトの名無しさん
2010/02/16(火) 17:55:03my $self = shift;
my @array = @_;
my $fit = 0;
foreach my $buf (@array) {
my $set = $self -> calcu_sjis($buf);
next if $fit >= $set;
$fit = $set;
}
while (1) {
my $flag = 0;
foreach my $set (@array) {
my $temp = $self -> adjust_right_sjis($set,q{},$fit);
my $temp2 = $self -> calcu_sjis($temp);
next if $fit == $temp2;
$flag = 1;
$fit ++;
last;
}
last unless $flag;
}
return $fit;
}
なにこのwhileふざけてるの?
0942デフォルトの名無しさん
2010/02/16(火) 18:32:32無限ループなのかどうかはわからないけど、
CPU100%に張り付いたままいつまで待っても
終わらんね。
最初のshorterの呼び出しの
$dot_R = $aart -> shorter(@TeamRanking);
が帰ってこない。
use strict;
use HTML::AA;
my $aart = new HTML::AA;
$aart->code('sjis');
my @x = qw(foo 1 10);
$aart->shorter(@x);
ぐらいで再現するから作者にバグレポしてみれば?
0943デフォルトの名無しさん
2010/02/16(火) 18:50:50関数を並べて書くなんて無駄なことしないでutf8決めうちで最後
の出力の時に変換してねでいいと思う。
0944デフォルトの名無しさん
2010/02/16(火) 19:03:14対して Encode.pm が標準モジュールになったのは、
2002年の perl5.8 から
0945デフォルトの名無しさん
2010/02/16(火) 19:12:560946デフォルトの名無しさん
2010/02/16(火) 23:16:260947デフォルトの名無しさん
2010/02/17(水) 02:49:14文字列の"0"を数値とみなしちゃって起きるバグだと思う
HTML/AA.pm の271行目の
270 my @array;
271 while($str) {
272 $str =~ s/(.)//;
を
270 my @array;
271 while($str ne '') {
272 $str =~ s/(.)//;
って直したら自分のところではうまくいった
0949デフォルトの名無しさん
2010/02/17(水) 13:53:240950デフォルトの名無しさん
2010/02/17(水) 14:32:17仕様ですか?
0951デフォルトの名無しさん
2010/02/17(水) 14:34:50仕様。それをできるように仕込むのがおまえの仕事。
0952デフォルトの名無しさん
2010/02/17(水) 16:46:41www.samohan.jp/cgi-bin/form.cgi
★買い物カゴシステムのPOST送信先(買物カゴ中身画面のアドレスと同じ)
https://www.jacky.jp/cgi/kago.cgi?user=samohan
とします。
htmlやphpのFORMで買い物カゴシステムへPOSTせずにform.cgiでPOSTデータをkago.cgiへ送信し、送信したらkago.cgiが表示する買物カゴ中身画面へと移動させたいです。
買物カゴシステムを乗り換えるときカンタン移行できるよう、ワンクッションかませたいとおもっているのです。
今はform.cgiでフォームを表示して「送信」ボタンを押してもらい、kago.cgiへPOSTしているのですが、押さずに済ませたいのです。
★form.cgi内のpost送信ソース
my $url = 'https://www.jacky.jp/cgi/kago.cgi?user=samohan';
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
my %formdata = ('user' => 'samohan', 'item' => $item, 'price' => $price, 'kazu' => $kazu);
my $request = POST($url, [%formdata]);
my $ua = LWP::UserAgent->new;
my $res = $ua->request( $request);
print $res->as_string;
としてみました。
しかし
★結果(www.samohan.jp/cgi-bin/form.cgiの結果表示画面)
Found
The document has moved here.
となります。
'here'はリンクとなっており、リンク内容は'http://www.samohan.jp/cgi-bin/kago.cgi?user=samohan'となっています、どうしていいのかわかりません、がんばりが足りないのでしょうか。
0953デフォルトの名無しさん
2010/02/17(水) 16:49:560954デフォルトの名無しさん
2010/02/17(水) 16:58:530955デフォルトの名無しさん
2010/02/17(水) 17:25:09埋め尽くされる状態に至る。
0956デフォルトの名無しさん
2010/02/17(水) 17:50:11&follow_form ( key1 => 'hoge', key2 => 'foo', key3 => 'bar'......);
(keyとvalueの名前と要素数は可変)といった関数を作成したいのですが、
submit_form内のfieldsへのデータの渡し方が分かりません。
何卒お願い致します。
-----------------
my $mech = WWW::Mechanize->new();
sub follow_form {
my %item_list = @_;
#ここでなんらかの処理?
$response = $mech->submit_form(
fields => {
"key1" => "hoge",
"key2" => "foo",
"key3" => "bar",
........
},
);
#エラー処理
}
-----------------
0957デフォルトの名無しさん
2010/02/17(水) 17:57:320958デフォルトの名無しさん
2010/02/17(水) 20:39:57レス有り難うございます。
fieldsは%item_listを参照してね、という表記が必要なのですね。
ハッシュリファレンスについて調べて見たのですが、
Mechanizeのドキュメントでも「fields => \%fields」と記載が合ったので
fields => \%item_list としてみましたがエラー吐いちゃいます。
うーん。。
0959958
2010/02/17(水) 20:48:55$fields => $item_list で自己解決しました!
お騒がせして申し訳ありません。有り難うございました。
0960デフォルトの名無しさん
2010/02/17(水) 21:53:430961デフォルトの名無しさん
2010/02/17(水) 22:30:33これで、通らないほうがわからん。色々変更したのかな。
0962デフォルトの名無しさん
2010/02/18(木) 00:02:24引数をこうしたんじゃないかな。
0963sage
2010/02/18(木) 11:35:000964デフォルトの名無しさん
2010/02/18(木) 17:31:36...sky-blue...という文字が含まれている文字列を、
...<A>sky-blue</A>...
に置換する場合です。
$txt =~ s/$term/<A>$term</A>/g
だと-をエスケープしないとマッチしないのですが、
エスケープすると置換後...<A>sky\-blue</A>...
になってしまいます。
回避の仕方教えてください。
0965デフォルトの名無しさん
2010/02/18(木) 17:35:190966デフォルトの名無しさん
2010/02/18(木) 17:37:070967デフォルトの名無しさん
2010/02/18(木) 17:41:320968デフォルトの名無しさん
2010/02/18(木) 17:41:58$txt =~ s{(sky-blue)}{<a>$1</a>}g;
0969デフォルトの名無しさん
2010/02/18(木) 17:57:54おお、超thx。
そんな方法全然知らなかったです。
0970デフォルトの名無しさん
2010/02/18(木) 18:20:290971デフォルトの名無しさん
2010/02/18(木) 20:37:01/ / /
が要らないの?
0972デフォルトの名無しさん
2010/02/18(木) 20:42:32元のやり方だと、</a>に使われているスラッシュもエスケープしなきゃいけないし、
どこが区切りなのかがちょっとわかりづらい。だから変えたんだろう。
{}{}じゃなくても、たとえば|||なんかでもいい。
$txt =~ s|(sky-blue)|<a>$1</a>|g;
0973デフォルトの名無しさん
2010/02/18(木) 22:23:59$txt =~ s@(sky-blue)@<a>$1</a>@g;
いける文字、いけない文字ってなんだっけ。
↑は確かいけたはずだけど、@は配列で使うのになーと思いつつ・・・
できるのシェルの方だっけ?
0974デフォルトの名無しさん
2010/02/18(木) 22:38:440975デフォルトの名無しさん
2010/02/18(木) 22:56:37Perlしか知らんのだけど、RubyとかPythonでも普通に出来ること?
0976デフォルトの名無しさん
2010/02/18(木) 23:10:54決まりだったが、
最近は、unicodeのテキストファイルを扱わなくてはいけない場面が多々あって、
open(FH, "<:utf8", $filename);
とかを使い出したのですが、
パターンマッチとか、出力とかで、特に文字化けとか不具合とかないですよね?
今のところ大丈夫そうなんだけど・・・。
0977デフォルトの名無しさん
2010/02/18(木) 23:38:06大抵何かとぶち当たって、その時にいいのを選ぶ
0978デフォルトの名無しさん
2010/02/19(金) 01:40:59use utf8;のことかな>
0979デフォルトの名無しさん
2010/02/19(金) 02:00:05>>3
0980デフォルトの名無しさん
2010/02/19(金) 02:58:050981デフォルトの名無しさん
2010/02/19(金) 08:01:420982デフォルトの名無しさん
2010/02/19(金) 16:46:050983デフォルトの名無しさん
2010/02/19(金) 16:48:34Perlについての質問箱 43箱目
http://pc12.2ch.net/test/read.cgi/tech/1266565626/
0984デフォルトの名無しさん
2010/02/19(金) 19:53:23D E F
・
・
という複数スペース区切りのものを
while(<IN>){
chomp;
($a,$b,$c) = split(/\s+/,$_);
というふうに取り出そうとすると、先頭の$aに何も入らず
一つづつズレてしまいます。
回避方法はありますでしょうか?
0985デフォルトの名無しさん
2010/02/19(金) 19:56:000986デフォルトの名無しさん
2010/02/19(金) 19:56:100987デフォルトの名無しさん
2010/02/19(金) 20:11:04($a, $b, $c) = split ' ', $_;
0988984
2010/02/19(金) 20:14:37ありがとうございます。undefというモノが使えたのですね。
できないときは、($nasi,$a,$b,$c)とかしていたのですが。
基本的に複数スペース区切りを分けるときに、行先頭に複数スペースが有った場合に
先頭に空文字が入るのは避けれないんでしょうか?
どうもスマートでは無いような気がして。
0989デフォルトの名無しさん
2010/02/19(金) 20:16:330991デフォルトの名無しさん
2010/02/19(金) 23:28:56こんな動作もするんだな。
勉強になった。
レス数が950を超えています。1000を超えると書き込みができなくなります。