Perlについての質問箱 45箱目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/10/22(金) 22:45:29CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://pc11.2ch.net/php/)
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。
http://www.perl.org/get.html
● 2010/07/31 現在の最新版: 5.12.0
▼ 前スレ
Perlについての質問箱 44箱目
http://hibari.2ch.net/test/read.cgi/tech/1280541200/
リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-7 あたり
0153デフォルトの名無しさん
2010/11/08(月) 06:18:32青ラクダの初版です。Web系はごりごり書いてるからなあ。(´・ω・`)ショボーン
0154デフォルトの名無しさん
2010/11/11(木) 03:37:54use threads::shared;
my @A :shared;
for(0..9){push @A,[$_,$_+1,$_+2]}
Invalid value for shared scalar at /home/abc/threadtest.pl line 4
こうなってしまうのはなぜですか?エラーを回避する方法はありますか?
0155デフォルトの名無しさん
2010/11/11(木) 04:27:34for(0..9){ push @A, shared_clone([$_, $_+1, $_+2]) }
0156デフォルトの名無しさん
2010/11/11(木) 05:00:45ありがとうございます!!
0157デフォルトの名無しさん
2010/11/12(金) 01:04:150158デフォルトの名無しさん
2010/11/12(金) 16:10:47独習perlは読みました
CPANにあるモジュールを使いこなせるようになりたいです。
perldocだけだと関数の使い方が完全にはわからないのです
0159デフォルトの名無しさん
2010/11/12(金) 16:29:37貪欲すぎてワロタ
使い方が分からないんじゃなくて、発想しようとしてないから考えがまとまらないんだろ?
テキスト読むだけじゃだめだ
心で感じろ!
0160デフォルトの名無しさん
2010/11/12(金) 16:58:30ある特定の問題があったときにこれをやるモジュールないかな
って探して使うもののような気がする。とにかく数が多いし
いらない人にはほんとに一生縁がないものが大半だよ。その
問題に関わる人にとっては有り難いわけだけど。
0161デフォルトの名無しさん
2010/11/12(金) 17:00:04ドキュメントを素早く把握する速読法が
有効のような気がした
0162Perl忍者 ◆M5ZWRnXOj6
2010/11/12(金) 17:00:52覚えるコツ
しらべるのではなく 作る物ー>どんな処理をするかー>このモジュールを使えばすませられる
みたいにかんがえられるから
なので、モジュールから探すのではなく 作る物を探し他方害意
0163デフォルトの名無しさん
2010/11/12(金) 17:04:41importとかnewとか。
0164Perl忍者 ◆M5ZWRnXOj6
2010/11/12(金) 17:05:37さがせかす自分でさがせごみ
消えろ
0165デフォルトの名無しさん
2010/11/12(金) 17:21:040166デフォルトの名無しさん
2010/11/12(金) 20:11:40→ その後CGIモジュール使って書き直してみる。
→ モジュールウマーってなる。
ネットだけで十分な情報量だと思うよ。
あとは何よりも目的が大事。
探してみたら、日本の祝日・休日(振替休日付き)なんてモジュールもあるしな。
0167デフォルトの名無しさん
2010/11/12(金) 20:31:56前世紀に書かれたようなヒドイ書き方の CGI を
今の書き方にポートするなんて
書く以前に読むのが苦行過ぎるよ。
my ってなにそれ? -T なんて知らないよ?
とか jcode.pl とかの世界だろうし…。
0168デフォルトの名無しさん
2010/11/12(金) 21:38:410169デフォルトの名無しさん
2010/11/12(金) 21:41:58でも祝日休日のモジュールは定期的に保守しなきゃだめだな
スパンは数年単位でいいだろうが
0170デフォルトの名無しさん
2010/11/13(土) 02:30:08今もやってるか知らんが
0171デフォルトの名無しさん
2010/11/14(日) 16:47:06foreach(keys())でやってもそのキーが出てこなくなりました。どうすれば良いのでしょうか。
0172デフォルトの名無しさん
2010/11/14(日) 17:45:170173デフォルトの名無しさん
2010/11/14(日) 18:11:09while ( $num_fork ) {
my $pid = fork;
if ( !defined $pid ) {
die 'プロセスの生成に失敗<br>\n';
} elsif ( !($pid) ) {
if ( $num_fork == 4 ) {
$aaa = 'aaa';
} elsif ( $num_fork == 3 ) {
$bbb = 'bbb';
} elsif ( $num_fork == 2 ) {
$ccc = 'ccc';
} elsif ( $num_fork == 1 ) {
$ddd = 'ddd';
}
exit $num_fork;
}
$num_fork --;
}
print $aaa.$bbb.$ccc.$ddd;
aaabbbcccdddと表示されて欲しいのですが、exitしているために変数が参照できません。
exitを消すわけにもいかず、どうすればいいのか悩んでいます。
解決策があればどなたかご教授願えないでしょうか?
0174デフォルトの名無しさん
2010/11/14(日) 18:37:210175デフォルトの名無しさん
2010/11/14(日) 18:53:12ありがとうございました
0176デフォルトの名無しさん
2010/11/15(月) 02:21:58OS環境にもよるけど、パイプやIPCの共有メモリなどでも実装できるよ。
0177デフォルトの名無しさん
2010/11/15(月) 15:02:33したときに、ヘンなデータがあったら、
map to Unicodeできないと警告されます。
その警告を黙らせる方法はありますか?
教えてください。
no warnings 'utf8'は試しましたが、
黙りませんでした。
0178デフォルトの名無しさん
2010/11/15(月) 19:08:460179デフォルトの名無しさん
2010/11/15(月) 20:14:39有名なのが 〜 (全角チルダ) と 〜 (波ダッシュ) かな
0180デフォルトの名無しさん
2010/11/15(月) 23:59:340181デフォルトの名無しさん
2010/11/16(火) 00:06:170182デフォルトの名無しさん
2010/11/16(火) 00:22:36計算して試して結果が OK なら OK。 ってのがなんか気持ち悪いから理解しようとしてるんだけど、
いや〜数学赤点ギリギリだった俺からすると難しいw
PostgreSQL とか MySQL に、点が多角形の中に含まれるかどうかチェック出来る演算子とか関数があって、
プログラムで学ぼうとしてる自分にかなり誘惑ww
0183デフォルトの名無しさん
2010/11/16(火) 00:36:420に戻れば外、一周すれば内
0184デフォルトの名無しさん
2010/11/16(火) 02:39:04use Encode qw(:fallback_all);
use PerlIO::encoding;
#$PerlIO::encoding::fallback = STOP_AT_PARTIAL;
$PerlIO::encoding::fallback = PERLQQ | STOP_AT_PARTIAL;
>>180
cpanにポリゴンのモジュールあったよ。
こっちは、多角形の一点から、調べたい点まで線を引いて、
辺の交差回数で調べるオーソドックスな方法だった。
0185デフォルトの名無しさん
2010/11/16(火) 18:20:37正規表現で調べたいときはどうすればいいでしょうか?
if($data =~ /$word/)
としても動かなくて・・
0186デフォルトの名無しさん
2010/11/16(火) 20:20:530187デフォルトの名無しさん
2010/11/16(火) 21:02:46文字化けの可能性とかある
0188デフォルトの名無しさん
2010/11/16(火) 22:58:13標準入力から受け取って、split演算子の使うやり方がどうもわかりません。
やってる問題は
「dataに半角改行で区切られた3つの数字を辺とする三角形は何個作れるか」
です。
自分が下のように書いたのですが、どうすればよいでしょう。
for ($x,$y,$z)=chomp(split/ /,(<>)){
$a=$x+$y;
$b=$y+$z;
$c=$z+$x;
if(($a>$z) and ($b>$x) and ($c>$y)){
print"$a,$b,$c,$x,$y,$z";
$count++;
}
}
print "$count \n";
お願いします
0189Perl忍者 ◆M5ZWRnXOj6
2010/11/16(火) 23:15:55頭の問題
宿題スレいけゲハ
0190デフォルトの名無しさん
2010/11/16(火) 23:57:30この時点で超難問だな。
NASAにでも相談してくれ。
0191デフォルトの名無しさん
2010/11/16(火) 23:59:250192デフォルトの名無しさん
2010/11/17(水) 00:01:460193デフォルトの名無しさん
2010/11/17(水) 00:08:590194デフォルトの名無しさん
2010/11/17(水) 00:25:02\r や \n (Mac とか Linux) が単独で出てくる場合が半角改行で、
\r\n (Windows) のように出てくるのが全角改行。
ってとこかな。
俺、頭いい!!←
0195デフォルトの名無しさん
2010/11/17(水) 00:25:03> すみません、授業でperlを扱っているのですが
この言質からすると、こやつは宿題厨ではなく、情弱日狂組でおじゃるぞ
0196デフォルトの名無しさん
2010/11/17(水) 00:53:50たくさんレスありがとうございます。
>191
そうかもしれないです。
printで表示されたものが全部一緒(dataファイルの最初の行)でした。
>195
日狂組ってなんですか??
0197デフォルトの名無しさん
2010/11/17(水) 01:39:520198デフォルトの名無しさん
2010/11/17(水) 01:52:32$s = <>;
($x, $y, $z) = split(/ +/, $s);
print "x=$x y=$y z=$z\n";
0199デフォルトの名無しさん
2010/11/17(水) 01:55:21split(/\n/, $s);
$s=<>; じゃムリだと思うが
0200デフォルトの名無しさん
2010/11/17(水) 03:33:21---- dataの例
4
5
6
----
こんなんだったら、これで。
chomp(my $x = <STDIN>);
chomp(my $y = <STDIN>);
chomp(my $z = <STDIN>);
0201185
2010/11/17(水) 14:39:12レスありがとうございます。
$wordの中身が文字化けしてました;;
原因は$wordの末尾の改行をchompで取り除いてた(つもりだった)のですが,
LFしか削ってくれてませんでした。
今はActivePerl5.10.1のx64版を使ってるのですが,
昔のActivePerlはchompでCR+LFを削ってくれてたような記憶が・・
仕様が変わったんですかね。
0202デフォルトの名無しさん
2010/11/18(木) 04:15:24chomp
http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod
> $/ (English モジュールでは、$INPUT_RECORD_SEPARATOR とも言う) の
> その時点の値に対応する行末文字を削除します。
my $str = "\x0d\x0a";
printf("\$/ => %0v2x\n", $/);
printf("str => %0v2x\n", $str);
chomp($str);
printf("chomped => %0v2x\n", $str);
結果。
$/ => 0a
str => 0d.0a
chomped => 0d
0203デフォルトの名無しさん
2010/11/19(金) 23:20:25パスワードを設定して貰うのに、qwer とか安易なパスワードの時に、
ちょっとしたメッセージを出したいのですが、そういう安易パスワードリストみたいなのはないでしょうか?
もしくは英単語リストみたいな。
自分でも安易なパスワード集というのを考えてみたのですが、おそらく漏れが多いと思うので・・。
0204デフォルトの名無しさん
2010/11/19(金) 23:28:40mechanizeで辞書サイトの検索結果を取ってくりゃいい
0205デフォルトの名無しさん
2010/11/19(金) 23:32:310206デフォルトの名無しさん
2010/11/20(土) 03:31:18ちょwwwパスワード外に投げんなよwww
0207デフォルトの名無しさん
2010/11/20(土) 08:45:03量多いし文字数やパターンで判定するのが一般的じゃないかな
0208デフォルトの名無しさん
2010/11/20(土) 08:59:49辞書ならjohn用のでいいんじゃないか。
ftp://ftp.ox.ac.uk/pub/wordlists/
0209203
2010/11/20(土) 10:13:22ありがとうございます。
これ利用してみたいと思います!
ftp://ftp.ox.ac.uk/pub/wordlists/
qwer載ってたし。
でも、これいいんじゃないのっていう qwbc とかあるから微妙な感じですね。
qwbc とか qwho とかってそんなに、駄目なパスワードじゃないっぽく思えるけど・・。
0210デフォルトの名無しさん
2010/11/20(土) 10:32:24一瞬で検索できる
0211デフォルトの名無しさん
2010/11/20(土) 17:26:24use Flickr::Upload;
use Flickr::API;
use Flickr::API::Response;
use Flickr::API::Photos;
use Flickr::API::Request;
http://search.cpan.org/~cpb/Flickr-Upload-1.32/Upload.pm
api key,secretを 取得して
http://www.flickr.com/services/apps/create/apply
アップロードするまではここ↓をそのまま真似してうまくいくのですが、
ttp://blog.riywo.com/2009/01/17/082207
画像の{id}以外の情報をどうやって出力すればいいのか分かりません。
flickrのURLは次のようになってるので、{farm-id}、{server-id}、{id}、{secret}が必須です。
(この{secret}は画像ごとに決まった値が出るようです)
サムネイル http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_[mstzb].jpg
画像ページ http://www.flickr.com/photos/{user-id}/{photo-id}
( http://www.flickr.com/services/api/misc.urls.html より)
最終的にはアップロード->HTML出力みたいにしたいです。
html出力はこのようなかんじで。
<a href="http://www.flickr.com/photos/{user-id}/{photo-id}">
<img src="http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_m.jpg"></a><br /><br />
誰か助けてください。
0212デフォルトの名無しさん
2010/11/20(土) 19:06:01どうしてもわからないので質問させてください
改行コードを含むテキストに書かれている文章を
改行コードも含めて抽出しようと思うのですが
テキストの内容は
Internet Protocol, Src・・・・
(ここが抜き出したい部分で、約10行ほど)
Transmission Control Protocol, ・・・・
以下続く・・・・
Internet ProtocolからTransmission Control Protocolまでの中間の部分(改行コードあり)を
抽出したいのです
書いたプログラムは以下の通りです
while ( $message = <FILE>){
$match = '(Internet Protocol)(.*)(Transmission Control Protocol)';
if( $message =/$match/s){
print "$2";
}
}
print "処理完了\n";
正規表現にsを加え$2と書けばInternet ProtocolからTransmission Control Protocolまでが
抽出されるか思いましたがダメでした。
レベルの低い問題ですが
どうかご教授御願いします
0213デフォルトの名無しさん
2010/11/20(土) 19:19:36抽出範囲開始文字列(IP)がある・・・フラグON、バッファクリア
抽出範囲終了文字列(TCP)がある・・・フラグOFF、バッファを出力
それ以外・・・フラグONなら行データをバッファに蓄積
でいいんじゃね?
0214デフォルトの名無しさん
2010/11/20(土) 19:47:30$messages =~ /Internet Protocol(.*)Transmission Control Protocol/s
0215212
2010/11/21(日) 06:38:33回答ありがとうございます
>>214さんのを参考に書いてみたのですが
やはりうまく行きません
書いたコードは以下の通りです
1 open(FILE,"IPTCP.txt");
2 while ( $message = <FILE>){ #ファイル関連
3 read FILE, $message, -s FILE;
4 if( $message =~ m/(.*Internet Protocol)(.*)(?=.*Transmission Control Protocol)/s){
print "$2\n";
}
}
print "処理完了\n";
同じパターンで書かれた文字列から、4に該当する文字列を摘出するので
while文を使っているのですが、3を入れる位置に困ってます
ここに入れてしまうと、繰り返すたびに読み込まれてしまうので、良くないと思うのですが
1の下では機能しませんでした
read文についても調べたのですが 「-s FILE」の修飾詞-sの意味など
わかりませんでした(おそらく、文字列を単一行として扱う?)
3を1,2に組み込んでみようかと思いましたがダメでした
このコードの結果として一番最後の3に当てはまる所だけ出力されました
0216212
2010/11/21(日) 06:51:36http://windyakin.if.land.to/src/up38_2358.txt
上記のコードだとこの様に一番最後の
該当する部分しか抽出されません
http://windyakin.if.land.to/src/up38_2359.txt
私自身が考えている完成形はこの様に
該当する範囲を全て抽出できるようにしたいのです
http://windyakin.if.land.to/src/up38_2360.txt
どうかアドバイスよろしく御願いします
0217デフォルトの名無しさん
2010/11/21(日) 07:00:04open
read
while($mes =~/foo(.*?)bar/sg){
print $1;
}
ざっと
keyword: ファイルテスト演算子
0218デフォルトの名無しさん
2010/11/21(日) 08:48:50文章じゃなくてなにかのログの出力なのか。
こういう形式ならyaml使った方が上手くいくんじゃね?
ttp://d.hatena.ne.jp/magicalhat/20060929/1159514801
0219デフォルトの名無しさん
2010/11/21(日) 09:18:17my $begin = qr/^Internet Protocol,/;
my $end = qr/^Transmission Control Protocol,/;
my @line;
open(FILE, 'foo.log') or die;
while(<FILE>){
if (/$begin/ ... /$end/){
push(@line, /$end/ ? "\n" : $_);
}
}
close FILE;
print @line;
0220デフォルトの名無しさん
2010/11/21(日) 09:19:43use warnings;
my $text;
open(INFH, '<', 'test.txt');
read(INFH, $text, (-s INFH));
close(INFH);
while($text =~ s/(Internet Protocol.*?)Transmission Control Protocol//s){
print $1;
print "\n";
}
0221デフォルトの名無しさん
2010/11/21(日) 09:22:52while( <> ){
if ( /Internet Protocol/ .. /Transmission Control Protocol/ ) {
print ;
}
}
だけの事だろ。
# インデントは全角空白。注意
0222デフォルトの名無しさん
2010/11/21(日) 09:23:440223デフォルトの名無しさん
2010/11/21(日) 14:07:38質問に対してワンライナーで無理やり書く必要も無いっしょw
0224デフォルトの名無しさん
2010/11/21(日) 14:17:49個人的使用が多いとそうなるんじゃ
0225デフォルトの名無しさん
2010/11/21(日) 14:19:21これが難しいなら、質問者諸共webprogの初心者スレへ行け。
0226デフォルトの名無しさん
2010/11/21(日) 14:37:190227デフォルトの名無しさん
2010/11/21(日) 14:43:560228Perl忍者 ◆M5ZWRnXOj6
2010/11/21(日) 15:42:38マイトガイの影響かしらないけど あとモダンとかわめいてるカスども
0229デフォルトの名無しさん
2010/11/21(日) 15:44:530230デフォルトの名無しさん
2010/11/21(日) 15:49:340231デフォルトの名無しさん
2010/11/21(日) 15:52:22優越感じゃなくて
単に肌に染み付いてるってことじゃないの?
0232デフォルトの名無しさん
2010/11/21(日) 15:56:14>>228
0233デフォルトの名無しさん
2010/11/21(日) 16:08:35$temp を減らせる方法があるなら、そっちを選ぶことが多い
0234Perl忍者 ◆M5ZWRnXOj6
2010/11/21(日) 16:52:050235デフォルトの名無しさん
2010/11/21(日) 16:59:500236デフォルトの名無しさん
2010/11/21(日) 21:52:47http://blog.livedoor.jp/dankogai/archives/51173577.html
0237デフォルトの名無しさん
2010/11/21(日) 21:59:480238デフォルトの名無しさん
2010/11/21(日) 22:01:200239212
2010/11/22(月) 00:05:27アドバイスありがとうございました
完成しました
このコードの趣旨は>>216のテキスト(2G)を正規表現で
TCPヘッダー、IPヘッダー、UDPヘッダーで分けて
それからさらに各種ヘッダーの中身を一つ一つ
テキストに出力していくという内容でした
例
/→Source port.txt
TCPヘッダー.txt→→ Destination port.txt
\→Sequence number.txt
コレが完成したプログラムです
http://windyakin.if.land.to/src/up38_2361.zip
しかし、未熟者が作ったので正規表現の部分が
全てwhile文の効率の悪いプログラムです
この様なコードの場合
どのようにすれば最適化できるでしょうか?
0240デフォルトの名無しさん
2010/11/22(月) 00:23:43個人的にはだけど、親で開いたファイルハンドルに子が書き込むのはヤダなぁ
0241Perl忍者 ◆M5ZWRnXOj6
2010/11/22(月) 00:27:45なんていうか敵に襲われたら
ハンマー振り回して フンガフンガ!!いって倒したら
そっこう建物にもどってRepairしてそうですね
ドワーフですね
0242Perl忍者 ◆M5ZWRnXOj6
2010/11/22(月) 00:28:450243Perl忍者 ◆M5ZWRnXOj6
2010/11/22(月) 00:33:16>>238
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
0244デフォルトの名無しさん
2010/11/22(月) 00:42:32目障りだし、カスだし、氏んだ方が世の中の為
0245デフォルトの名無しさん
2010/11/22(月) 00:44:13スルーするのが一番いいよ
0246Perl忍者 ◆M5ZWRnXOj6
2010/11/22(月) 00:47:160247デフォルトの名無しさん
2010/11/22(月) 01:06:1020個のopenと19個のcloseがなにか絶望的なふいんきを醸し出しているような……
0248デフォルトの名無しさん
2010/11/22(月) 09:37:47似たような正規表現をまとめて引っ掛けて、分岐処理だろうね。
あと、openにエラートラップが無いと、
一部のログが取れてなくても気がつかないかもな。
0249デフォルトの名無しさん
2010/11/22(月) 15:24:48書き直してみた。
ttp://windyakin.if.land.to/src/up38_2364.zip
無保証です。すまん。一応サンプルの断片で動作確認はしてみたけど。
出力ファイル名にスペースが入ってるのが嫌だったのでかわりに'-'でつないでます。
出力すべきファイルとファイルハンドルの対応が取りやすく(間違いにくく)なってるとは思うが。
よければ誰か添削して改良してちょ。
0250デフォルトの名無しさん
2010/11/22(月) 18:42:43my @a = split(',', '');
print @a-0;
-----
javascriptのように、''な要素が一つ出来上がると単に思っていたのでなかなか理解できずにいます・・。
alert(''.split(',').length);
0251デフォルトの名無しさん
2010/11/22(月) 18:55:100252デフォルトの名無しさん
2010/11/22(月) 18:58:28JavaScriptの仕様の方がよくわからない。
なんでそんな仕様なんだろう。
■ このスレッドは過去ログ倉庫に格納されています