トップページ⇒tech
1001コメント317KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/08/13(月) 18:01:53
Perlについての質問箱 32箱目
0232デフォルトの名無しさん2007/08/25(土) 20:54:30
>>231
君んちの近くにはないの?
0233デフォルトの名無しさん2007/08/25(土) 21:00:45
>>232
自分が行ってみて良かったから人にも勧めてるんだろ。
0234デフォルトの名無しさん2007/08/25(土) 21:21:27
回答者を煽っても質問者が得する事は
何一つ無いと言うのに 全く愚かな奴だ
0235デフォルトの名無しさん2007/08/25(土) 21:31:50
心療内科を探す手間、金、時間を惜しむ奴は治療しなくてよろしい
02362052007/08/25(土) 21:32:13
>>211
それは大変そうだね。
普通は位置情報で処理すると、187の@a_wordへ分割するコードより遅くなるよ?
sortの準備が1秒から0.05秒に減る代わりに、sort自体が0.5秒から10秒に増える感じになる。
ソート済みの位置情報を保存して使いまわす場合には、速度は気にならないだろうけどね。

n番目という情報をソートするだけなら、例えば @a_word = sort @a_word; ならば比較関数を
@order = (0..$#a_word);
@order = sort { $a_word[$a] cmp $a_word[$b]} @order;
のように書けばいい。(@a_word = sort @a_word; より数倍遅い)
同様に
@order = sort { substr($text,$position[$a],...
と、より複雑な比較関数を使って @a_word 自体を作らない手もある。(更に数倍以上遅い)
0237デフォルトの名無しさん2007/08/26(日) 13:55:19
perlのモジュールをインストールするのにすごい手間どっています。

http://digit.que.ne.jp/work/index.cgi?Perl%e3%83%a1%e3%83%a2%2f%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%28CPAN%29
http://blog.ko-c.jp/?eid=661566";>Windows

↑これらのページを参考にしてがんばっているのですがどうもうまくいきません。

NMAKE : fatal error U1077: 'C:\PROGRA~1\MID05A~1\VC\bin\cl.EXE' : リターン コー
ド '0xc0000135

このようなエラーがでてnmakeが途中で終わってしまうのですが何が原因なのでしょうか?
cl.exeのあるフォルダにはPATHを通してあります。
0238デフォルトの名無しさん2007/08/26(日) 14:17:41
諦めてppmにしておいたほうが幸せになれる
0239デフォルトの名無しさん2007/08/26(日) 15:53:34
あきらめて VMware の中に Linux 入れたほうが幸せになれる
0240デフォルトの名無しさん2007/08/27(月) 01:10:00
テキストファイルの文字コードを調べて、もしUTF-8じゃなかったら、UTF-8として読み出すみたいなことは出来るんですか?

ナニナニを使え、みたいなお返事でも結構ですので
0241デフォルトの名無しさん2007/08/27(月) 08:17:58
>>126
今さらだけど、属性使うとそれっぽく書ける

sub f1 :Default(0,'foo') {
  my ($x, $y) = @_;
  print "$x $y\n";
}

実装例

use Attribute::Handlers;
sub UNIVERSAL::Default :ATTR(CODE) {
  my ($pack, $symbol, $referent, $attr, $data) = @_;
  no warnings 'redefine';
  no strict 'refs';
  my $sub = *{$symbol}{NAME};
  my $orig_func = *{$pack."::$sub"}{CODE};
  *{$pack."::$sub"} = sub{
    for my $i (0..$#$data) {
      unless (defined($_[$i])) {splice(@_, $i, 1, $data->[$i]) }
    }
    $orig_func->(@_)
  };
}

0242デフォルトの名無しさん2007/08/27(月) 17:24:59
お前はもうここに書くな
0243デフォルトの名無しさん2007/08/27(月) 17:27:28
質問です。
たまに、戻り値を受け取る変数の型によって、値が変わる関数がありますよね?


(1)
これを自前でサブルーチンとして実装するには、どう記述すればよいのでしょうか。

(2)
この値を呼び出し側で制御することは出来ませんか。
  @tmp = function();
  $result = \@tmp;
のように。

よろしくお願いします。
0244デフォルトの名無しさん2007/08/27(月) 17:53:51
wantarrayとかの話?
02452432007/08/27(月) 18:03:05
>>244
(1)はそれ。ありがとう。
0246デフォルトの名無しさん2007/08/27(月) 18:10:12
>>243
(2)の意味するところがわからん
0247デフォルトの名無しさん2007/08/27(月) 18:16:57
関数の返り値が配列なのかスカラーなのかブーリアンなのか実行前に知りたい時がたまにある。
どうすりゃいいんだろう
0248デフォルトの名無しさん2007/08/27(月) 18:17:44
>>247
ソースを見る
0249デフォルトの名無しさん2007/08/27(月) 18:19:21
>>243
$result = [function()];
02502432007/08/27(月) 18:24:26
>246
戻り値をスカラーで受け取りつつ、関数には、リストコンテキストとして評価できないかなと。
配列のリファレンスが欲しい。

>247
ドキュメントをしっかり作るとか。
あとは、統合環境で何とかならないかな?
02512432007/08/27(月) 18:27:20
リロードしてなかった orz

>249
ありがとうです。そんな使い方があったのですね。
0252デフォルトの名無しさん2007/08/27(月) 18:43:23
>>247
無理だよ。コンテクストや引数、そのほか計り知れない要因によって変わる可能性があるんだから。
0253デフォルトの名無しさん2007/08/27(月) 18:50:31
>>247
なんで分からんねん って話しだが
0254デフォルトの名無しさん2007/08/27(月) 19:01:24
>>248
サブルーチンとか所在のわかっている関数はB::Deparseとかで確認できるけど、
どこから継承されているかわからない階層の深いメソッドとかはどうすりゃいいですか?
0255デフォルトの名無しさん2007/08/27(月) 20:28:52
そんなに深い谷底からメモもなく浮上してくるの?
0256デフォルトの名無しさん2007/08/27(月) 20:35:43
頭の足りない人向けのライブラリでも作ってるのか。大変だな。
0257デフォルトの名無しさん2007/08/27(月) 21:47:15
ソース読むとかドキュメント読むとか取り合えずダンプしてみるとか
callerで深い階層まで拾ってみるとかそんな関数使わないとか
02582542007/08/27(月) 21:51:26
あ、canメソッドを使えばいいのか。canはコードリファレンスを返すんだった。
それをcoderef2textに渡せばソースが出力される。
自己解決しました。お騒がせしました。
0259デフォルトの名無しさん2007/08/27(月) 21:56:30
Perlはまだ書いたことが無いのですが

ファイルサーバーの
¥¥fileserver¥dateの下にあるファイル全てを
ローカルの
C:¥date¥ の下にコピーする

ということは可能でしょうか
0260デフォルトの名無しさん2007/08/27(月) 22:12:48
>>259
perlで可能だが、お前には無理
0261デフォルトの名無しさん2007/08/27(月) 22:16:10
UNIX系なら簡単なにのにな〜
Macとか、Linuxとかにすればいいのに〜

パソコンくんには無理かな〜
0262デフォルトの名無しさん2007/08/27(月) 22:23:06
>>261
馬鹿だ
0263デフォルトの名無しさん2007/08/27(月) 22:46:42
>>261
MacとLinnuxの間はRsyncで同期してるから問題ないのだが

WinとLinuxの間をPerlにしようと思ってるんだ
でもフリーソフトで結構いいのがありそう
02642592007/08/28(火) 00:15:54
>>260
お前にはできるのに、私には無理でしょうか
0265パソコンくん2007/08/28(火) 00:19:32
>>261
うるせーバカ
0266デフォルトの名無しさん2007/08/28(火) 00:21:54
なんか 馬鹿ばっかだな

さすがおこちゃま用Perlだw
02672612007/08/28(火) 00:22:06
パソコンくんと言うと面白いほど釣れるね
ありがとうApple。これからも釣りに使わせてもらうよ
0268デフォルトの名無しさん2007/08/28(火) 01:03:35
はいはい、自己防衛本能だけは旺盛なようでw
0269デフォルトの名無しさん2007/08/28(火) 01:17:10
↓にあるようにnowloadingを表示するのってperlでできるんですか?
http://www.omosiro-flash.com/

javascriptとかajaxとか使ってるんでしょうか?
02702612007/08/28(火) 02:23:07
>>269

Flash
0271デフォルトの名無しさん2007/08/28(火) 05:34:49
すみません、文字列置換がどうしてもうまくいかないので教えてください。

●test1.pl
#!C:/Perl/bin/perl.exe -w
$pattern=<STDIN>; chomp $pattern;
$replace=<STDIN>; chomp $replace;
while (! eof STDIN) {
$string =<STDIN>; chomp $string;
$string =~ s/$pattern/$replace/g;
print $string,"\n";
}

●sample.txt
<a href='(.*)/index.php.*>(vi.*)</a>
$1/img/$2
<a href='http://vista.crap.jp/index.php?num=8824236930' target='_new'>vi8824236930.jpg</a>
<a href='http://vista.crap.jp/index.php?num=8824557866' target='_new'>vi8824557866.jpg</a>
<a href='http://vista.crap.jp/index.php?num=8824543592' target='_new'>vi8824543592.jpg</a>
<a href='http://vista.crap.jp/index.php?num=8824536390' target='_new'>vi8824536390.jpg</a>
<a href='http://vista.crap.jp/index.php?num=8802124487' target='_new'>vi8802124487.jpg</a>
<a href='http://vista.crap.jp/index.php?num=8796159298' target='_new'>vi8796159298.jpg</a>

これで、 perl test1.pl < sample.txt と動かすと、
「$1/img/$2」 と出力されるんです。

ほんとは、「http://vista.crap.jp/img/vi8824236930.jpg」 みたいになって欲しいんです。
説明書を読んで、$1 のところを \1 とか \\1 とか \\\1 とか \\\\1 とか \\\\\1 とかやってみたんですが
やっぱダメでした。
$1 とか \1 って perl では使えないんですか?
0272デフォルトの名無しさん2007/08/28(火) 06:31:21
> $string =~ s/$pattern/$replace/g;

$string =~ s/$pattern/$replace/gx;
0273デフォルトの名無しさん2007/08/28(火) 06:51:38
>>272
おまえのできてないだろwww

#!/usr/bin/perl
use strict;

my $pattern=<STDIN>; chomp $pattern;
my $replace=<STDIN>; chomp $replace;

while (! eof STDIN) {
 my $string =<STDIN>; chomp $string;

 if (my (@matches) = ($string =~ /$pattern/)) {
  my $rep = $replace;
  $rep =~ s/\$(\d+)/$matches[($1 -1)];/eg;
  $string =~ s/$pattern/$rep/eg;
 }
 print $string,"\n";
}
0274デフォルトの名無しさん2007/08/28(火) 11:05:30
LWP::UserAgentでHTTPSアクセスしてるんですが
たまに接続先に繋ぎっぱなしになって戻ってこない時があります。
UserAgent->timeoutも機能してないし、SIGALRMも効きません。
対処法お願いします。
ActivePerl5.8.8です。
0275デフォルトの名無しさん2007/08/28(火) 11:36:34
ある文字列が 2 文字かどうか正規表現を使わずにおこなう方法はありますか?
$string =~ /^..$/;
と同じことがやりたいです。

よろしくお願いします。
0276デフォルトの名無しさん2007/08/28(火) 11:49:56
>>275
length($string) == 2
0277デフォルトの名無しさん2007/08/28(火) 13:10:25
>>276
ありがとう!
0278デフォルトの名無しさん2007/08/28(火) 15:34:09
zipファイルの展開について。

zipファイル(テキストファイルを圧縮したもの)をメモリ上に展開し、
そのテキストを読み込みたいと考えています。
これは可能でしょうか?
可能な場合、参考になるサイト等あればお教えください。

ActivePerl5.8.1で、モジュールの追加なしで考えています。
(Archive::Zipを使い、ファイルに出力すれば読み込めることはわかりました。)
perlでファイルマッピングできればと思いましたが、見つけられず。
0279デフォルトの名無しさん2007/08/28(火) 15:42:51
>>278
zipコマンド群を呼べばいいじゃん。
0280デフォルトの名無しさん2007/08/28(火) 17:10:19
ttp://search.cpan.org/~adamk/Archive-Zip-1.20/lib/Archive/Zip/FAQ.pod

Zip contents in a scalar

Q: I want to read a Zip file from (or write one to) a scalar variable instead of a file. How can I do this?
A: Use IO::String and the readFromFileHandle() and writeToFileHandle() methods. See examples/readScalar.pl and examples/writeScalar.pl.
Reading from streams

Q: How do I read from a stream (like for the Info-Zip funzip program)?
A: This isn't currently supported, though writing to a stream is.
0281デフォルトの名無しさん2007/08/28(火) 20:08:02
>>278
POD読め。もしくは、ソース読め。

ZIP.pod (ZIP.pm に埋まっている場合あり) より.
>=item contents( $memberOrMemberName [, $newContents ] )
>Returns the uncompressed data for a particular member, or undef.
> print "xyz.txt contains " . $zip->contents( 'xyz.txt' );
>Also can change the contents of a member:
> $zip->contents( 'xyz.txt', 'This is the new contents' );
0282デフォルトの名無しさん2007/08/28(火) 22:23:47
>>273
できました!ありがとうゴザイマス。
0283デフォルトの名無しさん2007/08/28(火) 22:38:31
>>282
たぶん単純すぎて誰も答えてくれかったんだろうけど、
明らかにこうでしょ。
>>273が珍回答だってのは初心者の俺でもわかるよ

$string =~ s/$pattern/'"'.$replace.'"'/ee;
0284デフォルトの名無しさん2007/08/29(水) 00:57:00
>>243
これが使えると思う
http://search.cpan.org/~dconway/Contextual-Return-v0.2.1/lib/Contextual/Return.pm
0285デフォルトの名無しさん2007/08/30(木) 00:13:25
Perl+SQLite関連のサイトのブクマがある程度ある人は、良かったら公開して
0286デフォルトの名無しさん2007/08/30(木) 02:34:45
perlをコンパイルしてexeファイルにして配布しているシェアウェアってありますか?
というかperlで作ったプログラムをperl2exe.exeのようなものでコンパイルして、中身のコードを
見れないようにして人に売ったりしてる人っています?

なんか、perlつかってるひとって商売っ気ないというか、なんでもフリー精神がありそうで、そういうことは
禁止されてるのかなと思いまして。
0287デフォルトの名無しさん2007/08/30(木) 03:08:21
関係ないけど、perl製のexeで思い出したw
http://news4u.blog51.fc2.com/blog-entry-1497.html
0288デフォルトの名無しさん2007/08/30(木) 03:14:29
$perl -e 'use LWP::Simple; 〜
というのをコマンドラインからよくやるんだけど、
この「use LWP::Simple」の部分を省略する方法ってありますか?
0289デフォルトの名無しさん2007/08/30(木) 03:16:26
-Mとか-mとか
0290デフォルトの名無しさん2007/08/30(木) 03:23:32
>>289
-Mを忘れてました。もうひとつ、-Mを省略する方法ってないですかね。
perlのaliasを設定するしかないのかな?
0291デフォルトの名無しさん2007/08/30(木) 04:17:09
>>287
爆笑した。この変な会社もやはり、コードの中身をあんまり見られたくないから
PARつかったんだろうね。でも簡単に見られるみたいだけど。

だけど、perlだからこそこの面白話がなりたってるね。
0292デフォルトの名無しさん2007/08/30(木) 04:30:55
>287
やっぱり思い出すよな、それ(笑)
0293デフォルトの名無しさん2007/08/30(木) 10:44:29
昨日EPICをインスコしたんですが、良いですね〜。
もう秀丸には戻れない体になってしまいました。
0294デフォルトの名無しさん2007/08/30(木) 12:54:02
>>283
スゴス・・・

perl の正規表現の解説をググりまくって調べてたんですが、
/e についてはどこも”アッサリ”な説明しかなく
ましてや /ee なんてどこにも書いてませんでした。
みんな避けて通ってるみたい。
0295デフォルトの名無しさん2007/08/30(木) 13:10:01
>>283
それって、$replaceに"が入ってたらしなね?
0296デフォルトの名無しさん2007/08/30(木) 13:10:59
>>294
こういう人ってときどき出現するけど、なにかの精神病なのか?
0297デフォルトの名無しさん2007/08/30(木) 13:31:37
釣りだと思いたいな。。
0298デフォルトの名無しさん2007/08/30(木) 13:38:16
>>294
「e修飾子はevalするもので複数回指定可能」という説明だけで、evalを理解している
人にとって十分だからなぁ。

perlopのサンプルコードのコメントにさらっと書いてあるだけなので見落としやすい
というのはあるが。

# /e's can even nest; this will expand
# any embedded scalar variable (including lexicals) in $_
s/(\$\w+)/$1/eeg;
0299デフォルトの名無しさん2007/08/30(木) 14:05:04
>>296
いつもの子でしょ。
0300デフォルトの名無しさん2007/08/30(木) 15:26:31
>>291,292
なんなんだろうね、この流れも。
PAR使う理由はそこじゃないだろうに
0301デフォルトの名無しさん2007/08/31(金) 00:18:32
>>290
〜のみを引数として渡す、バッチファイル作れば?
0302デフォルトの名無しさん2007/08/31(金) 00:19:33
ここもか・・・orz
どうして perl スレはどこも皆キチガイばっかりなんだ?
0303デフォルトの名無しさん2007/08/31(金) 00:33:02
やあこんにちは
今日も粘着させて貰うので
宜しくお願いしますね
0304デフォルトの名無しさん2007/08/31(金) 00:36:42
>>302-303
ttp://www.websphinx.net/manken/hyen/photo/numata060814-b6.jpg
0305デフォルトの名無しさん2007/08/31(金) 01:22:49
ファイルパスの入った配列をディレクトリ順にソートしてくれるモジュールや
配列は無いでしょうか? …sort関数で可能だったりしますか?
0306デフォルトの名無しさん2007/08/31(金) 01:23:39
ディレクトリ順ってのがよくわからん。
0307デフォルトの名無しさん2007/08/31(金) 01:32:36
abcってことじゃね?
alpha/boo/imac.jpg
beta/aipod/steve.numbers
cats/mycats.cwk
0308デフォルトの名無しさん2007/08/31(金) 01:37:10
use File::Sort
0309デフォルトの名無しさん2007/08/31(金) 01:39:30
alpha/boo/imac.jpg
alpha/fasdg/share.exe
alpha/fasdg/tesadf.txt
beta/aipod/steve.numbers
beta/aipod/winny.exe
cats/mycats.cwk
みたいなのを期待しているんじゃ(ry
0310デフォルトの名無しさん2007/08/31(金) 01:46:20
説明不足で失礼しました。親ディレクトリからの
並びになるようにソートしたかったんです。

my @path = ('/c/bar/hoge', '/a/foo', '/b');

これを

/b
/a/foo
/c/bar/hoge

のように並べ替えたいのですが単純にsort関数使うと

/a/foo
/b
/c/bar/hoge

こうなってしまうので… 超初歩的なこと訊いてそうで恐縮ですorz
0311デフォルトの名無しさん2007/08/31(金) 01:48:00
/b より /a/foo が後ろになるのかよ
0312デフォルトの名無しさん2007/08/31(金) 01:48:07
/のマッチ回数でハッシュとかに入れたら?
0313デフォルトの名無しさん2007/08/31(金) 01:50:51
説明伝わりにくそうなので書き直し。310は忘れてください…

単純に言うなら欠くディレクトリの持ってるファイルを先に、
子になるディレクトリを後にして並べたいという感じです
0314デフォルトの名無しさん2007/08/31(金) 01:52:08
書き込んでる間にレスが

> use File::Sort
ありがとう 調べてみます

> 312
ありがとうございます。もうちょっと工夫してみます
0315デフォルトの名無しさん2007/08/31(金) 02:20:28
>>288
環境変数 PERL5OPT に設定しておく。
いらないときが面倒だけど。
0316デフォルトの名無しさん2007/08/31(金) 02:52:08
sort { ( $T{$a} ||= scalar @{[split m!/!,$a]} ) <=> ( $T{$b} ||= scalar @{[split m!/!,$b]} ) || $a cmp $b } @path
0317デフォルトの名無しさん2007/08/31(金) 04:11:47
>>316
なにそのスパゲッテイコード。
0318デフォルトの名無しさん2007/08/31(金) 07:42:20
シャチ泳ぎがスパゲティかあ、、、
0319デフォルトの名無しさん2007/08/31(金) 08:08:45
加えて、スパゲッテイコードの意味を正しく理解しているかも微妙な線(誤用とまでは言わない)。
0320デフォルトの名無しさん2007/08/31(金) 08:22:16
316が要件を満すか否かは別にして317は酷い
03213052007/08/31(金) 09:13:26
>>316
こ、これは! まさに望んでいたソートになりました。ありがとうございました
ワンライナーで書けちゃうんですねぇ… 勉強になりました
0322デフォルトの名無しさん2007/08/31(金) 12:22:13
高卒にはこの美しさが分からないんだろうな
0323デフォルトの名無しさん2007/08/31(金) 12:34:04
>>322
きれいなシャチ泳ぎは美しいかもしらんが、>>316のコードは
お世辞にもきれいとは言えん。釣りで仕込んだのかもしれんが、無意味な無名配列作成とか。

同じ事を普通に書くと以下になる。
sort { ( $T{$a} ||= split m{/},$a ) <=> ( $T{$b} ||= split m{/},$b ) || $a cmp $b } @path


ただ「スパゲティ」とは別ものだ。
0324デフォルトの名無しさん2007/08/31(金) 13:07:39
私もscalarとかが不必要だとは思ったけど
なんていうかコードよりこのスタンスに美を感じるんだよね
やはり専門卒レベルには理解出来ない芸術なんだよ
03253162007/08/31(金) 13:12:43
>>323
最初それで書いたんだけど
Use of implicit split to @_ is deprecated at - line 5.
Use of implicit split to @_ is deprecated at - line 5.
ってワーニングでるし思考停止しかけてたから無名配列作ったんだけど
0326デフォルトの名無しさん2007/08/31(金) 14:02:31
tr|/|/| ってのもいいかもね。
@pathの中に "/" が含まれていたらただのsortと同じになるので、
そんなのも考慮するなら、再帰的に作るしかない気がします。
0327デフォルトの名無しさん2007/08/31(金) 17:08:25
>>325
$cache{$a} ||= @_ = split m{/},$a
0328デフォルトの名無しさん2007/08/31(金) 17:34:23
トラブって原因探るときに美が邪魔をするんだよねwww
0329デフォルトの名無しさん2007/08/31(金) 17:36:17
ひさしぶりにperlでプログラム書いたら、== と eq があるの忘れててはまった。
0330デフォルトの名無しさん2007/08/31(金) 17:46:41
== と === がある言語ではまったとか書けばいい?
0331デフォルトの名無しさん2007/08/31(金) 18:06:46
あぁ、ナポリタン喰いてぇ
■ このスレッドは過去ログ倉庫に格納されています