Perlについての質問箱 24箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
http://www.perl.org/get.html
● 2006/04/26現在の最新版: 5.8.8
● 2006/04/26現在の開発版: 5.9.3
リンク集は>>2-3
過去スレは>>4
0002デフォルトの名無しさん
NGNGPerlプログラミング講座: http://www.site-cooler.com/kwl/perl/
[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/
[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.8/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0003デフォルトの名無しさん
NGNGCPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004デフォルトの名無しさん
NGNG1 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/
いつも連投規制に引っかかるので1レスに纏めようとしたらhttpが多すぎといわれたorz
0005デフォルトの名無しさん
NGNG11 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/
21 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/
0006デフォルトの名無しさん
2006/04/26(水) 12:40:450007デフォルトの名無しさん
2006/04/26(水) 12:58:100008デフォルトの名無しさん
2006/04/26(水) 13:02:20がたまにある場合、非同期書き込みか排他制御?みたいなのしないといけないと思うけど
どうやってするの?
0009デフォルトの名無しさん
2006/04/26(水) 13:04:59http://www.google.co.jp/search?hl=ja&q=Perl+%E6%8E%92%E4%BB%96&lr=
0010デフォルトの名無しさん
2006/04/26(水) 14:06:03それらの値を1バイトずつ表示したいのですが、どうすれば良いのでしょうか?
unpack("C16", $kekka)とすると、16バイト分しか表示できませんでした。
0011デフォルトの名無しさん
2006/04/26(水) 14:06:220012デフォルトの名無しさん
2006/04/26(水) 14:07:200013デフォルトの名無しさん
2006/04/26(水) 14:15:470014デフォルトの名無しさん
2006/04/26(水) 14:43:29flock とか fcntl の F_SETLKW とか。
ロックファイルとかセマフォとか。
0015デフォルトの名無しさん
2006/04/26(水) 16:15:070016デフォルトの名無しさん
2006/04/26(水) 20:13:17乙
>>15
マターリ=サゲシンコ
0017デフォルトの名無しさん
2006/04/26(水) 21:34:40環境変数?の変更ですか?
ご教授ください。
0018デフォルトの名無しさん
2006/04/27(木) 01:38:33全角→半角変換(z2h)はうまくいきます。どこが悪いのでしょうか。
use encoding "shiftjis";
use Encode;
use Encode::JP::H2Z;
$str = "アイウエオ";
$str = encode("euc-jp", $str);
Encode::JP::H2Z::h2z(\$str);
$str = decode("euc-jp", $str);
print $str;
0019デフォルトの名無しさん
2006/04/27(木) 03:40:29shiftjisなら
use strict;
use warnings;
use Encode qw/from_to/;
use Encode::JP::H2Z;
my $str = "アイウエオ";
from_to($str,'shiftjis',"euc-jp");
Encode::JP::H2Z::h2z(\$str);
from_to($str,"euc-jp",'shiftjis');
print $str;
euc-jpだったらfrom_toいらない
0020デフォルトの名無しさん
NGNG環境変数とは違うものなんだけど…作業ディレクトリ=カレントディレクトリといえば分かる?
もし分からないなら、自分で調べれ。Perl以前の基本中の基本だから。
# 時々知らない香具師が現れる…
$FindBin::Binのほう、起動されたスクリプトが配置されているディレクトリの絶対パスが入っている。
そもそもそのスクリプトは、スクリプトのあるディレクトリにあるファイルを操作する、
つまり作業ディレクトリがスクリプトのある場所になっていることを前提に作ってあるわけだ。
だから、その前提に合うように作業ディレクトリを変えてやれば望んだとおりに動作する、と。
0021デフォルトの名無しさん
2006/04/27(木) 14:19:38perl2exe以外で
0022デフォルトの名無しさん
2006/04/27(木) 15:57:310023デフォルトの名無しさん
2006/04/27(木) 16:05:05stat || die とやると、なぜか stat の結果が得られない。
なぜ??????
---------
Sarge:~$ perl -e '@val=stat("/bin/bash")||die;print "size:$val[7]\n"'
size:
↑なにも出力されない。
Sarge:~$ perl -e '@val=stat("/bin/bash");print "size:$val[7]\n"'
size:625228
↑die をはずすとちゃんと出力される。
Sarge:~$ ls -la /bin/bash
-rwxr-xr-x 1 root root 625228 Dec 20 2004 /bin/bash
Sarge:~$ perl -v
This is perl, v5.8.4 built for i386-linux-thread-multi
0024デフォルトの名無しさん
2006/04/27(木) 16:09:15……覚醒剤でもやってるのか?
0025デフォルトの名無しさん
2006/04/27(木) 16:14:35ヒント: 優先順位
0026デフォルトの名無しさん
2006/04/27(木) 16:31:32()でくくらないと、演算子の優先順位の問題があるのね。
0027デフォルトの名無しさん
2006/04/27(木) 16:33:57stat の結果が、優先順位の問題で返ってこないとすると、
その場合、die が実行されてないか?
逆に、dieが実行されず、stat しか実行されなければ、statの結果が返るはず。
あー、もうわかんねぇ。
だれかわかりやすく教えて!。
0028デフォルトの名無しさん
2006/04/27(木) 16:38:55ヒント: コンテクスト
0029デフォルトの名無しさん
2006/04/27(木) 16:41:12ヒント:or
0030デフォルトの名無しさん
2006/04/27(木) 18:56:26hint: stat の引数がない
0031デフォルトの名無しさん
2006/04/27(木) 19:01:380032デフォルトの名無しさん
2006/04/27(木) 19:19:35||はスカラーコンテキストで評価される
だから@valにはstatの戻り値としてリストは格納されていない
試しにprint $val[0];とやってみ1って出るから
つまりstatが成功したことを示すスカラーが返却されている
つぅか||なんて使うな
orにしとけ
0033デフォルトの名無しさん
2006/04/27(木) 20:10:56read <perldoc> or die;
0034デフォルトの名無しさん
2006/04/27(木) 20:49:39Not enough arguments for read at >>33 line 2, near "<perldoc> or"
>>33 had compilation errors.
perldoc -f read
0035デフォルトの名無しさん
2006/04/27(木) 21:07:04PerlAppオススメ。有料だけど起動時間は最速だと思う。
0037デフォルトの名無しさん
2006/04/27(木) 23:13:01お前の勘違いじゃね?
環境変数だろ
0038デフォルトの名無しさん
2006/04/27(木) 23:21:200039デフォルトの名無しさん
2006/04/27(木) 23:23:43カレントディレクトリの意味はわかるけど
>>20のいうようなカレントディレクトリの変更方法がわからんw
0041デフォルトの名無しさん
2006/04/27(木) 23:32:570042デフォルトの名無しさん
2006/04/27(木) 23:33:43おいコラ、諦めんな!
0043デフォルトの名無しさん
2006/04/27(木) 23:36:41ごめん、、、ヒントをくれ・・・カレントディレクトリの意味しかわからんよ。
0044デフォルトの名無しさん
2006/04/27(木) 23:43:01教えて栗
0045デフォルトの名無しさん
NGNG| use FindBin;
| chdir $FindBin::Bin;
のchdirについて訊いているのかと思って解説しただけ…
ってもしかして>>37氏ageてるって事は質問者さんだったか・・・
そうだったら重ねてスマソ。普通の回答者だと思って回答頼んじまった
0046デフォルトの名無しさん
2006/04/27(木) 23:45:50970 名前:デフォルトの名無しさん[sage] 投稿日:2006/04/26(水) 01:01:29 ?
>>969
原因は分からんが関連付けから起動したときに、
作業ディレクトリが別のところに行くようになっちゃってるようで。
根本的な原因はこのスレの範疇外だと思う。スクリプトの頭で、
use FindBin;
chdir $FindBin::Bin;
とでもやっておきなされ。これで作業ディレクトリがスクリプトのある場所に行く。
>作業ディレクトリが別のところへ行くようになっちゃってるようで
これの設定変更ってできる?
004720
NGNGそっちのことだったのかorz それについては知らん。
というかその問題はPerlと関係ないと伝えたつもりだったから、
Perlに関連する部分か前提になっている作業ディレクトリという単語に対しての
レスだろうと思ってあんな勘違いしたレスになった。いや申し訳ない。
0048デフォルトの名無しさん
2006/04/28(金) 00:42:520049デフォルトの名無しさん
2006/04/28(金) 01:33:07答え絶対いわないよな
0050デフォルトの名無しさん
2006/04/28(金) 01:33:30/[\r\n]/;
この一行がエラーになるんだけど、文法的になんか不味いですか?
emacsのバージョンは
"GNU Emacs 21.4.1 (i386-mingw-nt5.0.2195) of 2005-08-28 on CUBE" です
0051デフォルトの名無しさん
2006/04/28(金) 01:50:50シねばいいのに。
0052デフォルトの名無しさん
2006/04/28(金) 02:03:08エラーつってもcperl-modeのエラーだから、
cperl-mode使えるやつなら試してみれるかなと思って。
End of `/ ... /' string/RE not found: (scan-error Unbalanced parentheses 1 13)
これがミニバッファにしつこく表示される。
0053デフォルトの名無しさん
2006/04/28(金) 02:14:40どっかでエンバグしたのかね。
Emacs 系のスレで聞いてみた方が良い気も。
0054デフォルトの名無しさん
2006/04/28(金) 02:22:18>Emacs 21.3 で試したけど問題無いみたい。
試していただきどうもです。
時間があるときにEmacsのアップデートするのが良さそうですね。
0055デフォルトの名無しさん
2006/04/28(金) 02:30:01思ったんだけどショートカットから起動してたりと化しない?
0056デフォルトの名無しさん
2006/04/28(金) 08:32:475.8.4から5.8.8にバージョンアップしても、
5.8.4の時に入れたモジュールとかは引き継いでくれますよね?
0057デフォルトの名無しさん
2006/04/28(金) 13:47:12だろうけど
動かないモジュールがでるかもね
0058デフォルトの名無しさん
2006/04/28(金) 16:27:53ありがとうございます。
バージョン違いで動かないものが出てくることはある、ということですよね。
それはしょうがないですね。
0059デフォルトの名無しさん
2006/04/28(金) 20:36:40文字列が問題無いのはわかりますが、
2バイト文字、
packされたバイナリデータ、
リファレンス、オブジェクト、
ファイルハンドル、
等はハッシュのキーとして使えるのでしょうか?
使うときに注意することとかあるでしょうか?
別にファイルハンドルをハッシュのキーとして使うメリットも思いつかないんですが、
どこまで使えるんだろう? と思ったので。
use constant で定義した定数は使えませんよね?
0060デフォルトの名無しさん
2006/04/28(金) 20:57:51え? スカラにさえなるなら何でも使えると思うけど?
0061デフォルトの名無しさん
2006/04/28(金) 21:05:35ハッシュのキーには文字列しか使えないはず。
ttp://search.cpan.org/~nwclark/perl-5.8.8/pod/perldata.pod
> Hashes are unordered collections of scalar values indexed
> by their associated string key.
で、Perlの文字列データはバイナリセーフなので
・2バイト文字
・packされたバイナリデータ
これらは全て文字列(PV)として一括りに扱うことが出来る。
リファレンス(やそれにblessしたオブジェクト)に関しては、
文字列表現に変換されて記録されるため保障されない。
それを扱うためには標準モジュールであるTie::RefHashを使う。
ttp://search.cpan.org/~nwclark/perl-5.8.8/lib/Tie/RefHash.pm
ファイルハンドルについては…どうだっけ。文字列として扱って良いんだっけ?
0062デフォルトの名無しさん
2006/04/28(金) 21:37:36どうしたらよいのでしょうか?
sort の中で sort したら何とかなるかと思ったのですが、キーが2つあると$a,$bがこんがらかってしまいました。
それに、どんなに工夫しても
sort何か比較する式} keys %val
としてしまったら、$x しかソートされないし、ネストしたsortという方向自体が間違っているような気がしています。
ヒントだけで良いので教えていただけないでしょうか?
0063デフォルトの名無しさん
2006/04/28(金) 21:57:24一回でやろうとするからこんがらがる。$xと$yを別々に決定するんだ
foreach my $x (sort keys %val) {
foreach my $y (sort keys %{$val{$x}}) {
print $x, $y, $val{$x}{$y};
}
}
006462
2006/04/28(金) 22:12:17それではハッシュのキーでのソートになってしまいます。
ハッシュを値でソートしてと言う意味は
$val{ a }{ A } = 1;
$val{ a }{ B } = 4;
$val{ b }{ A } = 3;
$val{ b }{ B } = 2;
の場合
a,A,1
b,B,2
b,A,3
a,B,4
のように出力させたいのです。
0065 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
2006/04/28(金) 22:34:42┌ ┌ | ζ
┌ ┌ |
┌ ┌ |
┌ ┌ |
┌ ┌ |
┌ ┌ |
┌ ┌ |
0066デフォルトの名無しさん
2006/04/28(金) 22:37:06my %val = (a => {A => 1,
B => 4,
C => 6},
b => {A => 3,
B => 2},
c => {D => 5,
E => 7});
foreach my $kh ( sort {$val{$a->[0]}->{$a->[1]} cmp $val{$b->[0]}->{$b->[1]}} map { my $fk = $_; map { [$fk, $_] } keys(%{$val{$_}}); } keys(%val)) {
printf("%s:%s:%d\n", $kh->[0], $kh->[1], $val{$kh->[0]}->{$kh->[1]});
}
}
0067デフォルトの名無しさん
2006/04/28(金) 23:01:17006862
2006/04/28(金) 23:21:32やばい。ヒントだけもらって自分で解くつもりが答えを見てもよくわかんない...orz
でも、時間をかけて順々に追っかけていくと何とかわかったような気がしてきました
解読結果を書くので間違っていたら指摘してください( 用語とか間違ってるかも )
$fkは$x成分を一時的に入れている。
外側のmapでキーの要素$x,$yの組み合わせに対して
無名配列[$x,$y]を要素としたリストをつくっている。
@xy_list = map{...} keys(%val)
できた@xy_listに対して、以下のsort
(自分の場合やりたいのはcmpでなくて、<=> なので少し変えてます)
sort {
$val{ $aのx成分 }{ $aのy成分 }
<=>
$val{ $bのx成分 }{ $bのy成分 }
}@xy_list
この、値順に並んだ[$x,$y]に対してこれを$khとしてforeachで回している。
一度[$x,$y]の組み合わせのリストをmapで作るのがポイント。
自分一人では絶対に思いつかない方法でした。
ありがとうございました。
0069酩酊 ◆TWARamEjuA
NGNGひとまず、
[key1, key2, value]
にしてsortするのが判りやすくなるかな?
0070デフォルトの名無しさん
2006/04/28(金) 23:26:58あってると思う。
でもこんなことやるより最初にハッシュキーの組み合わせのリストだけ作ってsortしたほうが読みやすいし、
>>69の人が言ってるようにそもそもデータ構造を変えたほうが正解かもしれない
007162
2006/04/28(金) 23:34:45for my $x ( keys %val ){
for my $y ( keys %{ $val{ $x }} ){
push @xy_val_list,[$x,$y,$val{ $x }{ $y }];
}
}
@xy_list = sort { $a->[2] <=> $b->[2] } @xy_val_list;
for my $xy_val ( @xy_list ){
print join ",",@$xy_val,"\n";
}
って感じですね。
これも$xと$yをセットにしたもの( [$x,$y,$val] )を要素とした配列をソートすると言う方針は同じですね。
mapにあんまり慣れていないので、こっちのほうがわかりやすいような気がします。
0072デフォルトの名無しさん
2006/04/29(土) 00:26:44open($fh, '<', "$file") || croak("failed to open: $file: $!");
は || じゃなくてorにしろありました
どうしてでしょうか?
上記のコードは別に||でもうまくいってるみたいなんだけど
0073デフォルトの名無しさん
2006/04/29(土) 01:38:18を1行で書けばこんな感じ。
print map { "$_->[0],$_->[1],$_->[2]\n" }
sort { $a->[2] <=> $b->[2] }
map {
my $x = $_;
map { [$x, $_, $val{$x}{$_}] } keys %{$val{$x}}
} keys %val;
おれはこの手の書き方をよく使うけど、複雑になりそうなら
>>71 のような素直な書き方の方がいいかもね。
0074デフォルトの名無しさん
2006/04/29(土) 03:23:18> 憧れのDANさんが最近の記事で書いていたんですが
その憧れのDANさんに訊けばいいだろ。
0075デフォルトの名無しさん
2006/04/29(土) 04:40:21優先順位
open $fh, '<', "$file" or croak "failed to open: $file: $!";
と書ける。どちらが可読性が高いかという話だ
0076デフォルトの名無しさん
2006/04/29(土) 06:09:20m/pattern/; # ()がたくさん
print $+; # 最後にマッチした値
0077デフォルトの名無しさん
2006/04/29(土) 07:23:08@x = m/pattern/;
print ((grep {defined $_} @x)[-2]);
0079デフォルトの名無しさん
2006/04/29(土) 08:47:58それか嫌ならマッチを2行にして
最後のマッチにだけ(?>pattern)を使う
→次のマッチから()を使ってそれの$+とか?
>>77みたいなperlらしすぎるコードも嫌いじゃないけどさ
0080デフォルトの名無しさん
2006/04/29(土) 13:42:12ありがとうございました!
0081デフォルトの名無しさん
2006/04/29(土) 14:38:28#$lineに一行読み込み後の処理
$line =~ s/\n//;
$line =~ s/\r//;
$all_line .= $line;
とすると、たまに先頭に付加されてしまう事があるんだけど、何故?
先頭に付加というのは、
$all_lineが abcdef の状態に、XYZの行を足したら、
XYZdef になってしまうという事です。
0082デフォルトの名無しさん
2006/04/29(土) 14:45:52そのtxtファイルの改行コードが壊れてCR CR LFになってる悪寒。
先頭に出るのはコンソール上でカーソルを行頭に戻す制御コードCRが
一個以上消え残ってしまっているからだと思われる。
- $line =~ s/\r//;
+ $line =~ s/\r//g;
でどう?
0083デフォルトの名無しさん
2006/04/29(土) 14:50:12さすがにperlの.=がバグっているとは考えにくいので思い違いの
可能性が高いな。
$all_line .= $line;
の前後で$all_lineの値を表示してみると問題はそこではないことが
わかりそうな気がする。
0084デフォルトの名無しさん
2006/04/29(土) 14:59:10chompじゃダメなの?
0085デフォルトの名無しさん
2006/04/29(土) 15:10:15その場合、確認すべき事を理解して無いと >>82 の現象を見逃してしまうけどね。
$all_line = "abcdef\rXYZ"; になっている場合。
0086デフォルトの名無しさん
2006/04/29(土) 15:14:52原因は82で間違いなさそう。
CRCRLFが出力されるのはWindows上でPerlを動かしてるときに
print FH "abcdef\r\n";
といったことをしたんだと思う。
元々\nを(環境に合わせて)CRLFにする機能があるから自分でCRを出力する必要は無いんだよね。
0087デフォルトの名無しさん
2006/04/29(土) 15:35:53・読み込んでいるtxtは、Windows上で、某有名txtエディターで作ったtxt
-> 改行コードは、問題ないと思います。
・$all_lineに連結する直前の、$all_line、$lineのprint表示はしてみましたが、
それぞれ、正常に表示されていました。
連結後に、$all_lineがおかしくなります。
・テストはWindowsで行っていますが、運用時にはLinuxで作成したファイルも混在するため、
chompは使わずに、上記の置換処理で代用しています。
というか、サンプルでは直接書きましたが、上記の置換処理は、
自作chomp関数の中の処理となっています。
で、レスを読んでいて、\rが残っているのだろう、と思えてきましたが、
上記のような状態なので、改行コードが壊れるとも思えず、
どこで混入したのかが、謎ですね・・・・・
0088デフォルトの名無しさん
2006/04/29(土) 15:38:08月曜日にやってみます。
でも、試しに今、自宅で上記の再現コードを書いても発生しないから、
どこかで自分が改行コードを壊して、やらかしている予感・・・・
0089デフォルトの名無しさん
2006/04/29(土) 16:23:210090デフォルトの名無しさん
2006/04/29(土) 16:45:300091デフォルトの名無しさん
2006/04/29(土) 19:02:580092デフォルトの名無しさん
2006/04/29(土) 20:20:16"\r\n",
"\n\r",
"\r",
"\n",
"\x0d\x0a",
"\x0a\x0d",
"\x0d",
"\x0a",
);
for ( @in ) {
print map { ord( $_ ) . ' ' } split( '' );
print "-> ";
chomp;
print map { ord( $_ ) . ' ' } split( '' );
print "\n";
}
これを windows, unix, スクリプトの改行コード CRLF, LF の環境で試してみると・・・
0093デフォルトの名無しさん
2006/04/30(日) 13:37:39本にしか書かれていない章もあるようです。
perldocに無くて、本にだけ書いてあることってどれくらいあるんでしょう?
0094デフォルトの名無しさん
2006/04/30(日) 13:53:59必要なことはすべて perldoc に書かれているので, 英語が読めればラクダ本は不要.
0095デフォルトの名無しさん
2006/04/30(日) 14:28:31http://www.oreilly.co.jp/books/4873110971/toc.html
24.1 初心者にありがちな誤り ← perltrap
24.2 効率の問題 ← ?
24.3 プログラミングの書法 ← perlstyle
24.4 Perlらしいコード ← ?
24.5 プログラムの生成 ← ?
上の ? の項は perldoc だとどれに該るんでしょうか?
http://search.cpan.org/~nwclark/perl-5.8.8/pod/perltoc.pod
0096デフォルトの名無しさん
2006/05/01(月) 04:24:18select id, name from user_info where id = '5'
を改行コードなどでフォーマットさせるモジュールか関数を知っていたら教えてください。select以外も対応するもの。
select
id,
name
from
user_info
where
id = '5'
こんな感じにしたいです。
009796
2006/05/01(月) 16:37:390098デフォルトの名無しさん
2006/05/01(月) 17:59:03既に共存成功している人で、ppmでのインストールとかどうなってますか?
やっぱりppm利用時に絶対パスでppmの場所を指定しないと、
目的のPerlバージョンのあるところにインストールされないものですか?
009998
2006/05/01(月) 17:59:430100デフォルトの名無しさん
2006/05/01(月) 22:58:14以下の二つのうち下だけがエラーになります。
sub hoge {
$huga = shift;
return keys %$huga;
}
-- コレは通る
%z = (a => 1, b => 2);
&hoge(\%z);
-- コレはエラー
&hoge(\(a => 1, b => 2));
下の方で書きたいんですが、どうにかなりませんか?
0101デフォルトの名無しさん
2006/05/01(月) 23:10:100102デフォルトの名無しさん
2006/05/02(火) 00:49:13sub hoge {
my $huga = shift;
my %huga = @$huga;
return keys %huga;
}
指摘の意味が分かればいいんだけど・・・
0103デフォルトの名無しさん
2006/05/02(火) 00:55:450104デフォルトの名無しさん
2006/05/02(火) 02:51:34sub { print ref($_[0]), '/' . @_ } -> (\(a => 1, b => 2)); # SCALAR/4
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html#Making_References
0105デフォルトの名無しさん
2006/05/02(火) 09:31:09なんとかnext if 〜に書き直せない?
0106デフォルトの名無しさん
2006/05/02(火) 09:35:14小学校の算数の教科書を復習するとわかるよ。
0107デフォルトの名無しさん
2006/05/02(火) 11:03:03next if !( $t->[0] eq 'T' or $t->[0] eq 'S' and $t->[1] eq 'a' );
next if $t->[0] ne 'T' and !($t->[0] eq 'S' and $t->[1] eq 'a');
next if $t->[0] ne 'T' and ($t->[0] ne 'S' or $t->[1] ne 'a);
でも元のunless使ったのが一番読みやすいと思う。
0108デフォルトの名無しさん
2006/05/02(火) 12:32:31ド・モリマンの法則ですか?わかりません!><
0109デフォルトの名無しさん
2006/05/02(火) 13:09:09@array = map { \my $aton } 0 .. 3;
#4つの無名スカラー値のリファレンスを代入
ってあるんですが、\myが意味わかりません
なんでmyの前にデリファレンス演算子の\があるの?
my \$atonなんじゃないかと思ったけどこれはエラーになった
0110デフォルトの名無しさん
2006/05/02(火) 13:34:40逆スラッシュ演算子はデリファレンスでなく作る方。
my で map ブロック内のスコープを持つレキシカル変数 $aton を宣言し、
そのリファレンスを返している。演算子の優先順位が分かるよう括弧を
付けるなら map { \(my $aton) } 0..3;
0111109
2006/05/02(火) 14:52:05ありがとうございます
\がmy $aton全体にかかってるんですね
逆スラッシュ演算子については完全に勘違いでした
あほでした失礼します
0112デフォルトの名無しさん
2006/05/02(火) 14:57:44ド・モリマンの法則ってのがあるんだ
へぇ〜
やっぱこのスレ勉強になるわ
0113デフォルトの名無しさん
2006/05/02(火) 15:33:23あるあ、ねーよwww
0114デフォルトの名無しさん
2006/05/02(火) 15:39:44next if (! ($t->[0] eq 'T' or $t->[0] eq 'S' and $t->[1] eq 'a'));
0115デフォルトの名無しさん
2006/05/02(火) 17:06:45next if $t->[0] ne 'T' and "$t->[0]$t->[1]" ne 'Sa';
または
next if "$t->[0]$t->[1]" !~ /^T|^Sa/;
0116デフォルトの名無しさん
2006/05/02(火) 18:21:22普通こういうときは外部ファイルの拡張子をpmにするんでしょうか?それともpl?
外部ファイルではpackageを使っておらず、@INCに置くことはありません。
0117デフォルトの名無しさん
2006/05/02(火) 18:48:030118デフォルトの名無しさん
2006/05/03(水) 01:08:46$flag = 1, last if (適当);
}
上記のコードを実行するとifでtrueになったときに
whileを抜けて、そのときに$flagがセットされますが、
どうしてそのようになるのか理解できません
last if ()の時点でループを抜けてしまい
$flag=1は評価されないような気がするのですが、
一体何が起こっているのでしょうか?
0119デフォルトの名無しさん
2006/05/03(水) 01:36:27> last if ()の時点でループを抜けてしまい
そうだな。
> $flag=1は評価されないような気がするのですが、
なぜ?
0120デフォルトの名無しさん
2006/05/03(水) 01:37:10コンマは演算子であって文の区切りでは無いよ。
> 一体何が起こっているのでしょうか?
if ((適当)) { $flag = 1, last }
0121デフォルトの名無しさん
2006/05/03(水) 02:05:41ありがとうございます。plにします。
0122デフォルトの名無しさん
2006/05/03(水) 02:33:29hint: if と , の優先順位
0123デフォルトの名無しさん
2006/05/03(水) 10:50:14sub lock_open{
my $file=shift(@_);
#ここにlockの処理
open(OUT, ">>$file");
return OUT;
}
としたのですが、
Bareword "OUT" not allowed while "strict subs" ...
と怒られてしまいます。openの前に my OUT としても
No such class OUT ...
と怒られるのですが、perl的にはどのようにするのが正しいのでしょうか。
0124デフォルトの名無しさん
2006/05/03(水) 11:09:240125123
2006/05/03(水) 11:25:13といいますか問題はロックまわりではなくファイルハンドルの扱いなんです。
わかりにくい書き方をしてしまってごめんなさい。
これまではファイルハンドルをグローバルで書いてしまっていて再利用しづらかったので、
これを機にstrictでまじめに書くようにしようと思ったのですが、上記のような状態で…。
0126デフォルトの名無しさん
2006/05/03(水) 12:13:42open my $fh, ">> $file";
return $fh;
でいいんじゃね?
つか、ひょっとして
OUT = lock_open( 'filename');
とかやってない? だとしたら間違い。
0127デフォルトの名無しさん
2006/05/03(水) 12:14:26君の知りたいことはここに載っていることかな?
http://perldoc.jp/docs/perl/5.6.1/perlfaq5.pod
の、
(どうすればファイルハンドルをサブルーチンに局所化できますか?
0128デフォルトの名無しさん
2006/05/03(水) 14:43:24perldoc.jp にある HTML 化された POD ってアンカー消してあって不便だよね。
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq5.html#how_can_i_make_a_filehandle_local_to_a_subroutine_how_do_i_pass_filehandles_between_subroutines_how_do_i_make_an_array_of_filehandles
0129デフォルトの名無しさん
2006/05/03(水) 14:56:04日本語ドキュメントに対する細かいケアが行なわれていないのが興味深いね。
0130デフォルトの名無しさん
2006/05/03(水) 16:32:36>>>127
>perldoc.jp にある HTML 化された POD ってアンカー消してあって不便だよね。
ものによるみたいだよ?
今読んでたperlfuncはアンカーあったし。
0131デフォルトの名無しさん
2006/05/03(水) 16:57:52原文読めば済むからでしょ
0132123=125
2006/05/03(水) 17:36:00やってます。
あー違うんですかー。
>>127
よく理解できていませんが、これみたいです。
ちょっとがんばってみます。
ありがとうございました。
0133デフォルトの名無しさん
2006/05/03(水) 17:36:27俺読めない。いいな読める人は。
0134123=125
2006/05/03(水) 17:43:06OUT = lock_open('filename') という記述が誤っているとのことでしたが、
正しい書き方がわかりません。
イチイチで申し訳ないのですが、教えていただけないでしょうか。
0135123=125
2006/05/03(水) 17:52:07同じようにmain(?)側で変数に代入して、それをファイルハンドルとして扱うだけですね。
ファイルハンドルと変数をごっちゃにしてしまっていました。(情けないです)
ありがとうございました。
0136デフォルトの名無しさん
2006/05/05(金) 12:39:100137デフォルトの名無しさん
2006/05/05(金) 13:06:060138デフォルトの名無しさん
2006/05/05(金) 13:07:500139デフォルトの名無しさん
2006/05/05(金) 19:52:46user2:password
user3:password
のようなユーザーのリストから
open (D,"user.dat");
@userdata=<D>;
close (D);
$dataline=0;
foreach (@userdata){
($loadid[$dataline],$loadpass[$dataline])=split(/:/,$_);
$dataline++;
}
のように読み込んで、入力されたデータと一致するようにしているのですが、
入力されたデータがuser1とpasswordだった場合、
if ($loadid[$count] eq $id)
でIDは照合できるのですが
if ($loadpass[$datalocation] eq $pass)
($datalocationは$countと同じ値)でやってみると、同じ文字列を入れても同じだと認識しません。
printしてみても同じ文字列なのですが…htmlでprintして見るとどうも後ろに空白のような物があるのですが、
chompやchopをしてみてもうまくいきません。どなたかどのようにしたらいいのか教えてください。
0140デフォルトの名無しさん
2006/05/05(金) 20:24:01print unpack "H*", $string;
とかやっとけばどう異なるかよくわかる。
0141デフォルトの名無しさん
2006/05/05(金) 21:37:20ファイルからロードしたデータ:70617373776f72640d0a
入力したデータ70617373776f7264
と出ました。0d0aを検索してみたら改行コードだということがわかりました。
chompしてみると70617373776f72640dと出ます。なので一致しません。
Perl 改行 削除で検索してみましたらこのページが出てきたので
ttp://www.nishishi.com/perltips/string2.html
書いてあるようにファイルを読み込むときに
$dataline=0;
foreach (@userdata){
$_=~ s/\r//;
$_=~ s/\n//;
($loadid[$dataline],$loadpass[$dataline])=split(/:/,$_);
$dataline++;
}
のように追加してみましたらうまくいきました。ありがとうございました。
0142デフォルトの名無しさん
2006/05/05(金) 21:59:56use strict;
$/ = "¥x0d¥x0a"; # 入力セパレーター(行末)をCRLFにする
my (@loadid, @loadpass);
open D, "user.dat" or die;
while (<D>) {
chomp; # この対象もCRLF
($loadid[$. - 1], $loadpass[$. - 1]) = split /:/;
}
close D;
0143デフォルトの名無しさん
2006/05/05(金) 23:07:195.8.8に乗り換えようと思っているのですが、
とあるスクリプトが動かなくて苦労しています。
--------------------------------------------
use encoding "cp932";
#5.8.4だと、cp932でopenできる
#use open ":encoding(cp932)";
#5.8.7以降だと、shift-jisと書かないとダメ
use open ":encoding(shift-jis)";
use strict;
my $str = "";
$str = "テスト";
print "$str\n";
print length($str), "\n";
--------------------------------------------
5.8.4までだと、
use open ":encoding(cp932)";
と書けたのですが、5.8.7と5.8.8だと、
use open ":encoding(shift-jis)";
と書かないと、
Wide character in print at testcode.pl line 6.
と出て、文字化けしてしまいます。
cp932というコードセットは、うまく使えない仕様になってしまったのでしょうか。
そのくせ、
use encoding "cp932";
は通るのだから、よく分からない。。。use open時のバグかな?
0144デフォルトの名無しさん
2006/05/06(土) 00:54:40探しております。
HDD(1)中の拡張子*.mpgのファイルを別のHDD(2)に
コピーする際に、HDD(2)の空き容量を確認したいの
ですが、そのような関数またはモジュールがperlには
ありますか? mpgファイルの容量は:
$size = (-s "test.mpg");
で調べられることは分かったのですが、コピーする先
のHDD(2)に十分な空き容量があるかを調べたいのです。
0145デフォルトの名無しさん
2006/05/06(土) 01:21:09WindowsならWin32::DriveInfoってモジュールを使ったことがある
0146デフォルトの名無しさん
2006/05/06(土) 01:23:06馬 鹿 は encoding.pm を 使 う な (゚Д゚)
0147デフォルトの名無しさん
2006/05/06(土) 02:06:33でどうだ。
encodingは確かに使いづらいけど本当にカジュアルに使えるようになったらかなり便利だと思う・・・
0148デフォルトの名無しさん
2006/05/06(土) 03:57:12use encoding 'shift-jis';
use open 'encoding(shift-jis)';
でも同様のエラーになるから、cp932の問題じゃないんじゃないか?
つか、そのスクリプトなら use encoding だけでよくて use open いらないんじゃね?
0149デフォルトの名無しさん
2006/05/06(土) 10:45:08今でも十分お手軽でしょ。副作用が大きいから分かんない奴は使うなって
作った人間が言ってるのに、なんで固執するのか理解に苦しむ。
0150デフォルトの名無しさん
2006/05/06(土) 14:25:03素早いご回答をありがとうございます。
求めている機能を含むモジュールがあるので
すね。
Unix系でも動くperlスクリプトにしたいので、
別のモジュールも探してみます。
0151デフォルトの名無しさん
2006/05/06(土) 16:29:53time() + 10000 * 60
とやるしかありませんか?
0152デフォルトの名無しさん
2006/05/06(土) 17:01:560153デフォルトの名無しさん
2006/05/06(土) 19:59:38N分後ならtime()+60*n
N時間後ならtime()+60*60*n
N日後ならtime()+60*60*24*n
うるう秒みたいな特殊なケースを除けばこれは絶対に正しい?
0154デフォルトの名無しさん
2006/05/06(土) 20:25:23正しくないケースを伸べよ。
0155デフォルトの名無しさん
2006/05/06(土) 20:30:25「60*n」等の式が正しいとすれば(正しいだろう)
現在のエポック秒に求める秒数を足してるのだから明らかに正しい。
なんせ年月日時分の概念が無いんだから。
0156デフォルトの名無しさん
2006/05/06(土) 20:45:060157デフォルトの名無しさん
2006/05/06(土) 20:59:20ちゃんと>>155読んだ?
0158デフォルトの名無しさん
2006/05/06(土) 21:38:31阿呆は放置。
0159デフォルトの名無しさん
2006/05/06(土) 21:45:48ビーーン
0160デフォルトの名無しさん
2006/05/06(土) 21:53:29本来の要求仕様がわからんから正確にはなんとも言えんが、
「n秒後」という要求では、逆にうるう秒は考えちゃいけないだろ。
「x月y日まであと何秒?」という場合なら考えなきゃいけないが。
0161デフォルトの名無しさん
2006/05/06(土) 22:05:07規則性がないからどうしようもないけどね。
0162デフォルトの名無しさん
2006/05/06(土) 22:10:13仕様がそんなにかわるんですかね?
簡単に仕様変更を書いたサイトとかってないですかね?
0163デフォルトの名無しさん
2006/05/06(土) 22:12:430164デフォルトの名無しさん
2006/05/06(土) 22:14:090165デフォルトの名無しさん
2006/05/06(土) 22:20:460166デフォルトの名無しさん
2006/05/06(土) 22:41:470167デフォルトの名無しさん
2006/05/06(土) 22:45:260168デフォルトの名無しさん
2006/05/06(土) 22:47:150169デフォルトの名無しさん
2006/05/06(土) 23:44:57http://dev.perl.org/perl6/
Pugs含め現状どうなってるかは知らない
0170デフォルトの名無しさん
2006/05/07(日) 00:13:350171デフォルトの名無しさん
2006/05/07(日) 00:17:03my $time = expire_calc('+7y'); # 3年後のエポック秒
日付に関しちゃ年によってずれるだろう。
0172デフォルトの名無しさん
2006/05/07(日) 01:03:57なにがずれるん?
0173デフォルトの名無しさん
2006/05/07(日) 01:07:29>use CGI::Util qw( expire_calc );
いや、それ、31日ある月の計算すらしてないよ。
my(%mult) = ('s'=>1,
'm'=>60,
'h'=>60*60,
'd'=>60*60*24,
'M'=>60*60*24*30,
'y'=>60*60*24*365);
を掛けてるだけだから。
0174デフォルトの名無しさん
2006/05/07(日) 01:09:540176デフォルトの名無しさん
2006/05/07(日) 01:18:100177デフォルトの名無しさん
2006/05/07(日) 01:22:16反則技を使えばできないこともない。でも基本的にそういう言語ではない。
0178デフォルトの名無しさん
2006/05/07(日) 01:25:21要するに任意の日付までの秒数を求めようとしている人がいるわけね…
0179デフォルトの名無しさん
2006/05/07(日) 01:32:380180デフォルトの名無しさん
2006/05/07(日) 01:36:32N秒後は + N (間違いなし)
N分後は + N*60 (閏秒でズレる)
N時後は + N*60*60 (閏秒でズレる)
N日後は + N*60*60*24 (閏秒でズレる)
N月後は + N*60*60*24*30 (31日の月、閏年、閏秒でズレる)
N年後は + N*60*60*24*30*365 (31日の月、閏年、閏秒でズレる)
0181デフォルトの名無しさん
2006/05/07(日) 01:37:570182デフォルトの名無しさん
2006/05/07(日) 01:56:54ええええええ
俺がやりたいのは、市販のプログラム に乗っかって パケット解析しつつ
そのパケットをアルゴリズムで分析して(かなり原始的なアイデアはいくつかあるから実験したい)
命令出す ってのなんだけど この言語でいけるかな?
トップ企業では普通にやってるらしいが
その関係者がにちゃんでぼろっと言ってたのだと、そいつはむかしperlつかって組んだらしい
ネトゲでマクロやってて正規表現の基本とかはわかってる
ただ、ネックだったのはパケットとアルゴリズムでした。
らくだ本と、アルゴリズムの基礎を学校の図書館で借りてきた。パケットはあとまわし。
とりあえず自動ログインツールをつくることを目標にしてるけど、
exeで動かさないなら、いちいちperl login.plとか打って起動させなきゃならんの?
login.pl の末端に autorun.plを起動させる文かいたりして、
条件 しだいで buy.plとかを動かす、とかそんなふうに組んでくの?
リアルタイムでどんな処理してるかビジュアルで把握したかったら、
別のプログラムが必要なんかな?VBちょっとやったことあるけど、あれは窓をすぐにつくれるじゃん?
0183デフォルトの名無しさん
2006/05/07(日) 02:08:540184デフォルトの名無しさん
2006/05/07(日) 02:28:09>exeで動かさないなら、いちいちperl login.plとか打って起動させなきゃならんの?
>login.pl の末端に autorun.plを起動させる文かいたりして、
>条件 しだいで buy.plとかを動かす、とかそんなふうに組んでくの?
そうだよ
0185デフォルトの名無しさん
2006/05/07(日) 02:31:02localtime() 使えばいいだけじゃないの?
>>180
「閏秒でずれる」という表現がおかしいでそ。
例えば「3分後」は 3 * 60 = 180秒後であって、間に閏秒を挟んでいても
それは変わらん。
0186デフォルトの名無しさん
2006/05/07(日) 04:59:06として、間に閏秒があった場合、
(y/y/y y:y:y)−(x/x/x x:x:x) ≠ n になっちゃうか。
0187デフォルトの名無しさん
2006/05/07(日) 08:23:49次の分の同じ秒のことを言っているのかをはっきりさせないまま
話しているのでなんだかよくわからなくなってるような。
前者の意味なら常に秒数だけ気にしていればいいが後者だと閏秒が
でてくる。
DateTimeだと1分後と60秒後は区別していて、1分後は閏秒こみだから
こんな例がマニュアルにある。
# 1971-12-31 23:59:30 - our starting datetime
$dt->clone->add( minutes => 1 );
# 1972-01-01 00:00:30 - one minute later
$dt->clone->add( seconds => 60 );
# 1972-01-01 00:00:29 - 60 seconds later
$dt->clone->add( seconds => 61 );
# 1972-01-01 00:00:30 - 61 seconds later
0188デフォルトの名無しさん
2006/05/07(日) 11:13:220189153
2006/05/07(日) 12:08:48ありがとうございました
0190デフォルトの名無しさん
2006/05/07(日) 12:38:12今まで見たことないんだが。
0191デフォルトの名無しさん
2006/05/07(日) 14:09:29天文関係とか、年単位で正確な秒数が必要な科学技術計算では必須だよ。
0192デフォルトの名無しさん
2006/05/07(日) 19:01:290193デフォルトの名無しさん
2006/05/07(日) 20:48:34地道にindexとsubstrやれば出来そうですが。
0194デフォルトの名無しさん
2006/05/07(日) 20:55:08楽チンチン
0196デフォルトの名無しさん
2006/05/07(日) 21:34:12use bignum 入れて速度保とうとすると面倒だしさ。
>>190
閏病を調整する人が使えば当然必要だーね。
0197デフォルトの名無しさん
2006/05/07(日) 23:13:33crackmeのkeygen作るのに、Math::BigInt使って、Perlで16進数16桁の平方を求めるとかはやったことあるけどね。
0198デフォルトの名無しさん
2006/05/08(月) 07:21:37という表現があるようなんですが
これは何でしょうか?
eは置き換え後文字列部分を式評価するという意味
ですが、なんで二つ並んでいるの?
0199デフォルトの名無しさん
2006/05/08(月) 08:04:030200デフォルトの名無しさん
2006/05/08(月) 08:24:43式評価した結果を更に式評価したいから。
0202デフォルトの名無しさん
2006/05/08(月) 10:19:37$_ = "aXb";
s/X/"1+1"/ => a"1+1"b
s/X/"1+1"/e => a1+1b
s/X/"1+1"/ee => a2b
まともなコーディングで二重評価する必要性のある例がなかなか思い浮かばないけど…何か良い例あるかね
とりあえずFAQ
ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_can_i_expand_variables_in_text_strings
0203デフォルトの名無しさん
2006/05/08(月) 11:00:38>>147
ありがとうございます。結局こちらでは、
use encoding "cp932";
use open ":encoding(cp932)";
use open ":std";
と、最後に use open ":std"; を追加することで対応できました。
確かにencoding、馬鹿ではよく理解できない。。。
>>148
確かにcp932の問題ではなかったですね。失礼しました。
use openを付けたのは、実際の処理の際には、
テキストファイルを読み込む場合が多いので、
その状況も検証したかった、というのが理由です。
>>149
jperl時代のお手軽さに慣れてしまってたので。。。
0205デフォルトの名無しさん
2006/05/08(月) 16:36:55> まともなコーディングで二重評価する必要性のある例がなかなか思い浮かばないけど…何か良い例あるかね
う〜む、具体的に思い出せないが、かつて「あれってこのためにあったのか!!」と
驚愕した記憶がある。
0206デフォルトの名無しさん
2006/05/08(月) 17:39:21それでは本質的にできないようなことなのだろうか?
0207デフォルトの名無しさん
2006/05/08(月) 17:57:020208デフォルトの名無しさん
2006/05/08(月) 19:31:36> まともなコーディングで二重評価する必要性のある例がなかなか思い浮かばないけど…何か良い例あるかね
どっかのカスCGIで、HTMLテンプレート展開ルーチンに
そんなのが使われてたのを見た記憶が。
0209デフォルトの名無しさん
2006/05/08(月) 21:15:570210ヽ(´ー`)ノ ◆.ogCuANUcE
2006/05/09(火) 02:05:12s/%([[:xdigit:]]{2})/pack('H2', $1)/ge;
0211デフォルトの名無しさん
2006/05/09(火) 02:46:04一重じゃん。
0212デフォルトの名無しさん
2006/05/09(火) 03:05:350213デフォルトの名無しさん
2006/05/09(火) 07:53:18>ヽ(´ー`)ノ ◆.ogCuANUcE
>ヽ(´ー`)ノ ◆.ogCuANUcE
0214デフォルトの名無しさん
2006/05/09(火) 12:37:33企業気分になれるんだよ。
0215デフォルトの名無しさん
2006/05/09(火) 13:32:270216デフォルトの名無しさん
2006/05/09(火) 14:49:57http://www.yukinko-net.jp/computer/download/downloadlist.htm
0217デフォルトの名無しさん
2006/05/09(火) 19:47:300218デフォルトの名無しさん
2006/05/09(火) 19:57:06ラリってる奴が作ってるから。
0219デフォルトの名無しさん
2006/05/09(火) 20:09:59脳内麻薬物質が出てくるからです。
0220デフォルトの名無しさん
2006/05/09(火) 20:11:150221デフォルトの名無しさん
2006/05/09(火) 20:17:280222デフォルトの名無しさん
2006/05/09(火) 20:59:170223デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
2006/05/10(水) 00:52:210226デフォルトの名無しさん
2006/05/10(水) 05:43:21/e の多重評価って確か、意図した仕様じゃなくて、開発側も当初は気づかなかったけど結果として可能になっちゃってた、というモノだったと思ふ。
「面白いからそのまま feature にしようぜ」、というノリが Perl 流か。w
0227デフォルトの名無しさん
2006/05/10(水) 07:29:35use Cwd;
chdir('~');
print Cwd::getcwd();
しても変化なし
0228デフォルトの名無しさん
2006/05/10(水) 07:38:56@list = glob('*');
print @list;
とすると
a.plb.plc.pl
となる
また、
$list = (glob('*'))[0];
print $list;
とすると
a.pl
これを
$list = glob('*');
print $list;
とすると
a.pl
となる
どうしてc.plにならないの?
たとえば
$str = qw(a b c);
print $str;
とするとcになるのに
0229デフォルトの名無しさん
2006/05/10(水) 07:48:24chdir($ENV{'USERPROFILE'});
0230デフォルトの名無しさん
2006/05/10(水) 08:53:51readlineと同じでスカラコンテキストではイテレータになるから
ドキュメントではファイル名グロブ<>の方かな
0231デフォルトの名無しさん
2006/05/10(水) 09:29:04さんくす!
でもこのUSERPROFILEっていう環境変数は誰が
セットしているの?
マイコンピュータ→環境変数とたどって一覧みたけど
USERPROFILEなんてなかったよ
win2000proですけど。
0232デフォルトの名無しさん
2006/05/10(水) 09:37:17print "hello, " && print "goodbye.";
が
goodbye1
になるのはなぜ?
print "hello, " and print "goodbye.";
ならきちんと
hello, goodbye
となる
andと&&の優先順位の違いが原因だろうとは
思うんだけど具体的に何が起こっているのかわからない
0233デフォルトの名無しさん
2006/05/10(水) 09:47:06chdir の引数を省略するとホームディレクトリに移動する。参考まで。
HOME が未設定の環境でどうなるかは知らん。
0234デフォルトの名無しさん
2006/05/10(水) 10:21:06explorer.exe
0235デフォルトの名無しさん
2006/05/10(水) 10:23:32優先順位の問題。
print は引数にリストを取るので、連続したリストに見える後続の全てを引数として飲み込む。ひとつの文中で、print のようなリスト演算子モドキの後に何か別の処理を書く時にはこの動作に注意しなくてはいけない。
引数をそれぞれ () で括るのが最も万能の対策。() を使わずに何か後続させようとする場合は、より優先順位の低い not、and、or、xor のいずれか、あるいは制御構造修飾子を使うべし。
最初の && を用いた文は次のようにパースされる。
print( "hello, " && print( "goodbye.") );
perl はまず && の左辺 "hello, " を評価する。リテラル "hello, " は Perl の有効な真値であるため、次に右辺の print() が評価される。
print は出力に成功すると真値 '1' を返すのでこれも真と評価される。よって && の両辺が真となり、最後に評価された値である '1' が、最初の print の引数として渡され、それが出力される。
てな感じ。
0236デフォルトの名無しさん
2006/05/10(水) 10:24:53>print "hello, " && print "goodbye.";
print ("hello, " && (print "goodbye."));
>print "hello, " and print "goodbye.";
(print "hello, ") && (print "goodbye.");
0238デフォルトの名無しさん
2006/05/10(水) 15:03:45C:\>perl -MCwd -echdir(); -eprint(Cwd::getcwd());
C:/Documents and Settings/Administrator
おーう、知らなかったぜ
0239デフォルトの名無しさん
2006/05/10(水) 16:03:16なんだ単にchdirの引数省略すりゃよかったのか
どうもありがとうもー
0240デフォルトの名無しさん
2006/05/10(水) 16:13:07my %hash = (a=>1, b=>2, c=>3);
foreach (each %hash)
{
print $_ , "\n";
}
この結果が
c
3
になるんだけど意味わからんのです
perldoc -f each
で読んでみると
eachはスカラーコンテキストで呼ばれると次のキーのみを返すとあります
foreach ()の()の中はスカラーコンテキストですよね?
なのにどうしてprint $_ , "\n";
の結果が
c
3
なんかになるのだろう
それと、どうしてハッシュ全体が$_にセットされないの?
foreach (each %hash)としたら
まず一回目のループでeach %hashされて一つ目がとりだされて
つぎのループでまたeach %hashされて二つ目がとりだされて
っていうふうにならないのはなぜ?
ループ一回しか回らんのですが
どういうからくりか教えてくださ・・・い
0241デフォルトの名無しさん
NGNGforeachに使う配列がeachで取り出した(c,3)になってる
ここでも参考にしてコード書き直せ
http://perl.misty.ne.jp/function01/each.html
0242デフォルトの名無しさん
2006/05/10(水) 16:19:33超わかりやすかった
さんくふぉーゆー
0244デフォルトの名無しさん
2006/05/10(水) 16:57:590245デフォルトの名無しさん
2006/05/10(水) 17:19:500246デフォルトの名無しさん
2006/05/10(水) 18:01:55$i = 0;
for $n (1..100) {
$a[$i] = $n;
$i++;
}
Perl の心を伝えるのは難しいものよのう。
0247デフォルトの名無しさん
2006/05/10(水) 19:13:29pritn for 1
これが構文的にはOKだしね
0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
2006/05/10(水) 20:25:03Unquoted string "pritn" may clash with future reserved word at - line 1.
Useless use of a constant in void context at - line 1.
- syntax OK
ほんとだ。syntax は OK らしい。
0250デフォルトの名無しさん
2006/05/10(水) 20:49:17そっかforeach(...)のカッコ内はリストコンテキストだったんだね
0251デフォルトの名無しさん
2006/05/10(水) 23:16:03配列を返す関数get_array()でforeachは(get_array() ){...}
とか書いてもget_array()一回分の配列しか取らない。
eachで取り出した配列であるキーと値が一回分出てきている。
全ての値が見たいなら
print $_ , "\n" foreach (%hash);
とかでオケ
0252デフォルトの名無しさん
2006/05/10(水) 23:20:26print join( "\n", %hash, "\n");
デバッグ目的なら
use Data::Dumper;
print Dumper( \%hash );
0253デフォルトの名無しさん
2006/05/11(木) 00:31:15>>251そっか単にハッシュをforeachでまわせばよかったのか
ありがとー
0254デフォルトの名無しさん
2006/05/11(木) 01:21:050255デフォルトの名無しさん
2006/05/11(木) 02:39:39スレッドごとにインタプリタの環境を複製するから仕方ないのかな?
perl -e 'use threads;push(@TL,threads->new(sub{}))for(0..99);sleep 10;$_->join for(@TL)'
0256デフォルトの名無しさん
2006/05/11(木) 05:51:01うん、激重な上にメモリもかなり消費。
0257デフォルトの名無しさん
2006/05/11(木) 09:51:08どうすればうまくいくんでしょうか?
$mozi_code="euc-jp";
#$mozi_code="sjis";
$str="文字コードテスト";
print "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=$mozi_code\">";
print "<HTML>";
&jcode'convert (*str,$mozi_code);
print "文字列=$str";
print "</HTML>";
0258デフォルトの名無しさん
2006/05/11(木) 10:22:04print "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=$mozi_code\">";
print "<HTML>";
ってなによ。
0259デフォルトの名無しさん
2006/05/11(木) 10:30:22途中省略しただけ
これでもちゃんと表示できないんだけど
$mozi_code="euc-jp";
#$mozi_code="sjis";
$str="文字コードテスト";
print "<HTML>\n";
print "<HEAD>\n";
print "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=$mozi_code\">";
print "<TITLE>$title</TITLE>\n";
print "<BODY>";
&jcode'convert (*str,$mozi_code);
print "文字列=$str";
print "</BODY></HTML>";
0260デフォルトの名無しさん
2006/05/11(木) 11:09:25sub is_tainted {
return ! eval {
join('', @_), kill 0;
1;
};
}
if(is_tainted($value))
などとして$valueが汚染されているかをチェックするらしい
join('', @_), kill 0;
が特に理解できない
kill 0でプロセスの状態がチェックできるのはわかったけど
いったいどのプロセスをチェックしてるんだ?
本当ならkill 0, xxxというふうにプロセスID指定しなきゃならんのでは?
0261デフォルトの名無しさん
2006/05/11(木) 11:22:22print "文字列=$str";
とりあえずこの「文字列=」の部分も変換すれ
0262デフォルトの名無しさん
2006/05/11(木) 11:37:33kill 0は汚染チェックされる物なら何でもよくて、特にkill 0でなければならないというわけではない。
たぶん実行しても他に影響なさそうなものということで選んだと思われる。
そしてなぜだかわからないがperlsec(1)の例にあるように、
$arg, `true`; # Insecure (although it isn't really)
汚染されたデータと危険な操作を,で並べたときも汚染チェックでNGになるので、is_taintedの
パラメタが汚染されていたときは実行時エラーの発生によりevalの戻り値がundefになる。
0263デフォルトの名無しさん
2006/05/11(木) 12:35:56&jcode'convert (*str,euc-jp);だとエラーがでるのはどうしてですか?
0264デフォルトの名無しさん
2006/05/11(木) 13:14:150265デフォルトの名無しさん
2006/05/11(木) 13:25:49jcode.plのconvertは文字コードの指定はeuc,jis,sjisのどれかしか受付けない。
euc-jpは結果的に空文字列になるがそのどれでもない。
0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
2006/05/11(木) 13:39:23ちょっ、euc-jp の結果は 0
0268デフォルトの名無しさん
2006/05/11(木) 13:54:41ありゃ、確認するために
print euc-jp;
としたら空文字列だったんだが、よくかんがえるとこれは
eucというファイルハンドルに-jpをprintしていたのか...
すまん。
0270デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
2006/05/11(木) 14:59:390272デフォルトの名無しさん
2006/05/11(木) 15:07:16&jcode'convert (*str1,euc);
&jcode'convert (*str2,euc);
&jcode'convert (*str3,euc);
というようにしなければならないのですか?
ページ全部一括でEUCに変換できないんですか?
0273デフォルトの名無しさん
NGNGhttp://euc.jp/i18n/charcode.ja.html
0274デフォルトの名無しさん
2006/05/11(木) 15:27:13正しい行き先教えてやれよ。
0275デフォルトの名無しさん
2006/05/11(木) 15:34:14つまりフォームから送信されたデータをファイルに書き込んで保存する場合は
EUCに変換して保存するのはやめたほうがいいということですね?
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
2006/05/11(木) 16:17:37>>1読んで。
0278デフォルトの名無しさん
2006/05/11(木) 16:18:32kill がシグナル送信に成功したプロセス数を返すことを思い出したら、
kill 0; の戻り値を確認するといいよ。
>>262 は、この(一見)無意味なkill 0; の役割だね。
0279デフォルトの名無しさん
2006/05/11(木) 17:15:29&jcode'convert (*all_str,euc);
>>275
どこをどう読むと(ry
0281デフォルトの名無しさん
2006/05/11(木) 17:36:25データの保存方法ですが
1:フォームから送信されたデータをEUCに変換して保存してEUCとして読み込んで表示する
2:フォームから送信されたデータをSJISで保存して読み込むときEUCに変換するして表示する
のどっちがいいか知りたかっただけです
それでどっちがいいんでしょうか?
0282デフォルトの名無しさん
2006/05/11(木) 17:42:11自分のすきな方でいいんじゃないかな。
保存より表示の回数が多いなら、保存時に変換しておくと変換回数を減らせる。
まぁ、効果は小さいものだろうけど。
個人的には、表示を EUC で行うなら EUC で保存しておくのが好みだけど。
0283デフォルトの名無しさん
2006/05/11(木) 17:53:54それを助長するように回答付ける方もカスだが。
0284デフォルトの名無しさん
2006/05/11(木) 18:03:22指摘されたのが自分だと気づいてないんじゃないだろうか。
0285デフォルトの名無しさん
2006/05/11(木) 19:27:25まぁもちつけ。
それから、もっとまともな指摘をしろよ。
0286デフォルトの名無しさん
2006/05/11(木) 19:33:56hoge:kwaKjt6IJ/rBs:1100:100:Hoge,,,:/home/hoge:/usr/bin/csh
区切りが:と,の2つあるので下のようにしました。
m/(.*):(.*):(.*):(.*):(.*):(.*):(.*)/;
@MA = split(',',$5);
$MA[0] = lc($MA[0]);
$MA2 = join(',',@MA);
print "$1:$2:$3:$4:$MA2:$6:$7\n";
ところがこれをおこなうと、小文字に変わりますが",,,"が消えてしまいます。
hoge:kwaKjt6IJ/rBs:1100:100:hoge:/home/hoge:/usr/bin/csh
,,,のところはnullだけでなく文字が入る場合もあります。
どうすれば
hoge:kwaKjt6IJ/rBs:1100:100:hoge,,,:/home/hoge:/usr/bin/csh
のようなかたちになりますか?
0287デフォルトの名無しさん
2006/05/11(木) 19:40:11splitのマニュアルを、良く読め。
3つ目のパラメータだ。
0288デフォルトの名無しさん
NGNGとか
0289デフォルトの名無しさん
2006/05/11(木) 19:55:430290デフォルトの名無しさん
2006/05/11(木) 20:01:09s/(.*?:.*?:.*?:.*?:)(.*?):/$1.lc($2)/e;
0291デフォルトの名無しさん
2006/05/11(木) 20:06:45@MA = split(',',$5,-1); でうまくいきました。
0292デフォルトの名無しさん
2006/05/11(木) 20:09:120293デフォルトの名無しさん
2006/05/11(木) 20:57:22まともな指摘がなされてると思うが
0294デフォルトの名無しさん
2006/05/11(木) 21:09:19取り繕ってもダメ。大文字でタグを書く人間がHTMLを勉強しているはずがない。
0295デフォルトの名無しさん
2006/05/11(木) 21:50:26論理的じゃない理論だが、納得。
0296デフォルトの名無しさん
2006/05/11(木) 23:33:03昔は、本文と区別しやすくするためにHTMLは大文字で書くのが良いとされていたのになぁ
0297デフォルトの名無しさん
2006/05/12(金) 00:28:530298デフォルトの名無しさん
2006/05/12(金) 01:05:18>>259がその手の人とは思えませんが?
0299デフォルトの名無しさん
2006/05/12(金) 01:24:250300デフォルトの名無しさん
2006/05/12(金) 03:34:050301デフォルトの名無しさん
2006/05/12(金) 03:39:50そうすれば、世の中少しは良くなるよ!!
0302デフォルトの名無しさん
2006/05/12(金) 04:13:18Perlを愛してるなんて気持ちはないと断言できる!
0303デフォルトの名無しさん
2006/05/13(土) 03:17:41ppm install http://www.bribes.org/perl/ppm/Win32-DDE.ppd
Excelの一番左上のセル(C1R1)の内容を延々と表示するプログラムを書きました。
#!/Perl/bin/perl
$client = new Win32::DDE::Client ('excel', "Sheet1");
print sprintf('%06d ', ++$i), $client->Request ('R1C1') while 1;
32768回目(2^16 / 2)のリクエストから挙動がおかしくなり
49152回目(2^16 / 4 * 3)からは4回に1回しか値が取得できなくなり
65536回目で
「Undefined subroutine &main:: called at C:/Perl/site/lib/Win32/DDE/Callback.pm line 46.」
とエラーを吐きます。このエラーをググると
http://www.google.com/search?num=50&hl=ja&ie=UTF-8&oe=UTF-8&q=%22Callback.pm+line+46%22&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
2件ヒットしますが解決に至りませんでした。
何かいいアイディアはありませんでしょうか。
0304デフォルトの名無しさん
2006/05/13(土) 08:30:11以前 Win32::DDE 使ったことあるけど、おれもエラーが出た。
そのときソース(Win32::DDE のperl部分)もみたけどよく分からなかった。
Win::32::DDE::Callback には
TO DO
Test, debug, document; this hasn't been touched since the original version, and
doesn't seem to be used by Win32::DDE::Client, so no rush :)
と書かれてるけど、Win32::DDE::Client によって使われてるし。
2^15 や 2^16 回でエラーが発生してるということは、モジュール自体あたりのバグかも
しれないね。
Win32::DDE ではなく、Win32::API を使うという方法はどうかな。
0305デフォルトの名無しさん
2006/05/13(土) 10:30:58今はpdftotextを呼び出して使っているんですが、
その部分を自分で作ってしまえればすっきりするかなぁと思っています。
0306デフォルトの名無しさん
2006/05/13(土) 10:39:48いろいろあるようだけど、どれがおすすめとかは知らない
0307305
2006/05/13(土) 11:07:44ありがとうございます。
実はすでにモジュールのサーチはしてたんですが、
作るためのモジュールと読み出すためのモジュールの区別も付かなかったんです。
英語力なさ過ぎです。
せめてサンプルプログラムでもあれば想像で何とかできるんですが…。
0308デフォルトの名無しさん
2006/05/13(土) 11:26:39指定されたファイルに出力
されていなかった場合は標準出力
というように処理を分けたいのですが、何かいい方法はないでしょうか
今はいちいち if で処理を分けているのですが
けっこう量が多いので面倒なのです
$ some_script.pl -o foo.txt
foo.txt に結果を書き込む
$ some_script.pl
結果を標準出力する
0309デフォルトの名無しさん
2006/05/13(土) 11:33:11ありがとうございます。
XSの方のソースをちょっと眺めてみます。
9年前に作成されたモジュールでVer0.02だから多くを求めるのは無理なのかもしれませんねーー)
0310デフォルトの名無しさん
2006/05/13(土) 12:02:11リダイレクトじゃだめなのかい
some_script.pl > foo.txt
0311デフォルトの名無しさん
2006/05/13(土) 12:15:12select
open STDOUT,...
open $fh,'>&STDOUT' や $fh = *STDOUT
0312デフォルトの名無しさん
2006/05/13(土) 12:48:33つーか その出力用のメソッド作れば?
0313デフォルトの名無しさん
2006/05/13(土) 12:53:560314デフォルトの名無しさん
2006/05/13(土) 13:30:14select FILE;
de ii jan.
むしろ >>310 でいいじゃん。
0315308
2006/05/13(土) 14:21:17すみません、書き忘れていました
途中経過を標準出力したかったので
リダイレクトは使いたくなかったのです
>>311 でうまいこと実現できたのでこれを使わせていただきます
どうもありがとうございます
0316デフォルトの名無しさん
2006/05/13(土) 15:42:560317デフォルトの名無しさん
2006/05/13(土) 16:08:210318デフォルトの名無しさん
2006/05/13(土) 19:55:370319デフォルトの名無しさん
2006/05/13(土) 21:03:320320デフォルトの名無しさん
2006/05/13(土) 21:10:100321デフォルトの名無しさん
2006/05/13(土) 22:07:14use constant false => 1;
じゃ駄目なん?
0322デフォルトの名無しさん
2006/05/13(土) 22:07:50use constant true => 1;
ね。
0323デフォルトの名無しさん
2006/05/13(土) 23:05:15テキストの表示で、一部だけ色を付けるにはどうすればいいですか?
config.sys書き換えて、とかは無しの方向で
0324デフォルトの名無しさん
2006/05/13(土) 23:13:39Term::ANSIColor
Win32::Console::ANSI
0325デフォルトの名無しさん
2006/05/13(土) 23:49:56自前でエスケープコード送ったりする方法も使えるかも。一応。
モジュール使う方が断然いいけど。
0326デフォルトの名無しさん
2006/05/14(日) 00:20:42ansi.sysを組み込んでcommand.comから起動すると使えるようですが、
それはあまりに一般的でないので避けたい
0327デフォルトの名無しさん
2006/05/14(日) 03:49:46って自分で言ってんじゃん。
0328デフォルトの名無しさん
2006/05/14(日) 05:26:52ま、モジュール使うということでよさそうだけど。
0329デフォルトの名無しさん
2006/05/14(日) 11:22:33カラー表示してるのは普通にあるから、ESC[31m とかに頼らなければ
方法はある筈なんだけど、perlでどうやるんだろうと
Term::ANSIColor は試してみたけど、エスケープコードを代わりに
出してくれるだけだったので効かなかった
0330デフォルトの名無しさん
2006/05/14(日) 11:33:07Windows NT/2000/XP does not support ANSI escape sequences in
Win32 Console applications.
This module emulate an ANSI console for the script which uses it.
でもインストールの敷居が高い
0331デフォルトの名無しさん
2006/05/14(日) 11:54:32Cコンパイラは何を使えばいいんだろう
0332デフォルトの名無しさん
2006/05/14(日) 11:57:47ここで聞く質問じゃないな。
0333デフォルトの名無しさん
2006/05/14(日) 12:21:29下記のディレクトリ構成はどういう基準で分けられているのでしょうか?
root@localhost [/usr/lib/perl5]# ls
5.8.3/ 5.8.4/ 5.8.5/ 5.8.6/ 5.8.7/ 5.8.8/ site_perl/ vendor_perl/
0334デフォルトの名無しさん
2006/05/14(日) 13:26:52みての通り、Perlのバージョンによってわけられてる。
perl5/VERSION/がバージョン別のコアライブラリ
perl5/site_perl/VERSIONがバージョン別の追加ライブラリ
vendor_perlとsite_perlの違いはよく分からん。
0335デフォルトの名無しさん
2006/05/14(日) 13:40:43ありがとうございます。
/usr/lib/perl5/直下にコアライブラリがあって
site_perlとvender_perlは追加ライブラリって事なんですね。
いろんなバージョンが共存できるから、バージョン毎にディレクトリがあるのでしょうか?
FedoraCoreではrpmで入れるとvender_perlに入って、cpanから入れるとsite_perlに
入るらしいですけど、なんで2つに分かれてるんでしょうね。。。
0336デフォルトの名無しさん
2006/05/14(日) 13:47:28perlでできるって
0337デフォルトの名無しさん
2006/05/14(日) 15:03:54できるかできないかじゃないだろ? 正真正銘のアホだな。
それがありならCGIの質問だってOKってことか?
0338デフォルトの名無しさん
2006/05/14(日) 15:10:33ppm install Win32-Colsole-ANSI
でよくね?
0339デフォルトの名無しさん
2006/05/14(日) 15:14:38Perlがかかわってるならなんでもいいよwww
0340デフォルトの名無しさん
2006/05/14(日) 15:15:59まさかきみサーバ運用する気って訳じゃないよね?
0341デフォルトの名無しさん
2006/05/14(日) 15:20:26ご安心ください。。。
外部に公開する気は今の所全くありません。
単にperlの勉強を始めようと思って、環境を作ろうとしているだけですので。
0342デフォルトの名無しさん
2006/05/14(日) 16:28:57あ、いや、偉そうにごめん。
0343デフォルトの名無しさん
2006/05/14(日) 17:29:57Error installing package 'Win32-Colsole-ANSI': Could not locate a PPD file for package Win32-Colsole-ANSI
となります
何か下準備が要る?
0344デフォルトの名無しさん
2006/05/14(日) 17:38:440345デフォルトの名無しさん
2006/05/14(日) 17:43:04以下サンプルプログラム
use Term::ANSIColor qw(:constants);
use Win32::Console::ANSI;
$Term::ANSIColor::AUTORESET = 1;
print BOLD RED "RED\n";
print BOLD GREEN "GREEN\n";
print BOLD BLUE "BLUE\n";
0346デフォルトの名無しさん
2006/05/14(日) 18:23:43print "あなたのお名前を教えて下さい。入力(ローマ字)=>";
$yourname = <STDIN>;
print "こんにちは、$yournameさん\n";
は実行できるんですが
#!/usr/local/bin/perl
$greeting = "こんばんは";
$name = "三島";
&prt_message2($greeting,$name);
sub prt_message2{
print "$_[0]、$_[1]さん","\n";
}
はコマンドプロンプトがでてきません
違いはフォルダが違うだけなんですが
どう対処したらいいでしょうか??
0347346
2006/05/14(日) 18:28:570348346
2006/05/14(日) 18:53:27何度もすみません
よろしくおねがいします
0349デフォルトの名無しさん
NGNG0350346
2006/05/14(日) 20:22:07それをとめる方法はどうしたらいいでしょうか??
調べたらプロパティをいじくると書いてあったんですが
みても書いてありませんでした
CMDですよね??
0351デフォルトの名無しさん
2006/05/14(日) 21:13:08記述
<> =~ m(_ _)m;
効果
変なプログラムでごめんなさいと思ったところに挿入すると
一時的に停止して確認できるようになります。
副作用
CGIでつかうと何が起こるかわからないので決して使わないでください。
0352346
2006/05/14(日) 21:35:000353デフォルトの名無しさん
2006/05/14(日) 21:36:08ワラタ。あんた最高。
0354デフォルトの名無しさん
2006/05/14(日) 21:58:56削除するときのコマンドってありますか?
0355デフォルトの名無しさん
2006/05/14(日) 22:15:390356デフォルトの名無しさん
2006/05/14(日) 22:26:20それはcpanからではなくて、直接削除しちゃえばいいっていうことですか?
0357ヽ(´ー`)ノ ◆.ogCuANUcE
2006/05/14(日) 22:41:232. packlist の中身を rm で削除
0358デフォルトの名無しさん
2006/05/14(日) 22:48:24C:\perl>にしたら
hello.plをデスクトップにおいて
コマンドプロンプトでperl hello.plを実行すると実行できるんですが
あるデータをデスクトップにおいて同じ事をするとデータが見つからないって言われるんですけど…どうしたらいいでしょう?
0359デフォルトの名無しさん
2006/05/14(日) 23:10:040360違うスレからきました
2006/05/14(日) 23:17:51うまくかけませんでした
Can't open perl script "hello02.pl": No such file or directory
とでたんですがどうしたらいいでしょうか??
デスクトップに置いてあるんですが
0361デフォルトの名無しさん
2006/05/14(日) 23:24:03C:\perl\ の下にもhello.plがある
に一票!
普通は実行したいスクリプトのあるところまで移動してから実行する
(c:\perlにはパスが通っていること)
0362デフォルトの名無しさん
2006/05/14(日) 23:25:37そう名乗るのが流行ってるの?何なの?
Perlコーディング初心者質問スレ Part 48
http://pc8.2ch.net/test/read.cgi/php/1146042050/456
0363358
2006/05/14(日) 23:26:49C:\perlってPROGRAMFILESの中にありますよね?みたらないんですが…
0364358
2006/05/14(日) 23:28:59一つ疑問なんですがhello.plをダブルクリックするとコマンドプロンプトがすぐ消えるんですが消えなくできませんか?
0365デフォルトの名無しさん
2006/05/14(日) 23:35:090366デフォルトの名無しさん
2006/05/14(日) 23:35:59Windowsの基本を勉強した方がいい気がします。
C:\perl\ は C:\perl\ です。
C:\Program Files\ は C:\Program Files\ です。
ぜんぜん別物です。
基本はコマンドプロンプトを開いてそこから実行すべきです。
どうしても直接実行してそのまま開いておきたい場合は、
BATファイルに記述してプロパティで継続オプションを有効にしてください。
0367デフォルトの名無しさん
2006/05/14(日) 23:38:37調べたらoggdropXPdでもできるらしいですね
知識ない俺には無理だ…
0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
2006/05/15(月) 10:46:36( ゚д゚) …。
0370デフォルトの名無しさん
2006/05/15(月) 13:43:590371デフォルトの名無しさん
2006/05/15(月) 18:03:20<TABLE border="1" >
<TBODY>
<TR>
<TD>お名前(必須)</TD>
<TD><input type="text" size="30" name="name" id="name"></TD>
</TR>
<TR>
<TD>■メールアドレス(必須)</TD>
<TD><input type="text" size="30" name="mail"><BR>
<input type="text" size="30" name="mail2">(確認用)</TD>
</TR>
</TBODY>
</TABLE>
これの、nameを指定する時、$in{'name'}で参照に行ってくれません。
どう書けばいいの?
0372デフォルトの名無しさん
2006/05/15(月) 18:18:34ソースも何も無しでは、全く我々には分かりません。
WebProg板でどぞ
0373デフォルトの名無しさん
2006/05/15(月) 19:06:16つまり君の書いたプログラムを想像しろと、こう言いたいわけですね。
あるいは君の書いたプログラムが保存されているコンピュータを
クラックしてソースを見ろと、こうおっしゃる。
0374デフォルトの名無しさん
2006/05/15(月) 20:19:36PHPみたいに、変数に自動で設定はされませんよ。
0375デフォルトの名無しさん
2006/05/15(月) 20:40:28それくらいやってやれよ
0376デフォルトの名無しさん
2006/05/15(月) 20:47:06やったけどスパゲッティだったんで萎えた
0377デフォルトの名無しさん
2006/05/15(月) 21:29:36エスパーの俺にまかせろ!
%in = map{s/\+/ /g;s/%([\da-fA-F]{2})/chr hex$1/eg;$_}map{split/=/,$_,2}split/&/,$ENV{QUERY_STRING};
0378デフォルトの名無しさん
2006/05/15(月) 21:40:56で <FORM> が無いってどういうことだ?!
0379デフォルトの名無しさん
2006/05/15(月) 22:22:240380デフォルトの名無しさん
2006/05/16(火) 01:43:02RedHat Enterprise AS3なレンタルサーバにperl-5.8.8をインストールしようとしているのですが
make testの段階でSys::syslogのモジュールのテストが失敗します。
ちなみに/usr/local/src下でソースのコンパイルを行っているのですが
/usr/local/src/perl-5.8.8/ext/Sys/Syslog下でmake testを行うと
# Error: Can't load '/usr/local/src/perl-5.8.8/ext/Sys/Syslog/blib/arch/auto/Sys/Syslog/Syslog.so' for module Sys::Syslog: \
/usr/local/src/perl-5.8.8/ext/Sys/Syslog/blib/arch/auto/Sys/Syslog/Syslog.so: undefined symbol: PL_sv_undef at /usr/lib/perl5/5.8.0/i386-linux-thread-multi/DynaLoader.pm line 229.
# at (eval 1) line 2
# Compilation failed in require at (eval 1) line 2.
t/00-load......NOK 1# Looks like you failed 1 tests of 1.
t/00-load......dubious
Test returned status 1 (wstat 256, 0x100)
DIED. FAILED test 1
Failed 1/1 tests, 0.00% okay
とか
# doesn't match '/^This is not a valid Sys::Syslog macro/'
t/constants....NOK 1# Failed test (t/constants.t at line 20)
# '&Sys::Syslog::constant not defined at (eval 3) line 1
こんなのがたくさん出ます。
なにが原因なのでしょうか?
0381デフォルトの名無しさん
2006/05/16(火) 11:16:21するとコマンドプロンプトが開くがすぐに閉じてしまうという
質問に対して.batファイルを使った便利な解決策を伝授し
てもらいました
perl %1
pause
このようなバッチファイルを.plファイルと関連付けることで
ダブルクリックで.plファイルを起動してもコマンドプロンプト
は閉じなくなるということでした
ところがこのバッチファイルの名前を
perl.bat
とすると変なことになります。
例えば
print 1;
というf:\perl\a.plファイルをperl.batに関連付けて実行すると
延々とperl "f:\perl\a.pl"
が表示され続け、また1というprintもされません
これはどういうことが起こっているのでしょうか?
0382デフォルトの名無しさん
2006/05/16(火) 11:24:17にしてるからperl.batがperl.batを延々呼び続けてるんじゃないの。
perl.batをやめるか、バッチファイル内のperl.exeをフルパスで書けばいいんでない。
C:\perl\bin\perl %1
pause
0383デフォルトの名無しさん
2006/05/16(火) 11:26:30RedHat または Linux 関係のスレで聞くべし。
0384デフォルトの名無しさん
NGNGWindows板でやれ
0386デフォルトの名無しさん
2006/05/16(火) 11:49:52use Benchmark;
$count = 100000000000;
timethese( $count, { test1 => 'test1', test2 => 'test2' }
sub test1 { ...}
sub test2 { ...}
これをやろうとすると$countが桁数多すぎるみたいで
Range iterator outside integer range at (eval 4) line1.
とエラーになってしまいます。
確か通常のperlが扱うintegerよりもずっと大きい桁数を
扱えるようにする標準モジュールがあったような気がする
のですが…
どのような解決策があるでしょうか?
0387デフォルトの名無しさん
NGNG0388デフォルトの名無しさん
2006/05/16(火) 12:10:35use bignum;
いれたけど同じエラーになります
0389デフォルトの名無しさん
2006/05/16(火) 12:20:25use bignum;
を入れると違うエラーになりました
runloop unable to compile '': Constant(undef): $^H{integer} is not defined at (e
val 10) line 1, at end of line
Constant(undef): $^H{float} is not defined at (eval 10) line 1, at end of line
code: sub { for (1 .. 10000000000000) { local $_; package main; ;} }
at F:\perl\test.pl line 7
こりゃお手上げじゃー
0390デフォルトの名無しさん
2006/05/16(火) 12:38:05bignumのマニュアルに以下のようにあるのでだめだね。
Please note the following does not work as expected (prints nothing),
since overloading of '..' is not yet possible in Perl (as of v5.8.0):
perl -Mbignum -le 'for (1..2) { print ref($_); }'
そこだけなら範囲演算子使わないように書き換えればなんとかなるんじゃね?
for($_ = 1; $_ <= 100000000000; $_++) { ... }
みたいに。隠れていた別の問題がでるだけかもしれんが。
0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
2006/05/16(火) 13:23:58use constantの「定数」は、
実は定数を返すsubなので、
sigil ($@%&*)が定数から消えてしまう
]
use constant A => 'xx';
が
sub A { 'xx' }
と同義だというのはわかったのですが、
sigil ($@%&*)が定数から消えてしまう
というのが理解できません
コードで具体例を教えてもらえませんか?
0393デフォルトの名無しさん
2006/05/16(火) 13:41:03単に頭に sigilが付けられないから
スカラなのか配列なのか、何なのかよく分からなくなるという意味では
0394デフォルトの名無しさん
2006/05/16(火) 14:27:04あっそういう意味でしたか
どうもさんくすべりまっちゅ
0395389
2006/05/16(火) 14:38:01Benchmark.pmの635行あたりにあった
$subcode = "sub { for (1 .. $n) { local \$_; package $pack; &\$c; } }";
を
$subcode = "sub { for(my \$int = 1; \$int <= \$n;\$int++) { local \$_; package $pack; $c;} }";
にしたらとりあえず動いてるっぽい
でも
timetheseに10000000000000も指定しちゃうと
ベンチ終わんない..
0396デフォルトの名無しさん
2006/05/16(火) 17:35:17sub test1 { ...}
を
sub test1 { for ( 0...9999 ) { ... } }
という風にするとかは。
0397デフォルトの名無しさん
2006/05/16(火) 18:04:11そもそも何で10兆回も反復させる必要が?
一秒当たりの実行回数を測れれば充分じゃない?
http://search.cpan.org/~nwclark/perl-5.8.8/lib/Benchmark.pm
> The COUNT can be zero or negative: this means the minimum
> number of CPU seconds to run. A zero signifies the default of
> 3 seconds. For example to run at least for 10 seconds:
>
> timethis(-10, $code)
0398デフォルトの名無しさん
2006/05/16(火) 18:10:38関数呼び出しのオーバヘッドが気になるかな?
0399デフォルトの名無しさん
2006/05/16(火) 19:00:15ソレダ
0400デフォルトの名無しさん
2006/05/16(火) 19:15:470401デフォルトの名無しさん
2006/05/16(火) 19:24:43for (my $i; $i<$#LIST; $i++) {
$LIST[$i] = ...
こう書ける方が自然だと思うんだけど
0402デフォルトの名無しさん
2006/05/16(火) 19:32:34$LIST[$i] = ...
}
こっちを想定したんじゃないかな
0403デフォルトの名無しさん
2006/05/16(火) 19:35:14配列はスカラコンテキストで要素数を返す。
for (my $i; $i<@LIST; $i++) {
$LIST[$i] = ...
0404デフォルトの名無しさん
2006/05/16(火) 20:43:07print $LIST[$#LIST]; # Z
$#LIST = 5;
print $LIST[$#LIST]; # F
push @list, '-';
print $#LIST; # 6
言語仕様のミスだなんてとんでもない。
0405デフォルトの名無しさん
2006/05/16(火) 21:22:50>$#LIST = 5;
これだけど、0を代入しても先頭の要素が残るのってあんまり直感的じゃないような・・・
0406389
2006/05/16(火) 21:31:25なるほど!!!全然思いつかなかった
>>397
全然知らなかった。次からはそれ使います
>>398
実用Perlって本に変数をサブルーチンに渡すときに
普通にsub1(@list)って渡すと配列のコピーのオーバヘッドが
出ちゃうからそれを回避する策としてリファレンス渡しと
型グロブ渡しの二つがあって、型グロブ渡しの方が1.5倍速い
って書いてあったのでBenchmark使って
timethese(1000,ほにゃらら)って実験してみたら
warning: too few iterations for a reliable count
てなってループ少なすぎて速度差出ませんってなったから
もっと増やしてやろうとしたのでした
0407404
2006/05/16(火) 22:08:30それは仕方ない
配列のクリアは
@list = ();
undef @list;
好きな方を選べ
どうせ↓で配列クリアできたとしても↑と比べて感覚的に理解しづらいだろ。
$#LIST = 0;
$#は最後の添え字、それで十分
0408デフォルトの名無しさん
2006/05/16(火) 22:31:16sb(*list);
print "@list";
sub sb{
*copy = shift;
foreach (@copy) { $_++}
}
これだと出力は
11 21 31
になります
shiftを$_[0]と変えても
11 21 31
のままです
ところが
shiftを@_に変えると
10 20 30
となってしまいます
なんで---
0409デフォルトの名無しさん
2006/05/16(火) 23:23:06(*copy) = @_;
0411デフォルトの名無しさん
2006/05/17(水) 07:28:40my @a = @_;
print "@$a";
}
my @a = (a, b, c);
a(\@a);
サブルーチンに配列のリファレンスを渡して
サブルーチン内でそれをデリファレンスして表示したいのですが
これの結果に何も表示されません
a b cと表示されることを期待しているのですが
どこがまずいのでしょうか?
0412デフォルトの名無しさん
2006/05/17(水) 07:36:08my $a = shift;
print "@$a";
}
リファレンスはスカラだから、配列じゃないよ
0413デフォルトの名無しさん
2006/05/17(水) 07:38:24use strict; してる?
0414411
2006/05/17(水) 07:45:55ありがとうでした
0415デフォルトの名無しさん
2006/05/17(水) 07:48:510416408
2006/05/17(水) 07:53:23なんだけどいくら考えてもわかりません
例えば*copyが型グロブじゃなくてスカラーだったら
@_ = qw(a);
$copy = @_;
としちゃうと$copyにはaじゃなくて1が入ってしまうから
($copy) = @_;
としなきゃいけないってのはわかるんだけど
@_ = *list;
*copy = @_;
がうまくいかないのに
(*copy) = @_;
がうまくいくのはなんでなんだろう
たすけてください
0417デフォルトの名無しさん
2006/05/17(水) 08:48:00デバッガでシングルステップ実行してみるといいよ。
0418デフォルトの名無しさん
2006/05/17(水) 09:01:45*copyがスカラーだから。$copyと理由は一緒。
0419デフォルトの名無しさん
2006/05/17(水) 09:26:210420デフォルトの名無しさん
2006/05/17(水) 09:48:11避ける。
こんな変態行為覚えちゃったら、Perlから離れられなくなっちゃうと
思ってる。
0421デフォルトの名無しさん
NGNG0422デフォルトの名無しさん
2006/05/17(水) 12:54:580423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
2006/05/17(水) 13:07:12いいじゃないか型グロブ
「もっとエレガントな方法があるじゃないか」と言いたいだろうけど、
そのエレガントな方法を生み出すためには型グロブが必要なんだぜ?
0425デフォルトの名無しさん
2006/05/17(水) 13:12:290426デフォルトの名無しさん
2006/05/17(水) 13:14:10だってPerlだし。
0427デフォルトの名無しさん
2006/05/17(水) 16:46:380428デフォルトの名無しさん
2006/05/17(水) 17:51:45多分インストールしなくても最初から入ってると思うんですけど、
HTTPアクセス関連の動作がおかしい(※)ようなので
関連モジュールをもう一度インストールしようとやってみましたがうまくいきません。
perl Makefile.PL
make
make test
までは普通に進み、「All tests successful.」と出るのですが
make install
とすると、lwp-requestのところで
Can't find string terminator "@" anywhere before EOF at -e line 1.
というエラーが出て終わってしまいます。
ppmもcpanシェルも、それぞれ別のエラーで失敗するので諦めました。
環境は以下の通りです。どうしようもなくて困っています。どうか助けて下さい。
OS…WinMe
Perl…ActivePer5.8.8.817
LWP…libwww-perl-5.805
Cコンパイラ…Borland C++ Compiler
(※動作がおかしいというのは以下のリンク先の質問のような症状です。
基本となるURLみたいなものがブラウザにちゃんと渡されていないようです。)
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2143752
よろしくお願いします。
0429デフォルトの名無しさん
2006/05/17(水) 17:55:54ったくクソどもが!
0430デフォルトの名無しさん
2006/05/17(水) 18:04:11面白そうだから俺も荒らしに行こ。
0431デフォルトの名無しさん
2006/05/17(水) 18:42:01見てきたが、あれでPerlスレの住人を疑うって凄い被害妄想だな。
Perl6ならともかくPerl5はRubyとほぼ棲み分けされてるだろう。
そんなんだから荒らしを退治できないんじゃない?
>>430
py厨乙
0432デフォルトの名無しさん
2006/05/17(水) 19:12:250433デフォルトの名無しさん
2006/05/17(水) 19:39:47>>308-
0434デフォルトの名無しさん
2006/05/17(水) 19:57:34open my $fh,">foo.txt";
*STDOUT=$fh;
print "aaa";
これでいけました。どうもありがとう。
0435デフォルトの名無しさん
2006/05/17(水) 20:25:18それをやるなら、普通は
open my $fh,">foo.txt";
select $fh;
print "aaa";
だが。
0436デフォルトの名無しさん
2006/05/17(水) 20:53:04ほうほう、selectってそういう関数だったのか。
勉強になりました
0437デフォルトの名無しさん
2006/05/17(水) 22:19:06sub foo(){
my $var = sub(){
$var->();
}
}
みたいな感じですが。
0438303
2006/05/17(水) 22:56:17根本的な知識に乏しく簡単なサンプルプログラムも作れませんでした。
途中で挫折したExcelの一番左上のセルの情報を取得するプログラムです。
use Win32::API;
$sendData = "R1C1"; # 送るデータ
$ini = new Win32::API("User32", "DdeInitialize", ["N", "N", "N", "N"], "I") || die $!; # イニシャライズ
$ret1 = $ini->Call(\$insID, 0, 0, 0) || die $!;
$con = new Win32::API("User32", "DdeConnect", ["N", "N", "N", "N"], "N") || die $!; # 接続
$ret2 = $con->Call($insID, 'excel', 'sheet1', undef) || die $!;
$snd = new Win32::API("User32", "DdeClientTransaction", ["N", "N", "N", "N", "N", "N", "N", "N"], "N") || die $!; # データ送信
$ret3 = $snd->Call($sendData, length $sendData, $con, undef, 0, 'XTYP_REQUEST', 10000, undef) || die $!;
print $ret3;
どなたか正常に動作するプログラムをご教授いただけませんでしょうかm(_ _)m
0439デフォルトの名無しさん
2006/05/17(水) 22:59:05my $var = sub(){
$var->();
}
}
このとおり走らせてみてから聞けよ
0440デフォルトの名無しさん
2006/05/17(水) 23:21:460441デフォルトの名無しさん
2006/05/17(水) 23:29:32つまりこうだ
my $var;
$var = sub() {… $var->(); …};
0442437
2006/05/18(木) 00:04:07ありがとうございました!
やりたかったこと(解決バージョン)
$aaa = '1234aaaa5678bbb9876ccc';
@list = &func($aaa);
print join(',', @list), "\n";
sub func(){
my $str = shift;
my $list;
$list = sub {
my $var = shift;
$var =~ /(\d+)(.*)/;
my $first = $1;
my $rest = $2;
print $rest, "\n";
if($first =~ /\d+/){
return ($first, $list->($rest));
}else{
return ();
}
};
return $list->($str);
}
0443デフォルトの名無しさん
2006/05/18(木) 00:18:37解決乙
>$var =~ /(¥d+)(.*)/;
>
>my $first = $1;
>my $rest = $2;
どうでも良いけど↑の部分
my($first, $rest) = ($var =~ /(¥d+)(.*)/);
こんな書き方が俺は好き。1行で書けるから
0444437
2006/05/18(木) 00:26:18おおう。勉強になりますた。
0445428
2006/05/18(木) 00:26:29スレ違いなら他をあたります。
0446デフォルトの名無しさん
2006/05/18(木) 00:28:10>libwww-perl(LWP)モジュールのインストールについて質問です。
プロキシーやウィルス・ソフトが動いていると、
接続できないことがあるが...
0447428
2006/05/18(木) 00:40:12ありがとうございます。それは知りませんでした。
早速Norton AntiVirusとZoneAlarm(ファイアウォール)を止めてやってみましたが
やっぱり「http://127.0.0.1/〜」となってしまいます…。
通常の場合、
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2143752
↑ここの回答者の方がおっしゃっているみたいな処理をしなくても
相対指定の画像やスタイルシートとかって、ブラウザが自動的に読み込んでくれますか?
0448デフォルトの名無しさん
2006/05/18(木) 02:48:22わざわざそんなめんどくさいことしなくても。
$aaa = '1234aaaa5678bbb9876ccc';
print join ',', $aaa =~ /(\d+)(?{ print $', "\n" })/g;
0449デフォルトの名無しさん
2006/05/18(木) 03:02:42> 早速Norton AntiVirusとZoneAlarm(ファイアウォール)を止めてやってみましたが
> やっぱり「http://127.0.0.1/〜」となってしまいます…。
意味不明
> 通常の場合、
「通常の場合」の意味が不明
> http://oshiete1.goo.ne.jp/kotaeru.php3?q=2143752
> ↑ここの回答者の方がおっしゃっているみたいな処理をしなくても
> 相対指定の画像やスタイルシートとかって、ブラウザが自動的に読み込んでくれますか?
ブラウザや、その設定による。
0450デフォルトの名無しさん
2006/05/18(木) 06:38:380451デフォルトの名無しさん
2006/05/18(木) 07:27:18以下のコードが動かないなら、ActivePerl を再インストールすべし。
アンインストール後、ActivePerl のフォルダも全部消してから。
use LWP::Simple;
print get( 'http://www.yahoo.co.jp/' );
また、socket での通信もできないとのことなので、ネットワークあたりの問題の
可能性も高い。
Windows のネットワークのプロパティを見てみるべし。
0452デフォルトの名無しさん
2006/05/18(木) 08:31:210453デフォルトの名無しさん
2006/05/18(木) 08:53:00use LWP::Simple;
print get( '/' );
とかやって「うまく動かん!」と言っているような予感。
0454デフォルトの名無しさん
2006/05/18(木) 09:49:14c:\windows\*\ABC*.txt
wildcardを利用してファイル名(フルパス)を
配列か何かで取得するのに
何かよい関数とか知りませんか?
0455デフォルトの名無しさん
2006/05/18(木) 09:52:570456デフォルトの名無しさん
2006/05/18(木) 10:39:53ありがとうございます。
できました。
@files = glob('c:\windows\*\*.txt');
0457デフォルトの名無しさん
2006/05/18(木) 14:23:45OLE を使いなよ。ここにサンプルあるから。
http://www.att.or.jp/perl/faq/perlwin32faq/perlwin32faq12j.html#extract_cells
DDE のモジュールがかなり前から更新されてないのは、DDEは古くて
OLEよりも機能が劣っており、みんなOLEを使っているからだよ。
0458428
2006/05/18(木) 20:22:27おっしゃるようにActivePerlを再インストールしました。
でも同じです…。
>>451のコードは動くのですが、ブラウザ上でちゃんと表示されないんです。
中心の「ショッピング」「共同購入」とかのリンクにカーソルを持っていくと、本当は
http://www.yahoo.co.jp/r/sh
http://www.yahoo.co.jp/r/gb
とかになっているはずのところが
http://127.0.0.1/r/sh
http://127.0.0.1/r/gb
となっていたりします。
だから、本来ブラウザが自動的に取得しにいくはずのものが取得できていません。
例えば右上の「個人ツール」の上の広告が表示されてなかったりします。
もっとスタイルシートとかをバリバリに使っているサイトだと、ページ全体がぐちゃぐちゃになります。
相対指定の基準とするURLをブラウザにちゃんと渡せていないせいかと思うんですが…。
これって他の方も同じなんですか?
0459デフォルトの名無しさん
2006/05/18(木) 20:46:23> 皆さんありがとうございます。
> おっしゃるようにActivePerlを再インストールしました。
> でも同じです…。
>
> >>451のコードは動くのですが、ブラウザ上でちゃんと表示されないんです。
意味不明。
> 相対指定の基準とするURLをブラウザにちゃんと渡せていないせいかと思うんですが…。
> これって他の方も同じなんですか?
意味不明。
0460デフォルトの名無しさん
2006/05/18(木) 21:15:30死ね。キチガイに構う同類。
0461428
2006/05/18(木) 21:17:31お時間のある方にお願いしますが、次のコードで@niftyのトップページを取得してみたら
どうなるか教えていただけませんでしょうか?
print "Content-Type: text/html\n";
print "\n";
use LWP::Simple;
print get( 'http://www.nifty.com/' );
私のところだと、ブラウザ上での表示がぐちゃぐちゃになります。
(トップページのHTMLファイル自体は正常に取得できているのですが、
相対指定でリンクされている画像やスタイルシートやJavaScriptのファイルが取得できないため、
表示がぐちゃぐちゃになってしまうんだと思います)
0462デフォルトの名無しさん
2006/05/18(木) 21:17:39このインターネットサイトを開くことができませんでした
というエラーが出てきたできません。どうすればいいんでしょう。
0463デフォルトの名無しさん
2006/05/18(木) 21:18:19消えろゴミクズ
0464デフォルトの名無しさん
2006/05/18(木) 21:19:22それはそういうものだよ。
HTML を勉強すると吉。
>>460
まあそう荒れるなや。
0465デフォルトの名無しさん
2006/05/18(木) 21:21:24m9プギャー
0466デフォルトの名無しさん
NGNG0467デフォルトの名無しさん
2006/05/18(木) 21:24:51セキュリティソフト切る。
それでも無理なら、他のPCでdownloadすべし。
0468デフォルトの名無しさん
2006/05/18(木) 21:26:32<!-- --!>の間に隠すのや、<div style="desplay:none">で消すのって、見ようと思えば見えるんですよね??
パールにお詳しい皆さんに、力を貸していただきたく思います。
0469デフォルトの名無しさん
2006/05/18(木) 21:28:13日本語でおk
0470428
2006/05/18(木) 21:31:01「そういうもの」とは…?
皆さんは、正常に表示させたい場合は>>466のタグを挿入して返してるんですか?
それだと元のページをそっくりそのまま取得できたことにならないと思うんですけど…。
HTTPヘッダにそういう情報があるのかと思ったんですが違うんでしょうか。
0471デフォルトの名無しさん
2006/05/18(木) 21:38:04ノートンきりました。そしたらなんだか、パソコンがかってに再起動するように鳴ったんですが(泣)。
他のパソコンはありません。携帯なら歩けどできない。
0472デフォルトの名無しさん
2006/05/18(木) 21:38:550473デフォルトの名無しさん
2006/05/18(木) 21:43:42HTTPヘッダにそんな情報はねえし
ヘッダ保存してないだろ
0475428 ◆AOxf8.Tmck
2006/05/18(木) 21:47:12一時的にトリップつけさせていただきます。
>>473
じゃあ相対指定のリンクを含むページを取得する方法って
どうやるのか教えてください。
0477デフォルトの名無しさん
NGNG0478428 ◆4p1DirMNWQ
2006/05/18(木) 21:58:57それともやはり質問がスレ違いなのですか? それならば他へいきますが…。
0480デフォルトの名無しさん
2006/05/18(木) 22:00:01>(トップページのHTMLファイル自体は正常に取得できているのですが、
>相対指定でリンクされている画像やスタイルシートやJavaScriptのファイルが取得できないため、
>表示がぐちゃぐちゃになってしまうんだと思います)
そう思うんなら全部ダウンロードすればいいじゃん。
そうすりゃ表示されるよ。
0481デフォルトの名無しさん
2006/05/18(木) 22:01:35はてなで聞いたらおしえてあげるよー
0482デフォルトの名無しさん
2006/05/18(木) 22:01:41質問はパソコンが帰ってきてからにします。どうもありがとうございました。
0483428 ◆AOxf8.Tmck
2006/05/18(木) 22:02:45127.0.0.1に指定しているフォルダに、ディレクトリ構造ごとそっくりそのまま
持ってくるということですか?
私がやりたいのはオフラインで閲覧できるようにページを丸ごと取得することではなく、
普通にどこかのページをブラウザに返すということです。
0484デフォルトの名無しさん
2006/05/18(木) 22:04:30すれ違いだ。消えろ。行き場所は自分で探せ。
0485デフォルトの名無しさん
2006/05/18(木) 22:13:05前の自称Ruby厨が荒らしてるのか。
0486デフォルトの名無しさん
2006/05/18(木) 22:14:31考えるな。調査せよ。行き来するデータをインスペクトせよ。
処理の各段階でのデータをインスペクトせよ。
0487428 ◆AOxf8.Tmck
2006/05/18(木) 22:17:09それは偽物です。
428 ◆AOxf8.Tmck←これが私(>>428)です。
アドバイス頂いた方ありがとうございました。
これ以上ここでは聞けないと判断しましたのでもう移動させていただきました。
0488デフォルトの名無しさん
2006/05/18(木) 22:21:45> 私がやりたいのはオフラインで閲覧できるようにページを丸ごと取得することではなく、
> 普通にどこかのページをブラウザに返すということです。
やっと一番最初に書いておかないと質問の体をなさない事項を書いたよ(嘲笑
依然として意味不明だけどな。
0489デフォルトの名無しさん
2006/05/18(木) 22:25:290490デフォルトの名無しさん
2006/05/18(木) 22:26:58自演だろ。
0491デフォルトの名無しさん
2006/05/18(木) 22:28:360492デフォルトの名無しさん
2006/05/18(木) 22:29:010493デフォルトの名無しさん
2006/05/18(木) 22:29:43質問に答えられないからってそういうこと言わないでくださいよ。
0494デフォルトの名無しさん
2006/05/18(木) 22:30:46自演乙。
0495デフォルトの名無しさん
2006/05/18(木) 22:31:00> Cryptをもっと安全にするにはどうすればいい?
意味不明
0496491
2006/05/18(木) 22:36:52質問に答えられない厨房君は帰ってね(^^;
貴方のほうが意味不明です。答えられないなら答えるな。
0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
2006/05/18(木) 22:45:15いるな。ここは何でも質問箱だってのにぐだぐだ言う奴が。
0499デフォルトの名無しさん
2006/05/18(木) 22:55:27普通にやるなら既に解決しているけれど、面白そうだから先に変数を宣言しないようにやってみた。
sub Y {
my $f = shift;
my $m = sub {
my $proc = shift;
$f->(sub { $proc->($proc)->(@_) });
};
$m->($m);
}
my $var = Y sub { my $f = shift; sub { $f->() } };
$fact->();
Y Combinatorってやつ。
0500デフォルトの名無しさん
2006/05/18(木) 23:13:12Windows 2000 ActivePerl 5.6を使っています。
ファイルが存在しているかどうかを確かめたくて、
ファイルテスト演算子を使おうとしたのですが、うまくいきません。
ttp://www.site-cooler.com/kwl/perl/7.htm#7-5
こちらのサイトに、
ファイルテスト演算子はWindowsではうまくいかないこともあると書かれていたのですが、
Windowsでは使えないものなのでしょうか。
この方法以外にテストできるやり方があったら教えてください。
0501デフォルトの名無しさん
2006/05/18(木) 23:17:40「うまくいかない」とは?
0502デフォルトの名無しさん
2006/05/18(木) 23:18:25いい加減この手の質問になってない質問に答えるのやめようよ。
さっきのみたいのがまた増えるよ?
0503デフォルトの名無しさん
2006/05/18(木) 23:22:06Activeperl 5.8.7
GUI::Loftを利用して簡単な画面を作成してみたのですが、
ppコマンドで--guiを指定したときに、
タイトルにcacheと付くdos画面が開いてしまいます。
なにかこれについて知りませんか?
0504デフォルトの名無しさん
2006/05/18(木) 23:22:59荒しの一種か? コレクションしてあった欠陥質問の大放出か?
0505500
2006/05/18(木) 23:24:12$file = <STDIN> ;
if (-e $file){
print "存在します" ;
}else{
print "存在しません" ;
}
で、存在するファイルをフルパスで入力しても
存在しません
ってでてくる。
0507デフォルトの名無しさん
2006/05/18(木) 23:26:161.変な質問が出る
2.変な質問に答える奴が出る
3.変な質問をしてもいいんだと誤解した奴等が寄ってくる
4.変な質問に答える奴はまだいる
5.3.に戻る
0508デフォルトの名無しさん
2006/05/18(木) 23:27:05キチガイ乙。
0510デフォルトの名無しさん
2006/05/18(木) 23:30:04何が楽しくて荒らすの? やめようよもう…
0511500
2006/05/18(木) 23:37:00なんてこった。できました。
どうもありがとうございました。
次回からは質問方法を気をつけます。
ありがとうございました。
0512デフォルトの名無しさん
2006/05/18(木) 23:48:33まあ、木に病むな。
わからんことがあったらどんどん質問しなされ。
暇人の俺らが答えるから。
0513デフォルトの名無しさん
2006/05/18(木) 23:50:11荒らしさん勝手に自分の行為正当化しないでください。
0514デフォルトの名無しさん
2006/05/18(木) 23:57:080515デフォルトの名無しさん
2006/05/19(金) 00:48:03gにそんな使い方があったとは・・・
0516デフォルトの名無しさん
2006/05/19(金) 00:51:27ベッドの下に入れる。
それでも無理なら貸し金庫を借りる。
>>471
hint: ネットカフェ
>>503
PAR と ActivePerl を最新版にしてみたらどうかな。
PAR は、配布されてるパッケージによっては動かないことがあるので(相性問題がある)
ppm の配布サイトを変えて試してみるといいかも。
0517503
2006/05/19(金) 01:05:48ActivePerlは、最新にしたら駄目だったのでバージョンを下げました。
以前、PAR-0.91は試しました。nmakeでコンパイルしています。
ん、あれは、コピーだけしていたのかな。
Windows2000とXPで試して同じだったので、同じ現象にあっている人いないかな〜。
環境上の問題あるのかな。
ppmの配布サイト。探してみます。中身違うのかな。
0518デフォルトの名無しさん
2006/05/19(金) 02:19:36が定義されているとします。複数のperlのプログラムを実行するプロセスがあり、
その各々がそのサブルーチンでファイルをコピーした場合、2つのファイルをたまたま
同名ファイルにコピーしようとした場合、どうなるでしょうか?またこの競合を防ぐ
にはどうしたら良いでしょうか? (例えば、コピーする時に、コピー先ファイル名を
ロックしておく等の方法があり得るのでしょうか?)
なお上記の状態で、同名ファイルへのコピーが重なり、前のファイルを後のファイルで
上書きされてしまうのは許可するとします。
0519デフォルトの名無しさん
2006/05/19(金) 03:33:43たいていOS側でrename操作は排他的に処理してくれる
use File::Temp qw(tempfile);
my ($fh, $tempname) = tempfile(DIR=>'.');
$fh->print("hello world\n");
$fh->close();
rename $tempname, "real-file-name.txt"; #ここで競合が防がれる
0520デフォルトの名無しさん
2006/05/19(金) 05:00:53どうなるもなにも書き込めなかった方がエラーになるだけでしょう
>>519
リネームできなかったら残っちゃうじゃん
0521デフォルトの名無しさん
2006/05/19(金) 08:23:36わ、馬鹿だ!
0522デフォルトの名無しさん
2006/05/19(金) 11:32:53$a{abc} = 'abc';
$a{def} = 'def';
$a{ghi} = 'ghi';
:
:
:
ってやったあとで、$a{*}に所属する連想配列の内容を一気に
クリアする方法がありますか?
よろしくお願い致します。
0523デフォルトの名無しさん
2006/05/19(金) 11:37:37%a = ();
0524デフォルトの名無しさん
2006/05/19(金) 11:37:590525デフォルトの名無しさん
2006/05/19(金) 11:42:42ども
0526デフォルトの名無しさん
2006/05/19(金) 12:05:41わ、馬鹿だ!
0527デフォルトの名無しさん
2006/05/19(金) 15:22:34Y Combinator スゴス
1時間ネットをさまよって理解できた。かもしれん
0528527
2006/05/19(金) 16:28:07sub Y(&) { # >>499にプロトタイプを追加
my $f = shift;
my $m = sub { my $p = shift; $f->(sub { $p->($p)->(@_) }); };
$m->($m);
}
my $factorial = Y { # Yの後ろのsubが省略できる
my $label = shift;
sub { my $n = shift; ($n > 1) ? $n * $label->($n-1) : 1; }
};
print $factorial->(10);
0529デフォルトの名無しさん
2006/05/19(金) 16:32:36どっかに落ちてたりしますかね。
いや、作ろうかと思ったんですが、もしどこかに有名なのがあるとしたら、
車輪を再発明する必要もないかな、と思って。。。
0530デフォルトの名無しさん
2006/05/19(金) 17:30:350531デフォルトの名無しさん
2006/05/19(金) 17:34:190532デフォルトの名無しさん
2006/05/19(金) 18:39:12サブスクライバを取得したいのですがどうすればいいのか良く分かりません。
後docomoの端末製造番号も取得したいです。
0533532
2006/05/19(金) 18:41:27失礼しました
0534デフォルトの名無しさん
2006/05/19(金) 19:21:47確かに。
print Y { ... }->(10);
こういう風に使ったときに優先順位の関係で嵌らないかと思ったけど、
実際やってみると望んだとおりに解釈してくれるのね。
流石Do What I Mean戦略といったところか
0535デフォルトの名無しさん
2006/05/19(金) 20:33:43my $f = shift;
sub {$f->(rec($f), @_)}
}
(rec {
my ($f, $n) = @_;
($n <= 2)? 1: $f->($n-1) + $f->($n-2);
})->(20);
なんかやけにトリッキーに書いてるけど、単純にこれじゃダメ?
0536デフォルトの名無しさん
2006/05/19(金) 21:07:010537デフォルトの名無しさん
2006/05/19(金) 21:12:39もともとお遊びだったしY Combinatorそのまま移植してみたけど、
確かに先に変数を宣言しないように、というだけならrecの中での直接的な再帰を許してそれで良いわな…
0538535
2006/05/19(金) 21:13:50なんかの競技?なのか。
0539デフォルトの名無しさん
2006/05/19(金) 22:26:18こう言うのってどういうときに便利なんですか?
前にそんなのが必要だった記憶があるんだけど思い出せない。
確かその時は引数にしてごまかした記憶が。こんな感じで。
my $f = sub { my ($f, $n) = @_; $n < 1 ? 1 : $n * $f->($f, $n - 1) };
print $f->($f, 10);
0540デフォルトの名無しさん
2006/05/19(金) 22:29:37my $f = sub { my ($n) = @_; $n < 1 ? 1 : $n * $f->($n - 1) };
print $f->(10);
こいで十分。
0541デフォルトの名無しさん
2006/05/19(金) 22:43:43myのスコープはその右辺に適用されないからそれじゃ動かん。
>>441
>>539
便利とかそういう実用性の話をするなら>>441で十分だね。
Y Combinator等を使った方法は単に(関数的なのが好きな人には)面白いというだけだから。
0542デフォルトの名無しさん
2006/05/19(金) 23:01:010543デフォルトの名無しさん
2006/05/20(土) 01:00:02嘘つくな!
名前まで付いてるくらいなんだからそんなはずはない。
ほんとはすげーかっこいい使い方知ってんだろ。
教えろこのやろう。。。
>>542
もう一声。
0544デフォルトの名無しさん
2006/05/20(土) 01:11:02創り上げるものです
0545デフォルトの名無しさん
2006/05/20(土) 02:48:350546デフォルトの名無しさん
2006/05/20(土) 04:35:340547デフォルトの名無しさん
2006/05/20(土) 10:35:50やってみたが、うまくない。「中」とか「薫」とかが出てこない。
use encoding 'euc-jp';
use open ':euc-jp';
use open ':std';
print "Test 1:\n";
open(IN, "euc.txt") or die;
while(<>) {
while(/[亜-腕]/g){ # [弌-龠] 堯槇遙瑤凜熙
print $&, "\n";
}
}
close IN;
いったい、文字クラスの正規表現[ ]はマルチバイト文字をサポート
してないのか。うまく行った人、教えてください。
0548デフォルトの名無しさん
2006/05/20(土) 11:36:22[亜-腕]には中も薫も含まれないんじゃないか
% cat foo.pl
use encoding 'euc-jp';
foreach (qw(亜 腕 中 薫)) {
printf "%s-%x\n", $_, ord($_);
}
% perl foo.pl
亜-4e9c
腕-8155
中-4e2d
薫-85ab
0549デフォルトの名無しさん
2006/05/20(土) 14:08:44あー、そうだったんですね。内部の処理はutfでやってると。
jperl相当のことができるって喜んでたら、あの不可解な
出来事で、悩んでいたんですが、これで目から鱗です。
ありがとうございました。
0550デフォルトの名無しさん
2006/05/20(土) 16:09:57コード書いてるのはLispの人?
0551デフォルトの名無しさん
2006/05/20(土) 16:11:00荒らし乙。今度はその手で来ましたか。
0552デフォルトの名無しさん
2006/05/20(土) 16:15:26なんで荒らしなんだよw
0553デフォルトの名無しさん
2006/05/20(土) 16:28:00無内容の上さりげなく多言語使いを煽ってるのはたしかに荒らしだろうな。
数日前なんか酷いことあって過敏なんだよ。
少し考えて書き込んでくれ。
0554デフォルトの名無しさん
2006/05/20(土) 16:32:330555デフォルトの名無しさん
2006/05/20(土) 18:36:00何の話だか分からんのだが、ここのこと?
http://221.112.61.214/~kzk/column/haskell_parsec.html
0556デフォルトの名無しさん
2006/05/20(土) 19:06:22漢字やひらがな等を指定したいときは文字クラスを指定するのが良いですよ。
# \p{Han}/ とか /\p{Hiragana}/ とかだったかな?
perldoc perlunicode に色々かかれてたはず。
0557デフォルトの名無しさん
2006/05/20(土) 21:31:26ありがとうございます。かなり量があって全部読むのは大変ですが
ぼちぼち見てみます。
0558デフォルトの名無しさん
2006/05/21(日) 17:21:57桁数をしていして、数値から文字列に変換したいのですがどの様な方法がよいのでしょうか?
$a=3を$b="003"の様にaをbに代入。
プリントするときは、printf "%03s",$a; でできるのですが、
桁数を指定して文字列として代入する方法がわかりません。
ご教授お願いします。
0559558
2006/05/21(日) 17:36:13sprintf でできました。
0560デフォルトの名無しさん
2006/05/21(日) 19:54:08どうなんですか
0561デフォルトの名無しさん
2006/05/21(日) 20:30:13簡単の基準やどのcryptか言わない(言えない)なら回答は「NO」で問題ないだろう
0562デフォルトの名無しさん
2006/05/21(日) 20:36:27http://www.ipa.go.jp/security/pki/021.html#_Toc3020742
まあ今はMD5ハッシュなどを使ってると思うので、総当り方式での解析は無理ですよね。
0563デフォルトの名無しさん
2006/05/21(日) 20:37:59どうもです。
0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
2006/05/21(日) 21:03:400566デフォルトの名無しさん
2006/05/21(日) 21:05:16安全性を追求するなら、今専門家が勧めているのはSHA256
# 解ってるとは思うけれど、暗号化方式がどんなに安全でも、元のパスワードの質が悪ければ辞書攻撃ですぐだから注意な
0567デフォルトの名無しさん
2006/05/21(日) 21:41:05OTPは解読不可能だぞ
0568デフォルトの名無しさん
2006/05/21(日) 21:49:26OTPは盗聴されてもわからないだけで、総当たりすれば解けるのでは?
0569改善派
2006/05/21(日) 22:14:310570デフォルトの名無しさん
2006/05/21(日) 22:39:08「総当たりに時間がかかる暗号」というのはわかるけど、「総当たりしても解けない暗号」があるとは知りませんでした。
スレ違いなのはわかっていますが、なんていう暗号か教えてください
0571デフォルトの名無しさん
2006/05/21(日) 23:01:57使い捨てるやつね。メッセージと同じ長さの乱数列を使ってXORする
ようなイメージ。鍵長 = メッセージ長なので、総当りするとありと
あらゆる文章が出てきます(笑)
0572デフォルトの名無しさん
2006/05/21(日) 23:19:57何を言ってるんだお前は
0573デフォルトの名無しさん
2006/05/21(日) 23:23:580574デフォルトの名無しさん
2006/05/21(日) 23:26:470575デフォルトの名無しさん
2006/05/21(日) 23:30:110576デフォルトの名無しさん
2006/05/21(日) 23:45:48例えば「バナナ」を暗号化して「ABCDEF」という文字列を作ったとする。
これを総当りするうちに「バナナ」という文字列は現れるが、
途中に「リンゴ」「イチゴ」などの文字列もあらわれるため、
「バナナ」が元の文字列だと断定することができない。
よって、「元の文字列を得る」という意味での「解読」は絶対に出来ない。
これがワンタイムパッド暗号。
0577デフォルトの名無しさん
2006/05/21(日) 23:48:26そういう暗号化方式がWEBサービスとかで実際に使われているんですか?
0578デフォルトの名無しさん
2006/05/21(日) 23:51:38Thanks!
すっかり忘れてたけど、言われてみれば確かにそうだ。
OTPってOne Time Pad のことだったのか。
てっきり One Time Password のことだと思った。
0579デフォルトの名無しさん
2006/05/21(日) 23:56:31576じゃないけど、使い捨てる暗号なら普通に使われているのでは。
元の文字列が分からなくなれば良いんだから。
0580デフォルトの名無しさん
2006/05/22(月) 00:11:44あれって復号可能なの?
0581デフォルトの名無しさん
2006/05/22(月) 00:16:150582デフォルトの名無しさん
2006/05/22(月) 01:44:16http://ja.wikipedia.org/wiki/%E3%83%AF%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%91%E3%83%83%E3%83%89
ワンタイムパッドは事実上ほとんど使われてません。
ワンタイムパッドだと、100メガ のデータを暗合するのに100メガの鍵が必要。
だから暗号文を送る前に>581が言うように乱数=鍵の入ったストレージを相手に届けておかなければ意味がない。
確かに解読は絶対に不可能だが現実問題として扱いにくい。
現実には、解読に要する時間が十分長いものを採用する。
(コンピュータの計算力の向上とか、数学理論の発見とかで解読に必要な時間はだんだん短くなっていくのだが....)
>>580
MD5は一方向関数。
復号は目的とされていない。というよりも、復号ができないような関数。
0583デフォルトの名無しさん
2006/05/22(月) 01:51:27Perl5.8を使っています。
ネットワーク経由で取得したXML(utf8, 日本語含み)を
XML::TokeParserで細切れのスカラーにして、
それらを適宜組み合わせて、XML::RSSに食わせてRSSフィードに変換しました。
# $feed = {}; $feedには元XMLから取得したutf8文字列が入っている。
use XML::RSS;
my $rss = XML::RSS->new(Version=>'1.0');
my $j = Jcode->new;
my $label = $j->set('形態:'=>'euc')->utf8;
$rss->add_item(
title=>$feed->{title},
link=>$feed->{link},
description=>$label.$feed->{description}
);
こうやってできたRSSフィードを読むと、
「形態:」の部分が「\å\½\¢\æ\ \:」に文字化けしていました。
内部文字コードがどうたらが原因じゃないかと調べてみましたが、
そもそも中で何が起こっているのかわからないので困っています。
どうすればまともに文字コードを扱えるでしょうか?
0584デフォルトの名無しさん
2006/05/22(月) 06:41:48暗号じゃなくてダイジェストだからな。
0585デフォルトの名無しさん
2006/05/22(月) 06:45:41Jcode って utf8 フラグ立てるんだっけ?
Encode で utf8 文字列にしたらどうよ。
0586デフォルトの名無しさん
2006/05/22(月) 10:04:59だから、『解読』自体は出来るでしょ?
お前本当の馬鹿だな
0587デフォルトの名無しさん
2006/05/22(月) 10:14:38暗号無知は黙ってた方がいいよ?wwww
0588デフォルトの名無しさん
2006/05/22(月) 10:19:22内容で勝てないことで狂って、「最後まで粘ったほうが勝ち」って勝負に走るから。
0589デフォルトの名無しさん
2006/05/22(月) 10:20:03いや…この暗号方式はシーザー暗号並に単純だと思うんだけど…
辞書で解読の意味でも調べたら?
0590デフォルトの名無しさん
2006/05/22(月) 10:20:52ちゃんと反論して下さいよ全く
0591デフォルトの名無しさん
2006/05/22(月) 10:22:250592デフォルトの名無しさん
2006/05/22(月) 10:26:28>>587=588
両方消えて下さい
0593デフォルトの名無しさん
NGNG0594デフォルトの名無しさん
2006/05/22(月) 10:32:22それ復号?w
0595デフォルトの名無しさん
2006/05/22(月) 10:33:56彼は落雷に遭ってから不思議な能力を身に付けたのです
もう通信記録とか全部見えちゃうんですよ
0596デフォルトの名無しさん
2006/05/22(月) 10:34:23>>576の言ってる事はおかしいよね。変だよね。
0597デフォルトの名無しさん
2006/05/22(月) 10:37:437を9に変えれば同意
0598デフォルトの名無しさん
2006/05/22(月) 10:43:590599デフォルトの名無しさん
NGNG0600デフォルトの名無しさん
2006/05/22(月) 10:49:10要はネットでわめく暇があったら勉強すればいい話。
0601デフォルトの名無しさん
2006/05/22(月) 10:50:390602デフォルトの名無しさん
2006/05/22(月) 11:01:520603デフォルトの名無しさん
2006/05/22(月) 11:04:180604デフォルトの名無しさん
2006/05/22(月) 11:21:02害は無いと思うんだがなあ
なんで名無しで粘るんだろうね
0605デフォルトの名無しさん
2006/05/22(月) 11:26:530606デフォルトの名無しさん
2006/05/22(月) 11:30:52ちゃんと反論してくださいー
0607デフォルトの名無しさん
2006/05/22(月) 11:32:410608583
2006/05/22(月) 11:35:04アドバイスありがとうございます。
# $feed = {}; $feedには元XMLから取得したutf8文字列が入っている。
use XML::RSS;
my $rss = XML::RSS->new(Version=>'1.0');
my $label = '形態:';
from_to ( $label, 'euc-jp'=>'utf8' );
$rss->add_item(
title=>$feed->{title},
link=>$feed->{link},
description=>$label.$feed->{description}
);
このようにしてみましたが、結果は同じでした。
色々考えた挙句に、utf8で書いてuse utf8;したモジュールを作り、
そこから文字列を返してXML::RSSに食わせると望む結果が得られました。
ちなみに大元のスクリプトをutf8にすると、
鯖が何故かCGIとして認めてくれずにエラーを起こしたので、
このような事態になりました。
あんまりすっきりしませんが、ありがとうございました。
0609デフォルトの名無しさん
2006/05/22(月) 11:40:22> 大元のスクリプトをutf8にすると、鯖が何故かCGIとして認めてくれずにエラー
タイムリーだな。ちょうどWebProgのほうでその質問が出てるから参考に
http://pc8.2ch.net/test/read.cgi/php/1146042050/721-725
多分同じ原因だと思うが違ったらスマソ
0610デフォルトの名無しさん
2006/05/22(月) 11:40:460611デフォルトの名無しさん
2006/05/22(月) 12:15:57余計なところはしっかりと学習してるんだな。
0612デフォルトの名無しさん
2006/05/22(月) 13:46:030613デフォルトの名無しさん
2006/05/22(月) 13:52:03自演乙
0614デフォルトの名無しさん
2006/05/22(月) 14:05:030615デフォルトの名無しさん
2006/05/22(月) 14:41:170616デフォルトの名無しさん
2006/05/22(月) 14:43:05まあ Perl そのものがキモイ言語ですから。
0617デフォルトの名無しさん
2006/05/22(月) 14:49:070618デフォルトの名無しさん
2006/05/22(月) 15:12:310619583
2006/05/22(月) 18:08:49原因かどうかはわかりませんが、確かにUTF-8Nで保存するとちゃんと実行してくれました。
なんだこりゃ?
次からは、UTF-8Nでスクリプト書いてuse utf8;しようと思います。
ありがとうございました。
0620デフォルトの名無しさん
2006/05/22(月) 18:59:37文字列を扱う時、シングルクォーテーションかダブルクォーテーションか
どっちで挟むのがいいんでしょうか。
スクリプトによってバラバラなので気になっています。
0621デフォルトの名無しさん
2006/05/22(月) 19:04:46my $str = "うん";
print '$strちがいっぱいでたよ!\n'; #出血
print "$strちがいっぱいでたよ!\n"; #脱糞
0622デフォルトの名無しさん
NGNG0624デフォルトの名無しさん
2006/05/22(月) 19:55:18どっち使ってもいい場面なら
基本シングル
シングルクォート含んでてダブルの方がすっきり書けるときはダブル
0625デフォルトの名無しさん
2006/05/22(月) 20:29:50ちなみにベンチしてみればはっきりわかるが、
シングルのほうが早い
0626デフォルトの名無しさん
NGNG0627デフォルトの名無しさん
2006/05/22(月) 20:43:45あ・・・・れ・・・・?もう一回やってみよう
0628デフォルトの名無しさん
2006/05/22(月) 20:57:58なんかダブルのほうが速いな・・・・
すまん>>625間違いだった
0629デフォルトの名無しさん
2006/05/22(月) 21:50:24純粋なPerlのプログラムには、
CGIと同様に一行目に
#!C:/perl/bin/perl/
みたいなのを書く必要がありますか?
0630デフォルトの名無しさん
2006/05/22(月) 21:59:000631デフォルトの名無しさん
2006/05/22(月) 22:02:01書かなくても
perl 目的のスクリプト
で実行できるよ。
0632デフォルトの名無しさん
2006/05/22(月) 22:22:45Windows(というかDOS)でも、(書式は違うが)似たようなのを書く場合もある。
例えば ftp://hayabusa.ics.nara-wu.ac.jp/pub/nide/dosutil/sos111a.tgz みたいな環境を使う場合。
これを使うと、スクリプトのソースを(テキストのまま)直接 COM ファイルにできるので、
Unix みたいに progname arg ... のように実行できて便利。
0633デフォルトの名無しさん
2006/05/22(月) 22:31:48そういう事をするための pl2bat じゃないの?
0634デフォルトの名無しさん
2006/05/22(月) 22:36:30第一ヒント:汎用性
0635デフォルトの名無しさん
2006/05/22(月) 22:38:140636デフォルトの名無しさん
2006/05/22(月) 22:41:35儀礼的に書くようにしてる。
あと、winとかでもPerlがその文を読み取ってスイッチとか判断してる。
だから、基本的に書はいとけ、ってコトだと思う。
0637629
2006/05/22(月) 22:49:21ありがとうございます
なくても動くんですね
でも、あった方がいい、と。
ずっと悩んでたのがすごくすっきりしました。
どうもありがとう
0638デフォルトの名無しさん
2006/05/22(月) 23:47:34シングルの方が余計な解釈しないから早そうに思えるんだけど、なんで?
0639デフォルトの名無しさん
2006/05/22(月) 23:56:53コンパイル時点でシングルとダブルを解釈するから速度差には影響しにくいという話を聞いたことがある。
それはあるバージョンからそのようになったとかなんとか。
このスレか?
ようわからんが、「ダブルだったら展開出来そうな文字列を探せ」みたいな解釈をしてないってことだろ。
0640デフォルトの名無しさん
2006/05/23(火) 00:03:03曖昧な記憶ではコンパイル時に
"aaa$sss\n";
↓
'aaa' . $sss . "\n";
こんな感じになるんだけど、
すでに aaa と \n は畳み込まれているって聞いたことが。
シングルの場合はなにもされない。
違ったらスマソ
0641デフォルトの名無しさん
2006/05/23(火) 00:15:27>なくても動くんですね
>でも、あった方がいい、と。
「あったほうがいい」だけの理解だとすっきりしないと思うので。
#!/usr/bin/perl とかコマンドへのパス書くのは元々UNIXのシェルが
ファイルとプログラムを関連付けるルール。
Windowsではファイルの拡張子がその役割を担っているのでいらん。
でも、ApacheでCGIとして動かすなら、Apacheがファイルの一行目を
解析するのでWindowsでもUNIXでも必要だおy。
>>639
そうなのか。なんかダブルのほうが速いのがちょっと不可解だけど。
0642デフォルトの名無しさん
2006/05/23(火) 00:30:38こういう場合、perl での定石としてはどうするのでしょうか?
0643642
2006/05/23(火) 00:32:00環境変数とかになるんでしょうか?
0644デフォルトの名無しさん
2006/05/23(火) 00:54:25設定ファイルを c.pl にしてそこで$nameを定義。
a.pl と b.pl で c.pl を読み込む。
0645デフォルトの名無しさん
2006/05/23(火) 00:59:000646デフォルトの名無しさん
2006/05/23(火) 15:52:12なるほどね
ってことはシングルで . でつなげたほうがコンパイルは速いのか
確か2,3ヶ月前にベンチしたときはシングルのほうが速かった気がした。
0647デフォルトの名無しさん
2006/05/23(火) 16:46:570648デフォルトの名無しさん
2006/05/23(火) 17:21:290649デフォルトの名無しさん
2006/05/23(火) 18:07:130650デフォルトの名無しさん
2006/05/23(火) 18:09:07> ってことはシングルで . でつなげたほうがコンパイルは速いのか
そりゃないでしょ。
スクリプトレベルでそういう風に書くと、明示的に処理が入っちゃうから
返って遅くなるはず。
0651デフォルトの名無しさん
2006/05/23(火) 18:29:20高速化したい所だけCで書いたコマンド作って動かすということを、俺はたまにやる。
0652デフォルトの名無しさん
2006/05/23(火) 18:44:29言語のインタプリタなら分かるがインタプリタの言語というのは聞いたことがない
0653デフォルトの名無しさん
2006/05/23(火) 18:53:01ああ、そうか。そうだな。
0654デフォルトの名無しさん
2006/05/23(火) 19:27:000655デフォルトの名無しさん
2006/05/23(火) 20:23:34勝ち誇り、おめ。
0656629=637
2006/05/23(火) 21:30:07すごくよく理解できました。
ありがとうございました
0657デフォルトの名無しさん
2006/05/24(水) 01:55:13傾向としてはシングルクォートがやや優勢。またデータセットがある程度を超えて大きくなるにつれ、差が縮まっていくように見える。
で、パフォーマンスチューニングって Perl でも話題としてはアリだと思うんだ。「ここボトルネックなんだけど、書き方次第でもちっと早くなんね?」的なね。
もちろんこのスレ的には「まず読みやすいコードを書きましょう」が基本だし、試さないうちから「どちらが早い?」なんて訊かれてもがっかりするんだけどさ。
0658デフォルトの名無しさん
2006/05/24(水) 08:14:30最大のボトルネックに気付かず、大した影響のないクォートの話であーだこーだ言うのも滑稽だよね。
0659デフォルトの名無しさん
2006/05/24(水) 08:15:48勝手に人の話を妙な風に解釈するなよwww
0660デフォルトの名無しさん
2006/05/24(水) 15:14:41sub reff {
my @a = qw(a b c);
my @b = \@a;
}
my @list = reff()
print @{ $list[0] };;
このコードではサブルーチンreffの最後の行
my @b = \@a
の評価結果(つまり@b)が返されて@listに格納されるので
サブルーチン内でmy宣言された@aのリファレンスは
スコープを出ても生きています。
もしも上のコードを
sub reff {
my @a = qw(a b c);
my @b = \@a;
}
reff();
としてしまったら、@aのリファレンスはどうなりますか?
メモリリークになるのでしょうか?
それともreff()が無効コンテキストだから破棄される?
0661デフォルトの名無しさん
2006/05/24(水) 15:22:380662デフォルトの名無しさん
2006/05/24(水) 15:35:32http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html
> ハードリファレンスは賢く実際に参照されている数を管理していて、
> その数が 0 になれば自動的に解放を行ないます。(注意: 自己参照や
> 循環データ(cyclic data)にある値に対する参照カウントは、ちょっと
> した手助けなしにはゼロにはなりません。詳しくは perlobj を参照
> してください。)
0663660
2006/05/24(水) 15:50:340664デフォルトの名無しさん
2006/05/24(水) 16:01:31一番学習コストかかるよね?
0665デフォルトの名無しさん
2006/05/24(水) 16:04:01ただでできるよ?
0666デフォルトの名無しさん
2006/05/24(水) 16:07:49安く上げることも出来ると思うが。
本を買わないで perldoc とウェブ検索で済ますんだよ。
0667デフォルトの名無しさん
2006/05/24(水) 16:26:14\*globb
これは型グロブのリファレンスらしいんだが
いったいどういう用途があるの?
サブルーチンの引数として\@arrayを渡すと
配列のコピーコストがカットできるっていうのは
読んだことがあるけど型グロブならコピーのコスト
なんて発生しないでしょ?
0668!664
2006/05/24(水) 16:31:05なんにしろ他と差があるとは思わないけど。
0669デフォルトの名無しさん
NGNG0670デフォルトの名無しさん
2006/05/24(水) 16:58:22use IO::Handle;
open(F, '> test.txt') or die;
my $fh = \*F;
$fh->print("aaa\n");
$fh->close();
0671デフォルトの名無しさん
2006/05/24(水) 17:14:02リファレンスにしなくても配列のコピーは無料ですよ?
0672デフォルトの名無しさん
2006/05/24(水) 19:32:40667じゃないですが横から失礼します。Perl勉強中の者です。
> 配列のコピーは無料ですよ?
ラクダ本には、関数の引数は参照渡し(@_ に入っているのはエイリアス)と書いてありますが
これはつまり $_[0]++; などと書けば、第一引数として渡した左辺値がインクリメントされる、
という理解でいいんでしょうか。この場合、左辺値になれない値を渡すとエラーになるんですよね?
その前提でいくと、配列を渡した場合も、個々の要素(スカラー値)のエイリアスが @_ に入るだけで
コピーは発生しないはずでは? それとも、@_ にエイリアスが入る事を「コピー」と呼ぶのでしょうか?
0673デフォルトの名無しさん
2006/05/24(水) 20:42:23hoge[test]hoge
という文字列があったとして、"test"を取り出したい場合、
"[" と "]"をindexで探してsubstringする方法しかないでしょうか。
他の方法があれば教えてください。
0674デフォルトの名無しさん
2006/05/24(水) 20:48:25正規表現
0675デフォルトの名無しさん
2006/05/24(水) 20:49:17$foo =~ m/[a-z]+\[([a-z]+)\][a-z]+/;
print($1);
とか?
0676デフォルトの名無しさん
2006/05/24(水) 21:17:52実験させていただきます。
0677デフォルトの名無しさん
2006/05/24(水) 21:59:10@array = (1..1000);
&func(@array); # scalar @_ == 1000
&func(\@array); # scalar @_ == 1
0678デフォルトの名無しさん
2006/05/24(水) 22:03:58バージョン何のPerlからですか?
0679デフォルトの名無しさん
2006/05/24(水) 22:07:064? もっと前かなぁ。まぁ、配列スライスの実装はかなり前だ。
0680デフォルトの名無しさん
2006/05/24(水) 23:51:30定数を設定するファイルをプログラム本体と分離しようと
プログラム本体側から変数に値を代入するプログラムをrequireしたのですが、
strictだと、変数を参照するときに怒られてしまいます。
strictの場合はどのようにするのが一般的なのでしょうか。
0681デフォルトの名無しさん
2006/05/25(木) 00:01:41sub PI () { 3.14 }
1;
な pi.pl を用意しておいて、
BEGIN { require 'pi.pl' }
した上で、
print PI;
なんてやり方もあるけど、どう?
0682酩酊 ◆TWARamEjuA
NGNGつ http://search.cpan.org/~nwclark/perl-5.8.8/lib/constant.pm
0683デフォルトの名無しさん
2006/05/25(木) 01:00:38そうじゃなくて
sub subroutine {
my @list2 = sfhit;
}
subroutine(@list);
ってするときに
subroutine(\@list);
とした方がコピーのコストが省けるでしょって意味
0684デフォルトの名無しさん
2006/05/25(木) 01:25:55subroutine(\@list);と渡したら
sub subroutine {
my $ref = shift;
my @list2 = @$ref;
....
}
などとする必要があるぞ。
例示として適当なのは
sub my_sort { map{ undef $_ } @_; }
@list = my_sort(@list);
としたときに、
@listで受け取る以前にsub my_sortが@_に対する直接の操作をしているので
my_sort(@list);
と等価になると言う辺りか。
参照渡しでメモリの節約だとかスピードアップだとか言われるけど
本当の意味が分からんやつはしなくてよろしい。
0685デフォルトの名無しさん
2006/05/25(木) 01:26:470686デフォルトの名無しさん
2006/05/25(木) 01:27:310687672
2006/05/25(木) 01:27:39「コピー」は「値は同じでも実体が異なるもの」
「エイリアス」は「別名だが実体は同じもの」という意味ですよね?
手元の「第2版 プログラミングPerl VOL.2」の P1193 にある「エイリアス」の定義では、
> サブルーチン呼び出しの実引数が入る @_ の各要素に対して、それぞれ暗黙の
> 一時的なエイリアスが作られる。
となっています。
>>671 や >>683 では「コピー」と書いていますが、「エイリアスを作る事」を「コピー」と呼ぶのですか?
と>>672でお聞きしたつもりでした。書き方が悪かったようで申し訳ありません。
0689672
2006/05/25(木) 02:05:17どうも定義を明確にする癖があって・・・ ここではそういう厳密さはNGみたいですね・・・ もうねるぽ。。。
0690デフォルトの名無しさん
2006/05/25(木) 03:14:09コピーにたいする操作はコピー元に影響を与えない。
エイリアスへの操作は参照元と影響を共有する。
0691デフォルトの名無しさん
2006/05/25(木) 03:32:12>>683じゃないけど
確かに@_はエイリアスだけど
my @a = @_;
ってやった時点でコピー。
@aに何しても元の配列に影響なし
配列のコピーが無料なのは
my @a = @_;
をやらない場合
だとおもう
0692デフォルトの名無しさん
2006/05/25(木) 03:32:57サブルーチン内で@_を直接操作するなんてのは
トラブルのもとだからサブルーチン内で局所変数
用意してそこに引数をぶち込むのが定石で
ぶち込むときには当然
sub subroutin {
my $class = shift;
my @list = @_;
}
とかってするけどこのときに@_から@listへの配列の
コピーが発生してうざいからサブルーチンの引数を
配列のリファレンスにしてサブルーチン内で
デリファレンスして使った方がちょっとだけ速度改善
という話じゃないのかい?
0694デフォルトの名無しさん
2006/05/25(木) 03:40:08> サブルーチン内で@_を直接操作するなんてのは
> トラブルのもと
どの辺がトラブルのもとになるのか詳しく教えてください><
0695デフォルトの名無しさん
2006/05/25(木) 03:44:34> どの辺が
「サブルーチン内で@_を直接操作する」辺りが。
0696デフォルトの名無しさん
2006/05/25(木) 04:55:02別にトラブルにならんと思うがね。
実際に使ってるモジュールもあるし。
0697デフォルトの名無しさん
2006/05/25(木) 06:12:22OutofMemory
0698デフォルトの名無しさん
2006/05/25(木) 11:33:02perlのサブルーチンはCなんかの
int subroutine (int x, int y) {
return x * y;
}
とは違って"基本的に"引数の型や戻り値の型を指定できない
sub subroutine {
return $_[0] * $_[1];
}
こんなサブルーチンがあったら何をやっているか激しく意味不明だろ?
数字同士を掛けてるのかそれとも文字列同士を掛けてるのかもしれない
qmailの作者のコードじゃないんだから意味不明さは避けなきゃ
0699デフォルトの名無しさん
2006/05/25(木) 11:46:31sub subroutine {
my($x, $y) = @_;
return $x * $y;
}
だとしても意味不明なのは一緒だと思うのだが。
0700デフォルトの名無しさん
2006/05/25(木) 11:49:460701デフォルトの名無しさん
2006/05/25(木) 11:50:360702デフォルトの名無しさん
2006/05/25(木) 11:51:54好みの問題というか、宗教の問題というか。
正解はないが、そこまで毛嫌いする処理じゃないと思うぞ。
よほどでかい配列を扱うか、使用頻度の高いサブルーチンでも無い限り
速度どうのこうの言うのは馬鹿げてると思うぞ。
なぁ>>692
0703デフォルトの名無しさん
2006/05/25(木) 11:59:14引数のグルーピングができるってことじゃないの?
@a = qw(a b c);
@b = qw(3 2 1 0);
s(\@a,\@b);
みたいな
これをリファレンス使わなかったら引数の解析だけで
えらい手間だと思う
0704デフォルトの名無しさん
2006/05/25(木) 12:17:03$name = "sub1";
として、
&sub1();
を実行するような感じです。
0705デフォルトの名無しさん
NGNG0706デフォルトの名無しさん
2006/05/25(木) 12:40:49できましこ。ありがとうございます!
0707デフォルトの名無しさん
2006/05/25(木) 12:51:33引数の個数とかも明示されない
これはあとでそのサブルーチン呼ぼうとしたとき
いちいち全部に目を通さないとならんくなるよな
それに、サブルーチンの引数を変更したときに
変更箇所が増える、というのもある
0708デフォルトの名無しさん
2006/05/25(木) 13:11:28{
my $a = $pairs[1];
0709デフォルトの名無しさん
2006/05/25(木) 13:15:44{
my $a = $pairs[1];
}
クエリかなんかでおくられていたデーターをアパサンドで分割
配列変数@paisrに入れて一番上最初の文字列をスカラー変数$aに代入
したいのですがこれであってますか?
0710デフォルトの名無しさん
2006/05/25(木) 13:20:350711デフォルトの名無しさん
NGNG0712デフォルトの名無しさん
2006/05/25(木) 13:53:40# レスポンスヘッダの出力
print "Content-type: text/html", "\n\n";
# 代入
$buffer = "abcdef";
@pairs = split(/&/,$buffer);
{
my $a = $pairs[1];
}
# HTMLの出力
print "<HTML>\n";
print "<BODY>\n";
print $buffer, $a, pairs[1], "<font size=7>ハローワールド</font><BR>\n";
print "</BODY>\n";
print "</HTML>\n";
うわぁぁん ウゴカネ('A':)
0713デフォルトの名無しさん
NGNG0714デフォルトの名無しさん
2006/05/25(木) 15:06:030715デフォルトの名無しさん
2006/05/25(木) 16:40:380716デフォルトの名無しさん
2006/05/25(木) 17:11:25{
my $a = $pairs[1];
}
print $a; # undefined value
これは何か期待できる。
0717デフォルトの名無しさん
2006/05/25(木) 18:52:320718デフォルトの名無しさん
2006/05/25(木) 19:00:560719デフォルトの名無しさん
2006/05/25(木) 19:05:55$bでもやってみれば
0720デフォルトの名無しさん
2006/05/25(木) 19:07:08use や new するときのモジュールに変数を使えないでしょうか?
sub hogehoge()
{
my $pm_name = shift;
use $pm_name;
my $obj = new $pm_name();
}
0721デフォルトの名無しさん
2006/05/25(木) 19:16:07最初から全部 use しとけば?
0722デフォルトの名無しさん
2006/05/25(木) 19:30:48おk
>>720
eval 等を使うべし。
0723デフォルトの名無しさん
2006/05/25(木) 19:40:12autouseを使ってなんとかならんか?
0724720
2006/05/25(木) 19:53:46use を require にしたら変数を指定しても動きました。
evalだと何故か「Can't locate object method "new" via package "モジュール名" (perhaps you forgot to load "モジュール名"?) at hoge.pl line 行番号.」となりました。
0725デフォルトの名無しさん
2006/05/25(木) 20:09:09しかもuseとかサブルーチンで囲んだりしてもスコープの変化以上の意味はないよ。
0726デフォルトの名無しさん
2006/05/25(木) 20:29:07・RedHatLinux上で動作させるプログラムを書きたいと思っています。
・開発はWindowsでやりたいです。
開発はActiveperlで行えそうですが改行コードが異なる点が問題です。
改行コードの一括返還の行えるソフトや
もともとLinuxでの改行コード(LF?)で開発のできるソフトなどありましたら
教えていただきたいです。
始めたばかりで質問に必要な情報を提示しているかどうかもわからない状態です。
かけていることがありましたら指摘お願いします。
0727デフォルトの名無しさん
2006/05/25(木) 20:32:06Windows の方は Cygwin 使えばいいんじゃないか?
多分そのままじゃ漢字使えないけど。
ああ、でも、Linux側に ftp で put して動かすという場合は
改行コードは ftp が変換してくれるよ。ascii モードで送れば
いいの。漢字のコードについては Windows では MKEditor とか
使えばいいんじゃないのかな。
0728デフォルトの名無しさん
2006/05/25(木) 20:49:520729デフォルトの名無しさん
2006/05/25(木) 21:03:39何もしなくていい。改行コードの違いなんて問題にならない。
0730デフォルトの名無しさん
2006/05/25(木) 21:16:58#! の行の改行コード違うとちょっと困りそう。
-- で回避するのめんどくさい。
0731デフォルトの名無しさん
2006/05/25(木) 21:53:09>改行コードの一括返還の行えるソフトや
perl -i.bak -pe "binmode(select);s/\r//g;" *.pl
とか?
0732デフォルトの名無しさん
2006/05/25(木) 22:23:51最近の流行りはUNIVERSAL::require
http://search.cpan.org/dist/UNIVERSAL-require/lib/UNIVERSAL/require.pm
0733デフォルトの名無しさん
2006/05/25(木) 22:24:58最初からLFで書いておけ、って話じゃないの?
0734デフォルトの名無しさん
2006/05/25(木) 22:38:460735デフォルトの名無しさん
2006/05/25(木) 22:59:470736デフォルトの名無しさん
2006/05/25(木) 23:11:59トリップとIDの算出方法
0737デフォルトの名無しさん
2006/05/25(木) 23:36:02戻り値を何かに保存するなら、という条件付。
その場合は間違いなく値のコピーが発生するぞ。
たとえ戻り値が巨大な配列のリファレンスだったとしても、ちゃんと一つの「配列リファレンス」という値が、な。
0738デフォルトの名無しさん
2006/05/25(木) 23:40:13PerlのみでOSを書くことはできますか?
0739デフォルトの名無しさん
2006/05/25(木) 23:40:57どうも有難う御座います
0740デフォルトの名無しさん
2006/05/25(木) 23:43:46無理って言いたいけど
0741デフォルトの名無しさん
2006/05/25(木) 23:48:040742デフォルトの名無しさん
2006/05/25(木) 23:48:530743デフォルトの名無しさん
2006/05/25(木) 23:49:20どうだろね。 perlは何らかのソフト環境上で
動作してる様だし、原則無理ではないかな。
エミュレーターぐらいならなんとか。
0744デフォルトの名無しさん
2006/05/25(木) 23:51:32grepやmapは内部でどういう処理してるんだろう?
Perlの組み込み関数はさすがにやってないよね?
0745デフォルトの名無しさん
2006/05/25(木) 23:51:50ということは Perl machine を開発すれば解決ということか。
0746デフォルトの名無しさん
2006/05/25(木) 23:53:490748デフォルトの名無しさん
2006/05/26(金) 00:08:58可能かどうかなら、可能なのかもね。
しかしそれを使うソフトは、どうすることもできない
パフォーマンスの頭打ちに悩まされる。
0749デフォルトの名無しさん
2006/05/26(金) 00:12:59(徴妙にスレ違い。)
0750デフォルトの名無しさん
2006/05/26(金) 00:23:56最近Perlが好きになったんだけど、テキスト処理しかしてないから、もっとなんか作れないかなと思って。
0751デフォルトの名無しさん
2006/05/26(金) 00:40:14しかし、作る理由が「興味」以外にない。
0752デフォルトの名無しさん
2006/05/26(金) 00:41:27入力時に既にCRは消えてるからARGVOUTをbinmodeにするだけでLF出力になるよ
0753デフォルトの名無しさん
2006/05/26(金) 02:17:01そういうレベルの話なら
ImageMagick あたりの画像加工モジュールとか試して
みたら?(ピュアパールではないが)
0754デフォルトの名無しさん
2006/05/26(金) 06:30:400755デフォルトの名無しさん
2006/05/26(金) 06:41:20日本語でおk
0756デフォルトの名無しさん
2006/05/26(金) 06:57:17実に象徴的だよな。
0757デフォルトの名無しさん
2006/05/26(金) 11:16:23perl -e 'for(;;){print"a:\\> ";$s=<>;chomp($s);if($s eq"dir"){system"ls"}}'
0758デフォルトの名無しさん
2006/05/26(金) 12:38:59妙にPerl使いっぽくない書き方だな。いや別にだからどうしたってこともないけど。
0759デフォルトの名無しさん
2006/05/26(金) 12:51:410760デフォルトの名無しさん
2006/05/26(金) 14:00:41これが荒らし。言うまでもないか。
0761デフォルトの名無しさん
2006/05/26(金) 17:47:05もしできなければ、他の方法を教えていただけるとありがたいです。
0762デフォルトの名無しさん
2006/05/26(金) 17:52:510763デフォルトの名無しさん
2006/05/26(金) 18:32:30my $test = do { local undef $/ ; <IN> } ;
close IN ;
my $file = 'hoge' ;
my $test = do { local ( @ARGV, $/ ) = $file ; <> } ;
ttp://search.cpan.org/~uri/File-Slurp-9999.12/extras/slurp_article.pod
0764デフォルトの名無しさん
2006/05/26(金) 19:36:28何を言いたいか全くわからないがOSのつもり....なのか?
OSとか、shellとかが何なのかわかってる?
0765デフォルトの名無しさん
2006/05/26(金) 20:23:19実用化されたの?
0766デフォルトの名無しさん
2006/05/26(金) 20:24:01CSS2に完全準拠してくれるとかだとありがたい。
文法エラーをどれだけ精度良く無視できるかがキーだけどOSよりは難易度低いかと。
0767デフォルトの名無しさん
2006/05/26(金) 22:05:45そうなるとCかFrotranの独壇場なんだよね。MPIもないし。
0768デフォルトの名無しさん
2006/05/26(金) 22:09:00適材適所って言葉知ってる?
0769デフォルトの名無しさん
2006/05/26(金) 22:47:100770デフォルトの名無しさん
2006/05/26(金) 23:30:190771デフォルトの名無しさん
2006/05/26(金) 23:40:280772デフォルトの名無しさん
2006/05/27(土) 00:05:400773デフォルトの名無しさん
2006/05/27(土) 00:15:120774かえる
2006/05/27(土) 00:27:03Unrecognized character \81 at ファイル名. pl line 4.
と表示されます。
\81とは何を示しているんですか? お願いします教えて下さい。
0775デフォルトの名無しさん
2006/05/27(土) 00:32:140776デフォルトの名無しさん
2006/05/27(土) 00:39:21Huskel ってどういう意味ですか><
Huskel の検索結果 約 480 件中 1 - 10 件目 (0.06 秒)
Haskell の検索結果 約 18,200,000 件中 1 - 10 件目 (0.16 秒)
見た感じ特別な意味はなくてただのtypoか人名っぽいんだけど・・・
なんだろ。Haskell の親戚かなにか?
0777デフォルトの名無しさん
2006/05/27(土) 00:48:390778デフォルトの名無しさん
2006/05/27(土) 01:01:180779デフォルトの名無しさん
2006/05/27(土) 01:13:120780デフォルトの名無しさん
2006/05/27(土) 01:22:370781デフォルトの名無しさん
2006/05/27(土) 01:30:240782デフォルトの名無しさん
2006/05/27(土) 02:08:350783デフォルトの名無しさん
2006/05/27(土) 04:34:300784デフォルトの名無しさん
2006/05/27(土) 12:17:070785デフォルトの名無しさん
2006/05/27(土) 15:01:24\81から始まるのは、別に全角スペースに限らんだろうが。
use encodings を宣言せず、sjisの全角文字を入れたことが原因と思われ。
0786デフォルトの名無しさん
2006/05/27(土) 15:52:150787デフォルトの名無しさん
2006/05/27(土) 17:00:42ちょ、 \81 って、それ >>774 と同レベル。
0788デフォルトの名無しさん
2006/05/27(土) 17:42:00mainパッケージで@hogeリスト変数に値をいれておき、
その後実行するサブルーチンの中で、以下の処理を実施します。
while(<FH>){
#なんか処理
#なにもしなくてもOK
}
するとなぜか@main::hogeのある値が更新されてしまいます。
上記ループ処理がないと更新はされません。
こういった現象が起こるにあたって、なにかこれが問題では?
というような心当たりとかありましたら教えてほしいです。
よろしくおねがいします。
0790デフォルトの名無しさん
2006/05/27(土) 17:49:35りょうかいしました。
ちょっと可読性あげと個人情報保護対策しますので
少々おまちを・・・
0791788
2006/05/27(土) 18:06:14use Data::Dumper;
use strict;
use constant DEBUG => '1';
my $target;
while(<DATA>){
if(/^target=(.*)$/){
$target=$1;
}
}
open FH,"<$target" or die $!;
opendir DIR,"./" or die $!;
@main::pkgs = readdir DIR or die $!;
my $target_result = $target."_result.txt";
open FOUT,">$target_result" or die $!;
#続く
0792788
2006/05/27(土) 18:07:27while(<FH>){
my $line = $_;
$line =~ s{
([^A-Za-z0-9_]+)
(?:
(
(?:[A-Z]+_{1})+PKG\.
(?:[A-Z0-9]+|(?:[A-Z0-9]+_{1})+?[A-Z0-9]+)
)
)
([^A-Za-z0-9_]+)
}{$1.trans($2).$3}egx;
print FOUT $line;
}
close FH;
close FOUT;
#さらに続く
0793788
2006/05/27(土) 18:08:05sub trans(){
my $arg = shift;
foreach(@main::pkgs){
my ($pkgN,$val) = split /\./,$arg;
$pkgN .= ".sql";
if($_ eq $pkgN){
return search($pkgN,$val);
}
}
return $arg;
}
#さらに続く
0794788
2006/05/27(土) 18:09:14sub search(){
my ($pkgN,$val) = @_;
open FH1,"<$pkgN" or die $!;
print "**sub search**\n",Dumper(@main::pkgs),"*******\n";
while(<FH1>){
print "**sub search**\n",Dumper(@main::pkgs),"*******\n";
if($_=~ /^$val[\s]+CONSTANT[\s]+.*[\s]+:=[\s]+('[A-Z0-9]+');.*$/){
}
}
close FH1;
NOHIT:
return $val;
}
__DATA__
target=HOGE_HOGE.sql
#以上
788でいっているのが上記のwhile(<FH1>){あたりからの処理です。
0795デフォルトの名無しさん
2006/05/27(土) 18:42:01どういう風に値が変わるのかも書いたほうがいいんじゃないかな。
さすがに、テストデータ作ってまでデバッグしてくれる人はいないでしょ。
0796デフォルトの名無しさん
2006/05/27(土) 18:44:07while(<FH1>) は while(defined($_ = <FH>)) なんだけど、これが
for (@pkgs) つまり for $_ (@pkgs) 中で呼ばれているので、
while(<FH1>) が実行されるときの $_ は @pkgs 中の1要素(のエイリアス)になってる。
0797788
2006/05/27(土) 18:57:040798デフォルトの名無しさん
2006/05/27(土) 19:33:36my @arr = (1, 2, 3, 4);
print "**@arr**\n";
foreach (@arr) { read_data() }
print "**@arr**\n";
sub read_data { print while (<DATA>) }
__DATA__
AAA
BBB
実行結果
**1 2 3 4**
** **
0799デフォルトの名無しさん
2006/05/27(土) 19:34:58**1 2 3 4**
AAA
BBB
** **
0800デフォルトの名無しさん
2006/05/27(土) 21:11:43while は $_ を破壊してしまうから foreach を使うべし。
0801デフォルトの名無しさん
2006/05/27(土) 21:32:48ネタだと思うけど一応。
while (my $hage = <>) {}
と書け。
{
local $_;
while () {}
}
って解決策もあるけど、こんなんだったら my 使ったほうがいいべ。
0802デフォルトの名無しさん
2006/05/27(土) 21:40:54詳しく
0803デフォルトの名無しさん
2006/05/27(土) 21:44:22ネタなんだろうけど、そんなことくらい気にするなよ。
$_は自分で使うときは必ずlocal $_する。
何かの関数を呼び出したら$_が破壊されていると考える。
それで充分。
0804デフォルトの名無しさん
2006/05/27(土) 22:12:37ネタ……だよね?
「必ずlocal $_する」くらいなら、名前を付けてあげようよ。w
スコープについての心配が煩わしいなら、すでに $_ を使う理由がないということなのだから。
0806804
2006/05/27(土) 22:26:04失礼のお詫びにサービス。
foreach はループ変数がグローバルである場合、自動的に変数の局所化を行う。対して while はそれをしない。
>>800 の「破壊」ってのはそれを指していると思われるけれど、うん、100% ネタということで。
0807デフォルトの名無しさん
2006/05/27(土) 23:04:52>>806 の意味です。
0808デフォルトの名無しさん
2006/05/27(土) 23:55:11なんかbbs.cgiの仕様がこう(次レス)変わったらしいんですが、
これにage2ch.plを対応させるにはどこをどう変えたらいいんですか?
search.plもだいぶ前から使えなくなってますが、串使うことないので別にいいです。
age2ch.plダウンロード先
http://prdownloads.sourceforge.jp/age/8541/age2ch.pl0.04.04.01.tar.gz
http://sourceforge.jp/projects/age/
0809808
2006/05/27(土) 23:55:48459 :stream ◆PNstream2s :2006/05/27(土) 16:31:16
新しい書き込みの仕様
レス
FROM= ←名前
mail= ←メール欄
MESSAGE= ←本文
bbs= ←板のディレクトリ名。operateとかtechとか
time= ←現在時刻より小さい値を適当に。1を送っておけばよい
key= ←スレッドキー
hana=mogera ←追加。常にmogeraを送っとけばいいのかな。
Cookieは不要。
460 :stream ◆PNstream2s :2006/05/27(土) 16:35:43
スレ立て
subject= ←スレッドのタイトル
FROM= ←名前
mail= ←メール欄
MESSAGE= ←本文
bbs= ←板のディレクトリ名。operateとかtechとか
time= ←現在時刻より小さい値を適当に。1を送っておけばよい
hana=mogera ←追加。常にmogeraを送っとけばいいのかな。
461 :stream ◆PNstream2s :2006/05/27(土) 16:36:37
Cookieは不要と書きましたが、sports2はCookie無しじゃ書けないので
Cookieも今までどおり必要ですね
0810デフォルトの名無しさん
2006/05/28(日) 00:05:460811デフォルトの名無しさん
2006/05/28(日) 00:16:41呼び出した先での $_ の破損を調べるのに &hogehoge for 1; とか、
$_ を無駄に保護するのに &hogehoge for 1..1; とかどうですかね。
>>806 さん
重箱の隅ですが、foreach のループ変数局所化はmy変数にも有功ですだよ。
0812デフォルトの名無しさん
2006/05/28(日) 00:49:48> Perlででかい何かを作りたいよぅ
Winnyノード
0813808
2006/05/28(日) 00:56:010814デフォルトの名無しさん
2006/05/28(日) 01:06:25>>808
がんばれ。
0815808
2006/05/28(日) 01:08:51マジで頼むよ・・・
0816デフォルトの名無しさん
2006/05/28(日) 01:09:510817デフォルトの名無しさん
2006/05/28(日) 01:16:06テキスト編集って言ってもイロイロあるんだぞ。
ISPなんかでは、アカウントの作成やらユーザの設定変更やらでPerl大活躍だ。
0818デフォルトの名無しさん
2006/05/28(日) 01:21:22無知乙
0819808
2006/05/28(日) 01:38:17↓ ↓ ↓
0820デフォルトの名無しさん
2006/05/28(日) 01:44:44スレ違い。改造スレに池。
0821sage
NGNG俺のチンコをモデリングするコード
0822808
2006/05/28(日) 01:51:18改造スレってどこですか?
0823806
2006/05/28(日) 02:26:45ツッコミさんきゅー。で (レキシカル|ダイナミック) スコープが継承される、と。
お返しに、
>呼び出した先での $_ の破損を調べるのに &hogehoge for 1; とか、
>$_ を無駄に保護するのに &hogehoge for 1..1; とかどうですかね。
デバッグ用としてはアリかと。でも可読性はイマイチ。
>>806 でもちょっと書いたけれど、「これってスコープどうなってんの」な心配が要る時には、$_ を使うべきじゃない。
呼び出し側で $_ を使っていなければサブルーチンが何やっててもその点での心配はしなくていい。
そんなところに神経使うのは無駄ざます。w
0825デフォルトの名無しさん
2006/05/28(日) 13:34:010826デフォルトの名無しさん
2006/05/28(日) 13:45:55小さいから却下。
0827デフォルトの名無しさん
2006/05/28(日) 13:50:21今度の荒らし君は少しは勉強してきたようですね。えらいえらあい。
0828デフォルトの名無しさん
2006/05/28(日) 14:03:19つまり、>>817を要約すると、テキスト編集くらいしか役に立たんということだ。
あとは一応、コマンド実行できるから、シェルスクリプト(バッチファイル)の代わりとか、
ネットワーク周りも使えるから、ネットワークのクライアントとかサーバとかそんなもん。
でもやっぱり一番用途が多いのはテキスト編集で、テキストファイルの変換とか多いと気がするな。xxx2htmlとか。
>>822
,.-─ ─-、─-、
, イ)ィ -─ ──- 、ミヽ
ノ /,.-‐'"´ `ヾj ii / Λ
,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
ノ/,/ミ三ニヲ´ ゙、ノi!
{V /ミ三二,イ , -─ Yソ
レ'/三二彡イ .:ィこラ ;:こラ j{
V;;;::. ;ヲヾ!V ー '′ i ー ' ソ
Vニミ( 入 、 r j ,′
ヾミ、`ゝ ` ー--‐'ゞニ<‐-イ
ヽ ヽ -''ニニ‐ /
| `、 ⌒ ,/
| > ---- r‐'´
ヽ_ |
ヽ _ _ 」
ググレカス [ Gugurecus ]
( 西暦一世紀前半 〜 没年不明 )
0829デフォルトの名無しさん
2006/05/28(日) 14:37:21ウpレカス
0830デフォルトの名無しさん
2006/05/28(日) 14:57:120831デフォルトの名無しさん
2006/05/28(日) 15:05:43WEB上のファイルをURLからそのファイル内容を取得したいと思ったのですが
そういったことはできるのでしょうか?
ちなみにファイル開くopen関数で開こうとしてみましたがだめみたいでした;;
open(FILE,
0832デフォルトの名無しさん
2006/05/28(日) 15:06:120833デフォルトの名無しさん
2006/05/28(日) 15:06:40できない。
はいさようなら。
0834デフォルトの名無しさん
2006/05/28(日) 15:08:25そうですか;;ありがとうございます
0836デフォルトの名無しさん
2006/05/28(日) 15:10:40CGIからはどの言語からでも無理ということでしょうか?
0837デフォルトの名無しさん
2006/05/28(日) 15:10:50google: LWP
0838デフォルトの名無しさん
2006/05/28(日) 15:14:18#!/usr/bin/perl
use strict;
use LWP::UserAgent;
main();
sub getUA {
my $timeout = $_[0] ? $_[0] : 10;
my $ua = LWP::UserAgent->new();
$ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)');
$ua->timeout($timeout);
return sub { # new($method, $url, $header)
my $res = $ua->request(HTTP::Request->new($_[0], $_[1], $_[2]));
return ($res->is_success) ? $res : 0;
}
}
sub main {
my $ua = getUA(10);
my $res= $ua->('GET', "$ARGV[0]");
$res or die "$ARGV[0] error\n";
print $res->content;
}
0839デフォルトの名無しさん
2006/05/28(日) 15:16:210840デフォルトの名無しさん
2006/05/28(日) 15:29:40回答ありがとうございました〜LWP::Simpleで調べてみたところ
use LWP::Simple;
$doc = get 'http://www.yahoo.co.jp/';
こんな感じでできるようです^^ありがとうございました〜〜
0841デフォルトの名無しさん
2006/05/28(日) 15:55:560842デフォルトの名無しさん
2006/05/28(日) 15:56:57荒らし自演乙。
0843デフォルトの名無しさん
2006/05/28(日) 15:57:36氏ね。
0844デフォルトの名無しさん
2006/05/28(日) 16:05:45__FILE__
たぶん。
0845デフォルトの名無しさん
2006/05/28(日) 16:11:22どうしたらよいでしょうか?
たとえば、Perlプログラム起動直後、ターミナル上に
****************************
* This is a Perl program. *
****************************
と表示されるようにします。この後、ほかの動作が入るとターミナルがスクロールされて、
上記の表示はなくなってしまいます。
標準入出力やファイル表示を行っても、常に上記の表示がされているようにしたいのですが、
どうしたらよいでしょうか?
Perlならできるのか、Unixのシステム関数が必要なのかもよくわかりません。
0846デフォルトの名無しさん
2006/05/28(日) 16:12:21サンキュ!!!
0847デフォルトの名無しさん
2006/05/28(日) 16:12:31GCA形式とはまたマニアックな。
作ればできるが、今のところそういったモジュールはないと思われる。
0848デフォルトの名無しさん
2006/05/28(日) 16:32:36できなくはないが…めんどくさいな。
使ったことはないがncursesとかのコンソール用のライブラリを
インストロールする必要があると思われる。
とりあえず、簡単にはできないかと。
0849デフォルトの名無しさん
2006/05/28(日) 16:36:060850デフォルトの名無しさん
2006/05/28(日) 16:55:070851デフォルトの名無しさん
2006/05/28(日) 20:57:500852デフォルトの名無しさん
2006/05/28(日) 21:02:520853デフォルトの名無しさん
2006/05/28(日) 21:35:230854デフォルトの名無しさん
NGNGhttp://e-words.jp/w/E588B6E5BEA1E69687E5AD97.html
0855デフォルトの名無しさん
2006/05/28(日) 21:55:54コマンドラインでの実行が必須の前提なのか?
見た目に拘るならuse Tk;
0856デフォルトの名無しさん
2006/05/28(日) 22:53:28例によって環境が隠蔽されているでアレだが、
UNIX世界なら、Curses*のモジュールのどれかとか
あるいはTerm*に何かあるかも知れんね。
0857デフォルトの名無しさん
2006/05/28(日) 23:23:270858デフォルトの名無しさん
2006/05/29(月) 01:00:04あーやっぱりこれじゃだめですた。
ファイルの置かれてるパスが知りたいので
0859デフォルトの名無しさん
2006/05/29(月) 01:15:21Activeperlでeucで書いています。
下のコードは、適当にテストしたもの。
リンクとかでも良いので、教えて頂けると助かります。
あと、Jcodeの->m(って$1とかは返さないのでしょうか。マッチングだけ?
#perl 5.8.7
use Jcode;
sub getSJIS{
my $x = shift;
return Jcode->new($x)->sjis;
}
$j = "ここが漢字です。abcここカタカナ。";
#$k = Jcode->new($j,"euc");
#$pat = "([亜-熙]+)";
#$opt = "i";
#if ( $k->m($pat,$opt) ){
if ( $j =~ m/([亜-熙]+)/ ){
print getSJIS("漢字 [".$1."]\n");
}else{
print getSJIS("NOT 漢字\n");
}
if ( $j =~ m/([ぁ-ん]+)/ ){
print getSJIS("ひらがな [$1]\n");
}else{
print getSJIS("NOT ひらがな \n");
}
0860デフォルトの名無しさん
2006/05/29(月) 01:21:260861デフォルトの名無しさん
2006/05/29(月) 02:01:11「速い」のはサーブレットかな。大抵の場合。
0862デフォルトの名無しさん
2006/05/29(月) 02:02:540863デフォルトの名無しさん
2006/05/29(月) 02:52:03http://www.dmst.aueb.gr/dds/pubs/conf/2002-SANE-DynCont/html/latency.gif
0864デフォルトの名無しさん
2006/05/29(月) 03:44:22っていうか、当たり前か。
0865デフォルトの名無しさん
2006/05/29(月) 09:29:46%INC
0866デフォルトの名無しさん
2006/05/29(月) 14:20:45[-]はjperlにするかperlならencoding使わなきゃ無理やろ。
しかも、perlはutf-8で内部処理してるから[亜-腕]じゃ漢字の
範囲を捕らえられない。
参照url:http://plaza.rakuten.co.jp/unixmemo/
0867T女の竹田
2006/05/29(月) 14:22:24PerlはPHPのようなローカルエンコーディング対応正規表現はないから、
昔のJPerlを引っ張り出してくるか、そうじゃなければutf8でやるしかないよ。
↓こんな感じ。
use encoding 'euc-jp', STDOUT => 'shift-jis';
use Encode;
$j = "ここが漢字です。abcここカタカナ。";
if ( $j =~ m/([\x{4e00}-\x{9fff}]+)/ ){
print "漢字 [$1]\n";
}else{
print "NOT 漢字\n";
}
if ( $j =~ m/([ぁ-ん]+)/ ){
print "ひらがな [$1]\n";
}else{
print "NOT ひらがな \n";
0868T女の竹田
2006/05/29(月) 14:24:01あと、use Encode; は余計でした。
0869デフォルトの名無しさん
2006/05/29(月) 14:28:55みたいなのをtreeの図(gifとかpngとかの画像)に変えてくれる
モジュール知りませんか?
S
/\
NP VP
/\ /\
Det N V N
| | | |
The man ate apples
0870デフォルトの名無しさん
2006/05/29(月) 14:32:04S
/\
NP VP
/\ /\
Det N V N
| | | |
The man ate apples
0871デフォルトの名無しさん
2006/05/29(月) 15:09:02GD かな。
0872デフォルトの名無しさん
2006/05/29(月) 15:14:26NLPだね。
図にしてくれるのは見た事が無いな。というか図にしようと思わなかった。
Perlであるかどうかも分からないし、自分でぐぐるしか無いのでは。
0873デフォルトの名無しさん
2006/05/29(月) 15:34:06perlでわざわざ作らんでもgraphvizで一発よ
0874デフォルトの名無しさん
2006/05/29(月) 16:49:270875デフォルトの名無しさん
2006/05/29(月) 16:53:270876844
2006/05/29(月) 21:18:20ん?「ファイルの置かれているパス」?相対パスでなくて絶対パスがいいってこと?
__FILE__が相対パスなら、カレントディレクトリ取ってきて__FILE__をくっつければ?
と適当な回答。
0877デフォルトの名無しさん
2006/05/29(月) 21:37:38アナルほど。__FILE__はカレントディレクトリに対しての
ファイルの位置が得られるんですね。実行ファイルとしての
Perlのモジュールを別のモジュールからrequireしようとして、
そのモジュール内でのrequireに不都合があったんですが、
カレントを取るように書き換えるのがいいみたいですね。
ありがとうございました。
0878デフォルトの名無しさん
2006/05/29(月) 21:38:29>>867
どうもありがとうございます。
なるほど、内部utf-8ですね。ちらっとその情報は見たことがあるのですが、
昔とかわらない感覚でいました。
日本語に問題あればEUCにすればいいだろ、みたいな。はは。
勉強になりました。
0879859
2006/05/29(月) 21:44:01読み込むファイルはsjis。出力もsjisとしたい場合、どうすればよいのでしょうか?
少し調べたときに、ファイル出力は別、というのを見たのですが、、、
これは、思考錯誤している途中のものです。
use encoding 'euc-jp', STDOUT => 'shift-jis';
#use Jcode;
$outfile = "output.txt";
$infile = "input.txt";
#open OUT , '>:encoding(shift-jis)', $outfile or die $!;
#open IN, '<:encoding(euc-jp)', $infile or die $!;
open OUT , '>'. $outfile or die $!;
open IN, '<'. $infile or die $!;
while(<IN>){
if ( $_ =~ m/([ぁ-ん]+)/ ){
# print OUT $_ . "\n";
print $1."\n";
}
}
close(OUT);
close(IN);
0880877
2006/05/29(月) 21:59:19my $path=getcwd() . "/" . __FILE__;
$path=~s/[^\/\\]+$//;
require $path."jcode.pl";
こうやることにしました
0881T女の竹田
2006/05/29(月) 22:15:53文字境界とかの問題のためにEUCを使うつもりだったけど
実際にはSJISが扱えればいい、ということであれば
use open ':encoding(shift-jis)';
use encoding 'shift-jis';
で、ソースの文字コードもファイルの読み書きも標準入出力もSJISで行けるよ。
あと、Windowsの話ならshift-jisよりcp932のほうが安全だと思う。
0882デフォルトの名無しさん
2006/05/29(月) 22:21:04分かってないならuse encodingは使わないほうがいいよ。
#メンテナの人は非推奨だってさ
それはそれとしてサンプルでおかしいのは
open IN, '<:encoding(euc-jp)', $infile or die $!;
の部分かと。shiftjisのファイルを開くなら
open IN, '<:encoding(shiftjis)', $infile
でしょう。ついでに余計なお世話を言うと、
WindowsなファイルならCP932にしたほうが幸せになれるかもしれません。
0883デフォルトの名無しさん
2006/05/29(月) 22:32:52use strict;
use warnings;
use utf8;
my $idx = 0;
$_ = "漢字カナ混じりの文章で試してみる";
while (m/\p{IsHiragana}+|\p{IsKatakana}+|\p{InCJKUnifiedIdeographs}+/g) {
print ++$idx, ": $&\n";
}
とかやると、漢字、ひらがな、カタカナの切り分けができる。
漢字はJIS X 0208のだけとかできないけど(がんばれば可能)、
まあ実用上問題になることも少ないんじゃないかと。
詳しくは perlunicode を参照してちょ。
0884879
2006/05/29(月) 23:09:29みなさん、ありがとうございます。
過去のレスにあった、
use encoding "cp932";
use open ":encoding(cp932)";
use open ":std";
でうまくいけそうです。それで、cp932とかたくさん書いてあったんですね。
今、基本的にWindowsなので、sjisで書こうと思っています。
でも、utf8のほうが問題が少なくなるとか、後が楽なら、それもよいと思うのですが、
みなさんはutf8は結構使っているのでしょうか?
どうもutf8とか慣れて無くて、、、
0885デフォルトの名無しさん
2006/05/29(月) 23:25:48共通化したモジュールを作ったのですが、parのために他のディレクトリからいつもコピーしています。
面倒なので、use libで相対パス指定しようと思ったのですが、
use lib '..\common';
use CheckData;
こんな感じ。
parでexe作成したものだとモジュールを読んでくれないのですが、
何が問題なのでしょう。-a CheckDataで指定しても駄目だし。
私のuse libの使い方とか認識が間違っていると予想。
言いたいこと伝わるかな〜。
0886デフォルトの名無しさん
2006/05/29(月) 23:47:02使ったことないからわかんないけど、
use lib '../common';
とかじゃダメかな?
0887デフォルトの名無しさん
2006/05/30(火) 00:43:10遅レスだが、
use FindBin;
$path=$FindBin::Bin . '/' . __FILE__;
の方が良くないか?
モジュールとスクリプトをどうしても別ディレクトリにしたい
ってのなら別だが。
0888デフォルトの名無しさん
2006/05/30(火) 01:12:47foo.plというスクリプトがあって、それが同じディレクトリにあるjcode.plをrequireしてる。
bar.plというスクリプトはfoo.plをrequireしたい。bar.plの実行は任意のディレクトリで行われる。
/foo/foo.pl
/foo/jcode.pl
/bar/bar.pl
/test において実行
>>880はfoo.plのことです。
カレントディレクトリがどこであろうと、foo.plがjcode.plをrequireできるようにしたい。
であるなら、モジュール内においてカレントディレクトリをチェックしなくてはならないかなと。
0889883
2006/05/30(火) 01:39:40use encoding 使うなら(882も云ってる通りお勧めしないけど)、内部的には
変換されてるんで、\p{} プロパティも問題なく使えるよ。
CJK領域からJIS (0208)と重なる分を抜き出して定義するのはちと
手間かもしれんが。
0890デフォルトの名無しさん
2006/05/30(火) 02:53:550891887
2006/05/30(火) 08:13:35__FILE__なんて書いたから真意が伝わらなかったか?
単に趣味の問題のお話しなんだ。
##/foo/foo.pl
#!/usr/local/bin/perl -w
use FindBin ;
#use lib $FindBin::Bin ;
#require 'jcode.pl' ;
require $FindBin::Bin . '/' . 'jcode.pl' ;
print 'foo.pl' .
0892887切れてもた。
2006/05/30(火) 08:14:57##/foo/jcode.pl
#!/usr/local/bin/perl -w
print 'jcode.pl' . "\n" ;
##/bar/bar.pl
#!/usr/local/bin/perl -w
use lib '/絶対パス/foo' ;
#use FindBin ;
require 'foo.pl' ;
print 'bar.pl' . "\n" ;
print $FindBin::Bin . "\n" ;
それとも俺、完全に読みちがえてる?
0893885
2006/05/30(火) 08:25:40レスありがとう。
駄目でした。
今のところ、致命的なものではないので、バッチファイルを使って、
コピー、コンパイル、削除、という形にしようかなと思っています。
0894デフォルトの名無しさん
2006/05/30(火) 09:21:46$ cat ~/foo/foo.pl
#!/usr/bin/perl
use FindBin;
print "---- foo.pl ----\n";
print "__FILE__ = ".__FILE__."\n";
print "FindBin::Bin = $FindBin::Bin\n";
print "FindBin::Script = $FindBin::Script\n";
print "FindBin::RealBin = $FindBin::RealBin\n";
print "FindBin::RealScript = $FindBin::RealScript\n";
$ cat ~/bar/bar.pl
require "$ENV{HOME}/foo/foo.pl";
$ perl ~/bar/bar.pl
---- foo.pl ----
__FILE__ = /home/Administrator/foo/foo.pl
FindBin::Bin = /home/Administrator/bar
FindBin::Script = bar.pl
FindBin::RealBin = /home/Administrator/bar
FindBin::RealScript = bar.pl
という具合にFindBinはrequireされた場合を考慮してくれません。使い方間違ってるかもしれませんが・・・
あるモジュールをrequireするには (1)絶対パス (2)カレントディレクトリに対する相対パス
のどちらかが必要ですよね。__FILE__なら、require時においてモジュール自身がどう指定されたのか、
そのパスが取得できます。
よく考えてみたら、カレントディレクトリを取得しなくても
require sub{$_=__FILE__;s/[^\/\\]+$//;$_}->()."jcode.pl";
foo.plにおいてこれで、絶対パス、相対パスのどちらにも対応できたっぽいです。
0895デフォルトの名無しさん
2006/05/30(火) 10:17:35知っているわけだからuse libしとけばいいはなしで、そんなしちめんどくさいことを
するのは無駄にしかみえないわけだが。
0896844
2006/05/30(火) 11:14:38まあ、ちょっと汎用的に作りたかったとかそういう理由じゃないかね。
毎回use lib→requireして使うライブラリより、require一発で取り込めるようにしたかった。今は反省している。とかそんな理由では。
0897デフォルトの名無しさん
2006/05/30(火) 12:06:09/usr/local/lib/...../jcode.pl が呼びだされてないかどうか
心配なら、%INC, @INC のチェックをしてみればいいだけの事。
0898デフォルトの名無しさん
2006/05/30(火) 12:48:45>〜/foo/foo.pl で、require 'jcode.pl' ;すればいいだけの話では?
それだと、>>888の問題を解決できないでしょ。
jcode.plは 〜/foo/jcode.pl に存在してて、〜/fooにはパスが通ってないから、
require 'jcode.pl'; ではファイルが見つからないエラーになるか、
/usr/local/lib/...../jcode.pl が取り込まれるはず。
0899897
2006/05/30(火) 13:14:04もしかして環境依存なの?
solaris / OSX で確認。
0900デフォルトの名無しさん
2006/05/30(火) 17:40:07/bar/bar.pl の中で use lib qw( /PATH/foo ) ; してない?
それしてるんだったら、897 は正しい。してなくて
require '/PATH/foo/foo.pl' ; だと 898 が正しい。
流れを読むと、質問者は「/bar/bar.pl の中で
use lib qw( /PATH/foo ) ;」はしない方向。で、答はでてる。
俺だったら、/bar/bar.pl の中で use lib qw( /PATH/foo ) ; する。
0901デフォルトの名無しさん
2006/05/30(火) 17:49:080902デフォルトの名無しさん
2006/05/30(火) 18:08:10横入りごめん。
前から気になってたんだけど、なんでそういうところでqw使うの?
0903デフォルトの名無しさん
2006/05/30(火) 18:20:06横レス
俺は癖…てのは冗談で lib を複数指定するときに
use lib ( '/foo', '/bar', '/piyo' ) ;
ってやるよりは
use lib qw( /foo /bar /piyo ) ;
ってやった方が可読性がいいから
ま、すきずき
0904デフォルトの名無しさん
2006/05/30(火) 18:20:27パスが増えた時に備えてでしょ
0905デフォルトの名無しさん
2006/05/30(火) 18:21:400906デフォルトの名無しさん
2006/05/30(火) 19:03:09Thx. その答えだとおかしい例がたまにあるけどそういうのはわかってないでやってる奴なんだろうな。。。
0907デフォルトの名無しさん
2006/05/30(火) 19:21:12ダブルクォート全然要らないじゃんっていう。
0908デフォルトの名無しさん
2006/05/30(火) 19:27:19そりゃ、駄目だろうね。
lib.pm の認識も間違っていそうだけど、parに関しても間違ってるみたいだから。
exe作成したものがモジュール読まないってのも認識違いで、885の場合だと
カレントディレクトリ相対で ..\common , アーカイブ内の順で捜してくれる。
とりあえず、par(むしろpp)を読む事を薦めとく。
perlコード部分だけでもね。
それが面倒なら、何も考えずに site/lib にでもモジュールを放りこめば?
(site/lib を使いたくないなら、perlrunでも読むといいよ)
0909デフォルトの名無しさん
2006/05/30(火) 19:36:51文字列じゃないと嫌だったとかいう理由では?
my $hoge = \@_; # $hoge はリファレンス
&foo("$hoge"); # "$hoge" は文字列
みたいな。
0910デフォルトの名無しさん
2006/05/30(火) 19:57:560911デフォルトの名無しさん
2006/05/30(火) 21:59:210912デフォルトの名無しさん
2006/05/30(火) 22:06:460913デフォルトの名無しさん
2006/05/30(火) 22:14:27お前今度から語尾は ごめんなさい な
0914デフォルトの名無しさん
2006/05/30(火) 23:11:360915デフォルトの名無しさん
2006/05/30(火) 23:23:36エディターとかじゃなくて、モジュールなのな?
0916デフォルトの名無しさん
2006/05/30(火) 23:27:52はいそうです
エディタは着色機能のあるTeraPadを使っています
0917885
2006/05/31(水) 00:33:35レスTHANKSです。
今のところ、頻繁に書き換えているので、site/libには入れないつもりです。
でも、そういう考え方もあるのは考えていませんでした。
parを少し見てみました。すらすら読めないので時間がない。。。
見たエラーは書いて有りました。
やっている動作は想像つきそうだし、勉強ついでにあとで見てみることにします。
0918デフォルトの名無しさん
2006/05/31(水) 00:44:36モジュールではないが、perltidyの-htmlオプションとか。
ttp://perltidy.sourceforge.net/
ttp://perltidy.sourceforge.net/Conf.pm.html (htmlの出力例)
0919デフォルトの名無しさん
2006/05/31(水) 00:54:080920デフォルトの名無しさん
2006/05/31(水) 01:21:44ワーニング ×
ウォーニング ○
0921デフォルトの名無しさん
2006/05/31(水) 02:03:53普通の方法ではインストール出来ません
有名なインストール方法は何なのでしょうか?
0922デフォルトの名無しさん
2006/05/31(水) 02:41:35ActiveStateからダウンロードできなくても、
CPANでppmのレポジトリが見つかることがあるぞ
今のとこは、これでいけるはず
C\>ppm install http://theoryx5.uwinnipeg.ca/ppms/GD.ppd
ちゃんと自分でCPANを探して、上のURLが正しいことを確認してね
2chに書かれたURLを軽々しく信用するやつはいないと思うが念のため
0923デフォルトの名無しさん
2006/05/31(水) 03:49:34ありがとうございます
『CPANのppmレポジトリ』というのはどこにあるんでしょうか?
すみません…CPANの中を結構探してるんですが見つからなくて…
0924デフォルトの名無しさん
2006/05/31(水) 11:46:36print "Exists\n" if exists $hash{$key};
print "Defined\n" if defined $hash{$key};
0925デフォルトの名無しさん
2006/05/31(水) 11:55:08definedだとキーが存在して値がundefなのかキーがそもそも
存在しないのかが区別できない。
existsは値に関係なくハッシュにそのキーが存在するか
どうかを返す。
%hash = (
a => 1,
b => undef,
# キー 'c'は存在しない
);
foreach my $key (qw(a b c)) {
print "key=$key\n";
print "Exists\n" if exists $hash{$key};
print "Defined\n" if defined $hash{$key};
}
とかしてみればわかるかな。
0926デフォルトの名無しさん
2006/05/31(水) 12:00:470927デフォルトの名無しさん
2006/05/31(水) 12:01:32インストール ○
インストロール 玄人
>>924
exists は$hashの中の$keyが存在するか調べる。
defined は$hash{$key}が返した結果がundefかどうか調べる。
内部処理的にはexistsのほうが無駄がなさそう。
0928927
2006/05/31(水) 12:03:12>definedだとキーが存在して値がundefなのかキーがそもそも
>存在しないのかが区別できない。
あっ、確かに。いい事しった。
0930デフォルトの名無しさん
2006/05/31(水) 22:34:53教えていただきたいことがあります。
csvやtabular形式のファイルがあり、
内容は50〜5000行程度、
一列目のkey名から2列、3列目を検索とさせるツールを探しています。
読み込むファイル数はだいたい2から5程度。
一般的に何を使用すればよいのでしょうか。
うーん、5000行程度なら読んでメモリに保持しても問題ないのかな。
File::TabularというのをCPANから取ったのですが、マイナーっぽいし、
cp932のコードで使うときに、エラーが起きてしまって諦めました。
sjisだと問題ないんだけど、なんでだろ。
(本当は対処法を調べられる実力があればいいのですが)
もっとメジャーな物はあるはず、ということで、どなたか教えて頂けるとうれしいです。
0931デフォルトの名無しさん
2006/06/01(木) 00:00:400932デフォルトの名無しさん
2006/06/01(木) 00:33:245000行程度ならまず平気でしょう。その判断は当然、レコード長と実行環境によります。
CPAN の Data::Table なんてのもありますけど、使ったことないんでなんとも。
0933930
2006/06/01(木) 01:55:23返事、ありがとうございます。
検索して、少し見てみました。
Text::CSV_XSは、MANUALを見た限り指定行を指定文字列で検索できなさそう。
でも、excelとかのデータを扱うときに便利そうですね。メモしておきます。
Data::Tableは複雑そう。検索するだけの、すぐ動かなくていいから簡単なサンプルだれか持ってないかな。
やりたいのは、ファイルを一括で読んでくれて、
タブで区切られたフィールドがあり(データにタブが入ることが無いデータ、"で囲むなども無し)、
f1f2f3
A001appleりんご
A002pineぱいなっぷる
こんなの(\t区切り)。一行目は、検索のために必要ならおいてもいいし、置かなくてもいい。
探しているのは、第一列のフィールドを検索(A002)して、その行の2,3のフィールドを取得できるもの、という簡単なものです。
第一列のフィールドからだけ検索出来ればOK。
1データ、だいたい、1KB - 6KBぐらいのファイルサイズ。
みんな自分で作るのかな。
キャッシュやインデックスのディレクトリなどを作成してもよいので、
簡単なインデックスを作成して読み込みが早くなるような物ってないものでしょうか。
まあ、無くてもどっちでもよいのですが、誰か作ってないのかな。
適当に書いてみるけど、
タイムスタンプ保持、その比較、なければインデックス作成、インデックスは、アルファベット順に並べた第一フィールド、
行番号があって、効率よい検索して行番取得、指定ファイル行だけを読み込み、って感じ。ここらへん専門じゃないので突っ込みは無しね。
でも、たいしてデータないときは速くならなくて、かえって遅くなるのかな〜。
まあ、速度は重要じゃなくて、
簡単なのがないかなー、と。
0934デフォルトの名無しさん
2006/06/01(木) 02:23:480935デフォルトの名無しさん
2006/06/01(木) 02:33:34my %data = join("", <DATA>) =~ /^(.+?)\s+(.+)$/mg;
とかでハッシュに全部読み込んでから処理するのが一番楽で速いんじゃ?
0936デフォルトの名無しさん
2006/06/01(木) 02:34:070937デフォルトの名無しさん
2006/06/01(木) 03:57:07俺とお前の他にも結構いると思う。
0938デフォルトの名無しさん
2006/06/01(木) 04:21:58「新記録?」と自慢してまわる人がいるそうです。
0939デフォルトの名無しさん
2006/06/01(木) 04:23:290940デフォルトの名無しさん
2006/06/01(木) 05:04:460941932
2006/06/01(木) 05:14:44うんよしわかった、いいからまず書いて。
自前で実装しても全然大したコード量にはならないから練習がてら書いてみてくださいな。
それと、「突っ込みは無しね」なんてのは議論の上で重要な項目とそうでない項目が峻別できる水準にある人同士でのみ意味を持つんです。
「わからないので教えて」という人がそれを使った場合、
「ぼくのアイデアに対して否定的なことは言わずに、ぼくが気分良く採用できる実装だけをください」
と言っているに等しいので、どう見ても "回答者避け" にしか見えません。気をつけましょう。
あとね、とりあえず紹介したモジュールのドキュメントくらいは、役に立つかどうか判断できる程度に眼を通して欲しいなと思ったりする…orz
0942933
2006/06/01(木) 06:02:48少し甘えていました。ごめんなさい。
とりあえず自分で調べてみます。
0943933
2006/06/01(木) 06:16:18ありがとうございます。
perlって、こういうやり方が有効なんだとはっとさせられます。
もう少しperlの癖や常識みたいなのを身につけようと思います。
0944デフォルトの名無しさん
2006/06/01(木) 07:58:19ハッシュを使えば済む話でした。すみません、無駄な長文書いてしまって。
0945デフォルトの名無しさん
2006/06/01(木) 12:43:12<10万行の \S+\t\S+ なファイルを読みこんだ場合の
ハッシュにするまでの速度。>
-- my %hash = map { chomp; split/\t/, } <> ;
1.71s user 0.22s system 93% cpu 2.067 total
-- my %hash = split /[\t\n]+/, do { local $/ ; <> } ;
1.05s user 0.12s system 95% cpu 1.227 total
-- my %hash = join("", <>) =〜 /^(.+?)\s+(.+)$/mg;
3.04s user 0.30s system 94% cpu 3.540 total
0946デフォルトの名無しさん
2006/06/01(木) 12:44:460947デフォルトの名無しさん
2006/06/01(木) 19:52:39勉強になったけど >>933 は \S+\t\S+\t\S+ だから split じゃだめじゃね?
0948デフォルトの名無しさん
2006/06/01(木) 20:42:07↑これが鳥に見える俺
0949デフォルトの名無しさん
2006/06/01(木) 21:15:510950デフォルトの名無しさん
2006/06/01(木) 21:20:34確かに言われてみれば・・・
やっぱねーな
0951デフォルトの名無しさん
2006/06/01(木) 21:33:33933 対応版(敗北宣言)
10万行の ^\S+\t\S+\t\S+$ なファイルを読みこんだ場合の
ハッシュにするまでの速度。
1. my %hash = map { chomp; split/\t/, $_, 2 } <> ;
1.73s user 0.23s system 92% cpu 2.115 total
2.1. my %hash = do { local $/ ; <> } =〜 /^(.+?)\s+(.+)$/mg ;
2.43s user 0.21s system 91% cpu 2.869 total
2.2. my %hash = map { split /\t/, $_ , 2} split /\n/, do { local $/ ; <> } ;
1.46s user 0.16s system 92% cpu 1.752 total
945 の 2 はストレートに split できませんですた orz...
0952デフォルトの名無しさん
2006/06/02(金) 00:08:10while (<>) {
chomp;
my ($key, @fields) = split /\t/;
$hash{$key} = \@fields;
}
これだとハッシュの値には配列リファレンスが入ってスマートかつ高速。
ハッシュ格納前提だとアロケートサイズも最小限、だと思う。ヒネりはないけどなあ。w
0953デフォルトの名無しさん
2006/06/02(金) 00:48:12それだと、たしかに一番早かった。
行毎の処理なら、普通がー番って事だな。
0954デフォルトの名無しさん
2006/06/02(金) 01:40:39検証あいがと。
正直なんつーかこう、巨大な一時リストを作業用に展開して丸ごとコピー、とか抵抗あんだよね。
貧乏性は治らないらしい。^^;
0955デフォルトの名無しさん
2006/06/02(金) 02:02:41…もしかして、俺の上司?
0956954
2006/06/02(金) 02:53:27たぶん上司殿じゃないと思ふが。上司殿によろしく。w
でもアロケートやらコピーってのは、ディスク I/O やサブプロセス起動ほどには高価じゃないけれど、単なる主記憶の読取ほどには安価じゃないわけで。
だから本質的に不要な場所でそういった操作が大量発生するコードってのは、やっぱり筋が悪く見えちゃうんだろう。
0957デフォルトの名無しさん
2006/06/02(金) 04:11:34それなら1億行でも
log(100000000) / log(2) * 2
程度のseekで抽出できるので恐らく実行時間は0.1秒以内のはず。
自分で関数を作っても50行以内のはず。
0958デフォルトの名無しさん
2006/06/02(金) 07:44:570959デフォルトの名無しさん
2006/06/02(金) 07:54:48ソートしてバイナリサーチするの?
0960デフォルトの名無しさん
2006/06/02(金) 08:39:36>一列目のkey名から2列、3列目を検索とさせるツールを探しています。
ごめんここ読み落としてたorz
忘れて。
0961951=953
2006/06/02(金) 12:02:03これでこの件を引きずるのは終りにしますので、「判りきったこと書くな」
という先輩諸氏は御勘弁を。
夜中にやった(>>593)のは
- マシンが違う。
- @_ = split/\t/, $_ ; $_[0], [$_[1], $_[2]]
つーことで、マシンを同じにして
my ( $var, @arr) = split/\t/, $_ ; $var, \@arr
の条件にてもいっぺん検証。
1. >>952 の while 及び for / map でもほぼ同じ結果。
4.33s user 0.27s system 91% cpu 5.051 total ( foreach, map も )
2. my %hash = map { chomp; my ( $var, @arr) = split/\t/, $_ ; $var, \@arr } <> ;
4.57s user 0.42s system 91% cpu 5.463 total
3. my %hash = map { chomp; @_ = split/\t/, $_ ; $_[0], [$_[1], $_[2]] } <> ;
5.91s user 0.44s system 94% cpu 6.713 total
4. my %hash = map { my ( $var, @arr ) = split /\t/, $_ ; $var, \@arr} split /\n/, do { local $/ ; <> } ;
2.54s user 0.26s system 93% cpu 2.983 total
5. my %hash = map { @_ = split /\t/, $_ ; $_[0], [$_[1], $_[2]]} split /\n/, do { local $/ ; <> } ;
5.32s user 0.35s system 94% cpu 6.012 total
0962デフォルトの名無しさん
2006/06/02(金) 16:51:27いちいち opendir してみなきゃいけないの?
0963デフォルトの名無しさん
2006/06/02(金) 17:02:53@list = glob "*" ;
0964デフォルトの名無しさん
2006/06/02(金) 17:10:560965デフォルトの名無しさん
2006/06/02(金) 17:12:210966デフォルトの名無しさん
2006/06/02(金) 17:26:34「UNIX のグロブ展開を利用するから、カレントのファイル数が
膨大だった場合最後までリスト化出来ない可能性がある。」
(引数が多すぎますエラーが起こる可能性がある。)と習ったし、
別意見として
ttp://www.ipa.go.jp/security/awareness/vendor/programming/a04_02_main.html
なのもある。
File::Glob は使ってない。ので判らん。すまぬ。
0967デフォルトの名無しさん
2006/06/02(金) 17:43:34前バージョンの常識すら疑ってかかるべき。
0968966
2006/06/02(金) 17:45:51引数が多すぎエラーは perl 5.005 以下のみ発生するみたいね。
ttp://www.jp-z.jp/perlmemo/file_globlimit.html
習った時代が古かった orz...
0969デフォルトの名無しさん
2006/06/02(金) 17:47:280970デフォルトの名無しさん
2006/06/02(金) 18:29:10まあ、不安なら opendir 使って関数自作すりゃいい。
0971デフォルトの名無しさん
2006/06/02(金) 18:31:33File::Slurpのread_dirとか。
0972デフォルトの名無しさん
2006/06/02(金) 19:00:44まあ、ひとつ筒-dすれ。
0973デフォルトの名無しさん
NGNG0974デフォルトの名無しさん
2006/06/02(金) 19:12:02ファイルコピーをしようとおもいます。
どんなやり方がスマート?
で、
大きすぎるときは、
最後の1000行ぐらいをファイル作成しようと思っています。
これは、やり方がよくわかりません。
0975デフォルトの名無しさん
2006/06/02(金) 20:14:44my @ring;
my $n;
open(my $fh, "unko.log");
open(my $fh_, "last100ls.log");
while(my $L = <$fh>) {
$n = 0 if $n == 100;
$ring[$n++] = $L;
}
print $fh_ (@ring[$n..$#ring], @ring[0..($n-1)]);
ファイルのコピーはFile::Copyってのがあったと思うからそいつを使ってやると良い。
0976デフォルトの名無しさん
2006/06/02(金) 20:23:290977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
2006/06/02(金) 21:17:020979デフォルトの名無しさん
2006/06/02(金) 22:37:02頭から全部読むのが問題なほど大きいのならFile::ReadBackwardsで後ろから読む手もある。
次スレか。テンプレについて提案。
過去ログのところhttpをttpに変えて一レスに纏めない?
0980デフォルトの名無しさん
2006/06/02(金) 23:14:41>過去ログのところhttpをttpに変えて一レスに纏めない?
いいと思う。まあ、最終決定はスレ立てる人がどうぞ。
0981デフォルトの名無しさん
2006/06/02(金) 23:19:000982デフォルトの名無しさん
2006/06/02(金) 23:20:460983デフォルトの名無しさん
2006/06/02(金) 23:23:32http://pc8.2ch.net/test/read.cgi/network/1148743901/l50
0984デフォルトの名無しさん
2006/06/02(金) 23:27:440985979
2006/06/02(金) 23:33:37準備やってたらごめん
0986デフォルトの名無しさん
NGNG次スレ
http://pc8.2ch.net/test/read.cgi/tech/1149259409/
0987デフォルトの名無しさん
2006/06/02(金) 23:51:370988デフォルトの名無しさん
2006/06/03(土) 00:29:18テンプレートファイルをうまくデバッグする方法はありませんか。
テンプレートに誤りがあるときのエラーメッセージ
は決まって "Bad file descriptor at ..."であり、
テンプレート修正の手がかりになりません。
0989974
2006/06/03(土) 00:40:31ありがとーです。
全部試してみます。
1MB程度だから、975さんので問題ないのかな。
File::ReadBackwardsもよさげ、というか、こういうの標準でありそでないのかー。
0990デフォルトの名無しさん
2006/06/03(土) 02:16:330991デフォルトの名無しさん
2006/06/03(土) 02:17:050992デフォルトの名無しさん
2006/06/03(土) 02:26:240993デフォルトの名無しさん
2006/06/03(土) 02:51:470994デフォルトの名無しさん
2006/06/03(土) 03:16:380995デフォルトの名無しさん
2006/06/03(土) 04:15:320996デフォルトの名無しさん
2006/06/03(土) 04:34:410997デフォルトの名無しさん
2006/06/03(土) 05:57:040998デフォルトの名無しさん
2006/06/03(土) 09:20:00正確に言えば、まともなプログラマはみんなRubyに流れちゃって、
自分が書いたコードの効率もろくに把握できていないようなアホだけが
未だにぶら下がっている・・・っていう、ある意味過疎より酷い惨状だけど。
0999デフォルトの名無しさん
2006/06/03(土) 09:45:033年前の状況としてなら賛成。
1000デフォルトの名無しさん
2006/06/03(土) 09:50:5910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。