Perlについての質問箱 20箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/11/06(日) 23:13:31"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
● 2005/03/17現在の最新版: 5.8.7
● 2005/03/17現在の開発版: 5.9.2
リンク集は>>2-3
過去スレは>>4-5
0002デフォルトの名無しさん
2005/11/06(日) 23:14:26Perlプログラミング講座: 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/4873110378/
[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.7/
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://search.cpan.jp/
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0003デフォルトの名無しさん
2005/11/06(日) 23:15:51CPAN.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デフォルトの名無しさん
2005/11/06(日) 23:16:331 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/
0005デフォルトの名無しさん
2005/11/06(日) 23:17:0911 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/1131286411/
0006デフォルトの名無しさん
2005/11/06(日) 23:20:29http://pc8.2ch.net/test/read.cgi/tech/1126977805/
の間違いかな
0007デフォルトの名無しさん
2005/11/06(日) 23:21:02ごめんやっちまった。
0008デフォルトの名無しさん
2005/11/07(月) 04:19:330009デフォルトの名無しさん
2005/11/07(月) 04:21:200010デフォルトの名無しさん
2005/11/07(月) 11:14:170011デフォルトの名無しさん
2005/11/07(月) 11:51:39言葉に刺激が欲しくてつい言っちゃうんだよね、馬鹿はw
0012デフォルトの名無しさん
2005/11/07(月) 16:03:51おいおい日本語大丈夫か・・・
空主語文に何いってんだが・・・
0013デフォルトの名無しさん
2005/11/07(月) 16:22:46「(ここには)厨しかいないのかよ」
0014デフォルトの名無しさん
2005/11/07(月) 17:06:570015デフォルトの名無しさん
2005/11/07(月) 18:01:020016デフォルトの名無しさん
2005/11/07(月) 19:22:42の割には、こじつけることもできなくなってるみたいだけど
0017デフォルトの名無しさん
2005/11/07(月) 19:27:11本当にありがとうございました
0018デフォルトの名無しさん
2005/11/07(月) 21:59:420019デフォルトの名無しさん
2005/11/07(月) 22:32:14ことでしょうか?perl5で書いたソースが動かなくなるといった感じですか?
0020デフォルトの名無しさん
2005/11/07(月) 22:34:54Perl 6は今世紀中にはでないから安心汁
0021デフォルトの名無しさん
2005/11/07(月) 22:37:380022デフォルトの名無しさん
2005/11/07(月) 22:42:46このスレは過去スレ貼り間違えるし同じ奴の仕業か?
一度ならず二度三度死ねよ能無しが。
0023デフォルトの名無しさん
2005/11/07(月) 23:00:520024デフォルトの名無しさん
2005/11/07(月) 23:36:020025デフォルトの名無しさん
2005/11/07(月) 23:40:210026デフォルトの名無しさん
2005/11/08(火) 00:18:16what do u mean?
0027デフォルトの名無しさん
2005/11/08(火) 01:35:220028デフォルトの名無しさん
2005/11/08(火) 03:13:380029デフォルトの名無しさん
2005/11/08(火) 04:18:31を実行すると
You have an empty /home/teppei/.cpan/sources/MIRRORED.BY,
I'm trying to fetch one
LWP not available
CPAN: Net::FTP loaded ok
Fetching with Net::FTP:
ftp://ftp.perl.org/pub/CPAN/MIRRORED.BY
Timeout at /usr/lib/perl5/5.8/Net/FTP.pm line 503
でとまっちゃうよ
なんでだろ。
PASVじゃないのかな。
0030デフォルトの名無しさん
2005/11/08(火) 06:51:55対象の鯖が死んでる可能性も。
cpan
o conf init
で再設定してみては。
0031デフォルトの名無しさん
2005/11/08(火) 14:16:320032デフォルトの名無しさん
2005/11/08(火) 15:00:13ぶっちゃけ金玉の方が良かった。
0033デフォルトの名無しさん
2005/11/08(火) 15:40:49のようにした時、「0」という名前のファイルがあると
$nameが"0"になるにも関わらず、whileが終了しないのは
どうしてなのでしょうか?
0034デフォルトの名無しさん
2005/11/08(火) 15:44:09すりゃ分かる
0035デフォルトの名無しさん
2005/11/08(火) 15:55:22終了するよ
0037デフォルトの名無しさん
2005/11/08(火) 16:37:05print %$test;
sub abc {
my($hash) = @_;
$hash->{'DEF'} = '456';
}
とする場合、"DEF456"と出力されればいいんですが、されません。
最初に
$test->{'ABC'} = '123';
などと初期化しておけば良いのですが、この他にも初期化方法はありませんでしょうか
0038デフォルトの名無しさん
2005/11/08(火) 16:41:450040デフォルトの名無しさん
2005/11/08(火) 16:54:01初期化なら $test = {};
0042デフォルトの名無しさん
2005/11/08(火) 22:04:13のやりかたが良く分かりません。
例えば、
「C100,D125,A12,A2,C5,D2」
と言うデータを
「A2,A12,C5,C100,D2,D125」
のようにソートしたいのですが、
数値の昇順、降順ソートである<=>を使用すると
ソートされず(1文字目が文字だから?)
文字の昇順、降順ソートであるcmpを使用すると
「A12,A2,C100,C5,D125,D2」
とソートされます。(文字扱い)
どうすれば良いのでしょうか・・
0043デフォルトの名無しさん
2005/11/08(火) 22:21:04@example = qw( C100 D125 A12 A2 C5 D2 );
@sorted =
map { $_->[2] }
sort { $a->[0] cmp $b->[0] or $a->[1] <=> $b->[1] }
map { [/^(.)(.*)/ , $_] } @example;
後ろのmapの無名配列は [ "C", "100", "C100" ] みたいなデータになる
sort { ... } の ... の戻り値で入れ替えを判断するから1項目($a->[0] cmp $b->[0])が偽(=cmpで0=同値)だった場合orや||で次の判断基準を書く
基本的な構成は「シュワルツ変換」っての
0044デフォルトの名無しさん
2005/11/08(火) 23:26:36$foo = "bar";
func($foo);
→$foo = "ba" # 一番最後のrを削除
$foo = "hoge hoge ";
func($foo);
→$foo = "hoge hoge" # 一番最後のスペースを削除
みたいな。
0045デフォルトの名無しさん
2005/11/08(火) 23:34:15chop
0047デフォルトの名無しさん
2005/11/09(水) 07:24:31じゃなかたっけ?
0048デフォルトの名無しさん
2005/11/09(水) 07:25:58今回はchopが正解
0049デフォルトの名無しさん
2005/11/09(水) 07:27:39http://www.rfs.jp/sitebuilder/perl/05/func/chomp.html
http://www.rfs.jp/sitebuilder/perl/05/func/chop.html
0050デフォルトの名無しさん
2005/11/09(水) 09:44:01readdirについても行入力演算子同様whileの条件の中で単独で使われたときの
暗黙のdefinedが有効になってるということだと思うけど、これについてマニュアルに
書いてありますかね? かなり探したけどみつけられなかった。
0051デフォルトの名無しさん
2005/11/09(水) 22:18:28環境は ActivePerl 5.8.6 811 です。
今、threadsを使ったサーバを書いていて1クライアントごとに1スレッド割り当てています。
スレッド数は10までで制限をかけて、それを超える接続はキューに入れてまたせています。
同時に100クライアントが接続して来た場合に10スレッド平行で処理して、
クライアントとの通信が終了するとスレッドをjoinしているのですが、
メモリが開放されず、仮想メモリの使用量が1Gを超えてしまい困っています。
キューが空になってサーバが暇になるとメモリが一気に開放されているようです。
なんとかスレッドをjoinした時点でメモリを開放したいのですが、GCを動かす方法は
ないでしょうか (sleepはだめでした)。
おとなしくselectを使って1スレッドで処理すべきなのかもしれませんが。
005251
2005/11/09(水) 22:23:54Thread::Pool を使ってスレッドを再利用しようと思ったのですが、
Thread::Tie の test でこけてしまいました。
さらに以下を見ると動かすのが難しそうなのであきらめました。
ttp://www.donzoko.net/doc/memo/perlithreads.html#etc_tie
自前で簡単なスレッドプールを実装しようと思ったのですが、
スレッド間でソケット(GLOB)をshareする方法が分からずに断念しました。
0053デフォルトの名無しさん
2005/11/10(木) 00:20:16スレッド開始前にlistenしておけば各スレッドでacceptできるけど、それじゃ駄目なの?
0054デフォルトの名無しさん
2005/11/10(木) 01:00:54ちょうどよさげなものを見つけた。ただでも遅い処理なんでいちいちdestoryしたくなかった。
http://d.hatena.ne.jp/naoya/20051012/1129115986
0055デフォルトの名無しさん
2005/11/10(木) 09:01:14のような金額の表記を数値にするにはどうしたらよいでしょうか?
0056デフォルトの名無しさん
2005/11/10(木) 09:15:26s/[^0-9]//g
0057デフォルトの名無しさん
2005/11/10(木) 10:33:07$x = '\12,345';
$x =~ tr/0-9//cd;
ぐらいでいいんじゃ。trに慣れてなければs/\D//gでも可。
0058デフォルトの名無しさん
2005/11/10(木) 10:51:08http://namazu.org/~tsuchiya/perl/perl-5.8.html
のとおりにやってみたところ、下記のエラーが出てダメだった。
Parsing of undecoded UTF-8 will give garbage when decoding entities
0059デフォルトの名無しさん
2005/11/10(木) 12:23:35キミは、文字が読めないのかね???
> 未解決の問題
> 日本語を含むコンテンツを HTML::TreeBuilder で処理するには?
> 日本語部分が Unicode の文字実体参照に変換されてしまう.
> :
> as_text() メソッドでの出力は出来るようになった.as_HTML()
> を利用したり, 透過的に処理を行う方法がまだ分からない.
このサイトの作者の言によれば、非常に難しいことであることが解るだろう。
このスレで質問したところで、簡単に回答が得られるわけではない。
HTML::TreeBuilder を誰かが作り直すのを待つか、
キミがHTML::TreeBuilder を作り直すしかあるまい。
0060デフォルトの名無しさん
2005/11/10(木) 13:26:14まともにutf8とかにしないで、日本語部分を適当に英数字のみをつかってエンコードしてから
食わせてやって出てくるものには逆変換かませばなんとかならんかね。
たとえば、eucに直してから0x80〜0xffの範囲を hoge<16進2ケタ> にするとかさ。hogeは
入力中にあらわれない文字列を適当に選んで。
そうすればHTML::TreeBuilderからはなんだかわからないけど長いスペルの英単語にしか見えない
はずなんで、あまり余計なことはされないんじゃないかと。
006159
2005/11/10(木) 15:15:53それがいいかもね。こんな感じかな。
$str = '日本語テキスト';
print "オリジナル $str\n";
$str =~ s/[\p{Han}\p{InHiragana}\p{InKatakana}]/'hoge'.ord($&)/ge;
print "変換後 $str\n";
$str =~ s/hoge([0-9]+)/chr($1)/ge;
print "元に戻す $str\n";
しかし、[\p{Han}\p{InHiragana}\p{InKatakana}]のところは
何とかならんものかな。要するに、マルチバイト文字だけ変換
したいのだが。[^\p{Alphabet}]としてもうまく動いてくれないし。
0062デフォルトの名無しさん
2005/11/10(木) 15:31:08別に、マルチバイト部分だけ変換でなくても全部変換でいいんじゃね?
全部 base64 してあとで全部元に戻すとかさ。
0063デフォルトの名無しさん
2005/11/10(木) 15:49:2116進2ケタという元の案ならこんな感じ。
$str = '日本語テキスト';
print "オリジナル $str\n";
$str =~ s/([^\x00-\x7f])/sprintf "hoge%02x", ord($1)/ge;
print "変換後 $str\n";
$str =~ s/hoge([0-9a-f]{2})/chr(hex($1))/ge;
print "元に戻す $str\n";
>>62
htmlタグまで変換しちゃったら、パースできないんじゃないかと...
0064デフォルトの名無しさん
2005/11/10(木) 17:27:08TreeBuilderのparseでエラーを吐くので、as_HTML()でなくas_text()すら不可能なんすよ。
ActivePerl 5.8.7なんだけど。
0065デフォルトの名無しさん
2005/11/10(木) 17:30:13賢い解答有難うございました、それで行こうと思います。
0066デフォルトの名無しさん
2005/11/10(木) 20:42:10my $result = shift;
をまとめて記述することは出来ないでしょうか?
ハッシュの場合は警告が出るけど %{ $a->b() }->{hoge} で良いみたいなんですが。
0067酩酊 ◆TWARamEjuA
NGNGmy $result = $a->b();
でよさそうな。。。
0068デフォルトの名無しさん
2005/11/10(木) 21:17:44@{[$a->b()]}[0]
は?
0070デフォルトの名無しさん
2005/11/10(木) 21:46:42(my $result,@_) = $a->b() は?
0071デフォルトの名無しさん
2005/11/10(木) 21:48:28すみません、勘違いでした。
wantarrayは自分で設定するフラグじゃないんですね、それなら可能でした。
0073デフォルトの名無しさん
2005/11/11(金) 11:17:36スクリプト最後__END__前によく
1;
って見かけるのですが、これは有っても無くても良い物ですか?
0074デフォルトの名無しさん
2005/11/11(金) 11:39:04モジュールやライブラリなら必須。
モジュールは、真と解釈される値を帰さなくちゃいけないから。
真と解釈されるものならなんでもいいんだけど、普通は1;
普通のプログラムなら無くても大丈夫だけど、俺はそんなの見たこと無いような気が。
0075デフォルトの名無しさん
2005/11/11(金) 11:39:20perlfunc(1)のrequireの項参照。
> 初期化コードの実行がうまくいったことを示すために、ファイルは真を返さなければなりませんから、
> 真を返すようになっている自信がある場合を除いては、ファイルの最後に 1; と書くのが習慣です。
> 実行文を追加するような場合に備えて、1; と書いておいた方が良いでしょう。
ttp://perldoc.jp/docs/perl/5.6.1/perlfunc.pod
0076デフォルトの名無しさん
2005/11/11(金) 12:02:54007773
2005/11/11(金) 12:17:15モジュール化してrequireしまくりたい感じなので
おまじない的に書いておいた方が良い、という事でしょうか。
普通に文法として「1;」の意味が分からずエラーに見えて仕方なかったので気になっていました。
0078デフォルトの名無しさん
2005/11/11(金) 12:32:27外部スクリプトは全てモジュールだと思ってるなら間違いだから。
0079デフォルトの名無しさん
2005/11/11(金) 13:03:13本来はエラーの有無を返すべきものだが、ほとんどの場合はサブルーチンや定数を
定義するだけでエラーなどでようもないので1;と書くだけのことが多い。
0080デフォルトの名無しさん
2005/11/11(金) 17:44:03ActivePerl + Cpan (windows2003 sarver)環境です
perlは
ActivePerl-5.8.3.809-MSWin32-x86.msi を使ってインストールしました。
その他、gzip unzip dmake ftp nctcp のパス及び設定を終えました。
perl -MCPAN -e shell
の後、 install Bundle::CPAN を実行すると
幾つかのファイルをフェッチした後、
The bundle file ".\cpan\Bundle\CPAN.pm" may be a broken 。。。
このエラーで先より進めません。
解決策はあるでしょうか?
どなたかご存知の方、ご教授頂けると幸いです
0081デフォルトの名無しさん
2005/11/11(金) 17:52:580082デフォルトの名無しさん
2005/11/12(土) 19:36:080083デフォルトの名無しさん
2005/11/12(土) 21:49:13ここで検索しよう。
http://find.2ch.net/
0084デフォルトの名無しさん
2005/11/12(土) 23:39:30ユニコードを10進で(すなわち"12360"と)表示させようとしているの
ですが、下のルーチンではうまくいきません。どうすればよろしいでしょうか?
use utf8;
binmode STDOUT, ":encoding(cp932)";
binmode STDERR, ":encoding(cp932)";
binmode STDIN, ":encoding(cp932)";
use open IO => ":encoding(cp932)";
use Encode;
$char = "え";
printf "%s = %d", $char, encode("utf16", "え");
008584
2005/11/12(土) 23:47:52(何れにしても正しい値が出ませんが)
printf "%s = %d", $char, ord(encode("utf16", $char));
0086デフォルトの名無しさん
2005/11/13(日) 00:26:32use utf8してるのでスクリプトはutf8で保存されているとすると
$charにはじめからunicodeで”え"が入っているから
ord($char)
とするだけでいいのではないかと。
0087デフォルトの名無しさん
2005/11/13(日) 01:16:46説明不足ですみません。utf16ユニコードの値が欲しかったのです。
しかし、自己解決できました。
# 特殊文字を2ちゃんねるに貼り付けるためのスクリプト。
my $str = "㋐㋑㋒㋓㋔";
$str =~ s/([^\x00-\x7f])/sprintf "%d;", conv($1)/ge;
print $str;
sub conv{
my $char = shift;
my $charv = encode("utf16", $char);
my $count = 0;
my $code = 0;
while(length $charv){
$byte = ord(chop $charv);
last if $byte == 0xff || $byte == 0xfe;
$code += $byte * 256 ** $count++;
}
return $code;
}
0088デフォルトの名無しさん
2005/11/13(日) 01:53:21いやそれまわりくどいって。84のprint文を
printf "%s = %d", $char, ord($char);
って書き直してやるだけで結果は
え = 12360
だよ。
0089デフォルトの名無しさん
2005/11/13(日) 01:54:49printf "%s = %d", $char, encode("utf16", "え");
↓
printf "%s = %d\n", $char, unpack "n", encode('utf16be', $char);
なぜかordでできなかった。
encodingによる変換をutf16leにして、unpack "v" でも可。
0090デフォルトの名無しさん
2005/11/13(日) 03:40:27sub p
{
print $_[0]->{text}."\n"
}
my @test = ( {'text'=> 'hoge'}, {'text' => 'fuga'} );
p($_) foreach @test; #1
p($test[0]) #2
1の場合はサブルーチンpの中のprintが $_->{text} でもいけるのに
どうして2の場合はキチンと[0]をつけてやらないといけないのでしょうか?
009189
2005/11/13(日) 04:11:30ああ、perlfuncのordの項目にあるUnicodeってUTF-8フォーマットの
ことなのか。道理でutf16に変換したらうまくいかんわけだ。
0092デフォルトの名無しさん
2005/11/13(日) 04:19:38> p($_) foreach @test; #1
> p($test[0]) #2
>
> 1の場合はサブルーチンpの中のprintが $_->{text} でもいけるのに
> どうして2の場合はキチンと[0]をつけてやらないといけないのでしょうか?
え? どう出来たら良いと思ってるの?
0093デフォルトの名無しさん
2005/11/13(日) 04:22:34その関数だと、
p($test[0]) = p(@test)
0094デフォルトの名無しさん
2005/11/13(日) 05:59:52引数はひとつであっても常に@_で送られるはずですよね、だから常に[0]をつけてやらないとダメじゃないかなとか思ってました。
省略できるケースは何なんだろうと思いまして。
0095デフォルトの名無しさん
2005/11/13(日) 08:03:58ハッシュに色々値を放り込むのと、必要な分だけ変数をこさえるのでは、速度とかメモリ使用の違いはあるのでしょうか。
perldocのデータ型読んでもいまいち分からなかったもので。
0096デフォルトの名無しさん
2005/11/13(日) 08:58:04レキシカルな変数でなければ引数として渡さなくても同じ名前の変数が
サブルーチン側でも見えてるというだけの話じゃないか。$_と@_は全くの
別物。
0097デフォルトの名無しさん
2005/11/13(日) 09:21:29http://search.cpan.org/~nwclark/perl-5.8.7/lib/Benchmark.pm
http://search.cpan.org/~dsugal/Devel-Size-0.63/Size.pm
0098デフォルトの名無しさん
2005/11/13(日) 09:45:10あまりそういうことは考えずに素直に書いた方がいいと思うよ。
たいして儲からないのに見難くなるのがオチ。
0099デフォルトの名無しさん
2005/11/13(日) 09:50:42ベンチ取るにもundef混ぜてやればいいのかよく分からないです。方法が間違っていればベンチとっても意味ないと思うし。
>>98
この場合はコードの見易さをとっていいって事ですか?
用途とか、使うときの意味でハッシュに纏めてたりするので、この使い方でいいのかな〜と疑問でした。
0100デフォルトの名無しさん
2005/11/13(日) 11:27:400101デフォルトの名無しさん
2005/11/13(日) 11:33:460102デフォルトの名無しさん
2005/11/13(日) 11:35:200103デフォルトの名無しさん
2005/11/13(日) 11:50:12むしろ、Encodeの使い方とユニコードの事を間違えてる。
ユニコード,UCS-2,UCS-4とutf8,utf16の混同が一つ。
encodeの出力は単なるバイト列で、決してユニコードにならない事が一つ。
$utf8=encode('utf8',$unicode); # ユニコード文字列からUTF8バイト列に
$unicode=decode('utf8',$utf8); # UTF8バイト列からユニコード文字列に
例えば、"え"の場合length $unicodeは1でlength $utf8は3,
ord $unicodeは12360でord $utf8は227になる。
>>100
s/PATTERN/$&/g とか scalar(()=m/PATTERN/g) とか...
0104デフォルトの名無しさん
2005/11/13(日) 13:30:32前者(s///g)は$&を使っても括弧と$1を使っても結局ものすごく遅くなるから、
後者(m//g)のほうがいいね。
別の書き方では、 $c++ while(m//g); とか?
0105デフォルトの名無しさん
2005/11/13(日) 15:29:59ためしてみたけどうまくできませんでした
文字列中のabcの数を出したいんですが
$str="wwwabcabcrrrwww";
$str=~s/abc/$&/g;
print"$str";としてもだめでした。
010691
2005/11/13(日) 16:24:38突っ込みサンクス。
勘違いしてますた。ところでPerlのソース見ると、
Unicodeって云ってる文字列はUTF-8みたいだけど?
文字列の長さがどうのは、utfフラグがついてるかどうかの
問題だと思うんだがどうだろう。
0107デフォルトの名無しさん
2005/11/13(日) 18:46:32$aaa=&match_kosuu("aaaaaaaaあああaaaaaaaaああああaaa","aaa");
print "aaaの個数=$aaa";
sub match_kosuu{
local($aaa)=0;
local($str);
$str=$_[0];
$str=~s/$_[1]//g;
$www=length($str);
$aaa=(length($_[0])-$www)/length($_[1]);
return($aaa);
}
0108デフォルトの名無しさん
2005/11/13(日) 19:34:19$kosuu = () = "aaaaaaaaあああaaaaaaaaああああaaa" =~ /aaa/g;
printf "aaaの個数=$kosuu\n";
0109デフォルトの名無しさん
2005/11/13(日) 19:48:130110デフォルトの名無しさん
2005/11/13(日) 19:52:03では、上級レベルのスレッドへどうぞ。
【Perl上級者コーナーPart01】
http://pc8.2ch.net/test/read.cgi/php/1024741312/l50
0111デフォルトの名無しさん
2005/11/14(月) 00:40:15例えば
"123.45" & "67.89"
という演算をしたとしても、文字があらわす数字とは何の関係もなく
文字コードのビット配列で計算してしまうのですよね?
文字列のビット演算の使いどころがわからないのですが、
どういうときに役に立ちますか?
0112デフォルトの名無しさん
2005/11/14(月) 01:08:100113デフォルトの名無しさん
2005/11/14(月) 01:15:30それでやったけど動作しませんでした
0114デフォルトの名無しさん
2005/11/14(月) 01:33:20> 質問です。ビット演算子を文字列に対して行うという話ですが、
ビットベクタは事実上文字列という話じゃなくて?
0115デフォルトの名無しさん
2005/11/14(月) 01:44:14>どういうときに役に立ちますか?
小文字を大文字に変換する最速の方法として使えるかもしれんな。
$foo = "abcdef" & "______";# ABCDEF
>>113
>>108の通りでちゃんと動いたよ。
0116デフォルトの名無しさん
2005/11/14(月) 01:55:090117デフォルトの名無しさん
2005/11/14(月) 10:02:013として計算に使いたいんですが、どうすればいいですか?
0118デフォルトの名無しさん
2005/11/14(月) 10:18:18環境にも依存する可能性はあるが、手元じゃucの方が速いよ。
use Benchmark;
my $s = "abcdef";
timethese(undef,
{
bitand => sub { $foo = $s & "______"; },
uc => sub { $foo = uc $s; },
}
);
結果:
Benchmark: running bitand, uc for at least 3 CPU seconds...
bitand: 4 wallclock secs ( 3.18 usr + 0.00 sys = 3.18 CPU) @ 1126669.50/s (n=3582809)
uc: 4 wallclock secs ( 3.15 usr + 0.04 sys = 3.19 CPU) @ 1647269.91/s (n=5254791)
0119ヽ(´ー`)ノ ◆.ogCuANUcE
2005/11/14(月) 10:39:59int(3.987899)
>>115
固定長だと話にならんので、文字列長を求めるようにしたらこうなった。
use Benchmark;
my $s = "abcdef";
timethese(undef,
{
bitand => sub { $foo = $s & (length($s) x "_"); },
bitandfix => sub { $foo = $s & "______"; },
uc => sub { $foo = uc $s; },
}
);
Benchmark: running bitand, bitandfix, uc for at least 3 CPU seconds...
bitand: 2 wallclock secs ( 3.02 usr + 0.00 sys = 3.02 CPU) @ 2174994.70/s (n=6568484)
bitandfix: 2 wallclock secs ( 3.05 usr + 0.01 sys = 3.06 CPU) @ 3427579.08/s (n=10488392)
uc: 4 wallclock secs ( 3.01 usr + 0.02 sys = 3.03 CPU) @ 4279167.66/s (n=12965878)
0120デフォルトの名無しさん
2005/11/14(月) 12:00:09それは、処理前の文の解釈の時間が相対的に大きくなっているだけ。
実際に処理が始まれば、ビット演算のほうが速いことは、文字列を長くすれば解る。
なお、$cpは$sより長くても支障は無いから、最初に充分な長さを確保しておけばよい。
use Benchmark;
my $s = "abcdef"*1000;
my $cp = "_" x 100000;
timethese(undef,
{
bitand => sub { $foo = $s & (length($s) x "_"); },
bitandfix => sub { $foo = $s & $cp; },
uc => sub { $foo = uc $s; },
}
);
Benchmark: running bitand, bitandfix, uc for at least 3 CPU seconds...
bitand: 4 wallclock secs ( 3.08 usr + 0.00 sys = 3.08 CPU) @ 1209622.81/s
(n=3723219)
bitandfix: 3 wallclock secs ( 3.03 usr + 0.00 sys = 3.03 CPU) @ 6406829.76/s
(n=19419101)
uc: 3 wallclock secs ( 3.00 usr + 0.00 sys = 3.00 CPU) @ 4357491.50/s
(n=13076832)
0121デフォルトの名無しさん
2005/11/14(月) 12:06:56>my $s = "abcdef"*1000;
my $s = "abcdef" x 1000;
しかし、結果はより鮮明になった。
Benchmark: running bitand, bitandfix, uc for at least 3 CPU seconds...
bitand: 4 wallclock secs ( 3.06 usr + 0.00 sys = 3.06 CPU) @ 1436996.74/s
(n=4401521)
bitandfix: 2 wallclock secs ( 3.16 usr + 0.00 sys = 3.16 CPU) @ 149609.32/s
(n=472167)
uc: 3 wallclock secs ( 3.20 usr + 0.00 sys = 3.20 CPU) @ 43495.47/s (
n=139316)
0122デフォルトの名無しさん
2005/11/14(月) 12:48:050124デフォルトの名無しさん
2005/11/14(月) 15:04:46OSをwin2000sp4からWinXPに変えたら動作がえらい遅くなった(それ以外の環境は一緒)。
そんなにOSの差ってあるもんすか?
0125デフォルトの名無しさん
2005/11/14(月) 15:57:48わざと「$dummy」とかに値を捨てたときにも
「used only once: possible typo」
と出てしまうのですがエラーを出さなくする方法はあるのでしょうか?
よろしくお願いします。
0126デフォルトの名無しさん
2005/11/14(月) 16:11:180127デフォルトの名無しさん
2005/11/14(月) 16:14:22・要らない値を作らないようにする my($sec, $min, $hour) = (localtime)[3,4,5];
・undef に捨てる my(undef, undef, $foo) = bar();
・$dummy を二回以上使う
0129デフォルトの名無しさん
2005/11/14(月) 16:53:160130デフォルトの名無しさん
2005/11/14(月) 18:00:37sendmail のマニュアルと RFC 2822 を読めばいいと思うよ。
何にしろ Perl の話じゃないので次の質問は適切なスレへ移動して下さい。
0131103
2005/11/14(月) 18:51:30それ(ループを回して数える)が適当かと。
前者(s///g)はリードオンリー値でエラーを出すので後者の方がマシだけど、
後者(m//g)も一時的に配列を作るから。
>>105
=~はパターン結合演算子。結果の入手は代入演算子。
>>106
そのとおり。utfフラグがUnicodeか否かを決定してる。
Unicodeだと文字コードの範囲が0〜0x7FFFFFFFになり、全ての文字幅が1になる。
少なくともそう見えるようになる。不完全だけどね。
0132111
2005/11/14(月) 19:53:17>>114
ビットベクタという言葉は知りませんでした・・・
>>115
そういう方法があったんですね。しかし逆に言うとそのぐらい
しか使い道なさそうですね。
0133デフォルトの名無しさん
2005/11/14(月) 20:19:47ラクダ本は今回が初めての購入です。すぐに第4版出ると悔しいので。
たかだか5.6→5.8の差分ぐらいで新しい版は出ないですよね?
0134デフォルトの名無しさん
2005/11/14(月) 20:22:521 2 3 4 5 >>
というふうに要素を表示させたいのですが、どのようにすればいいですか?
foreach $data (@log) {
なんたらかんたら
$count++
}
見たいな感じでまわした後の$countの使い方がわかりません。。
0135デフォルトの名無しさん
2005/11/14(月) 20:46:11持ってないなら買うべし。ただ 5.6 → 5.8 の差は決して小さくないので、
自分の使っているヴァージョンの perldoc も併読する事が肝要。
0136デフォルトの名無しさん
2005/11/14(月) 21:13:35気になるならアマゾンでユーズド買うとか。
海外でもまだ第3版だからすぐには出ないはず。
0137133
2005/11/14(月) 21:23:05会社が買ってくれりゃ良かったのですが;;
0138デフォルトの名無しさん
2005/11/14(月) 21:28:12みんな意地悪で君にレス付けないわけじゃないからな。
意味がわからないだけだからな。
0139デフォルトの名無しさん
2005/11/14(月) 21:32:140140デフォルトの名無しさん
2005/11/14(月) 21:33:260141デフォルトの名無しさん
2005/11/14(月) 21:52:45なら、文字列連結演算子っているの?という疑問がわいてきませんか?
$a = "abc";
$b = "def";
$renketu = "$a$b";
0142デフォルトの名無しさん
2005/11/14(月) 21:57:10>>1
"There's more than one way to do it"
0143デフォルトの名無しさん
2005/11/14(月) 22:10:13文字列連結演算子があれば、
$a .= $b;
みたいなのができる。strcat
$a = "$a$b";
は、"$a$b"を生成してから、$aにstrcpy
0144デフォルトの名無しさん
2005/11/14(月) 22:10:21$renketu = $a . kansuu() . 'ghi' x 3 . (my $b = 'def');
0145デフォルトの名無しさん
2005/11/14(月) 22:30:290146デフォルトの名無しさん
2005/11/14(月) 22:32:010147デフォルトの名無しさん
2005/11/14(月) 22:33:11よくないです
0148141
2005/11/14(月) 22:37:20なるほどねぇ
なるほどなるほど
0149デフォルトの名無しさん
2005/11/14(月) 22:49:51http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_dy
0150デフォルトの名無しさん
2005/11/15(火) 00:31:55Σ(・∀・;)
日本語が通じなくてシカトされていたとは・・・
しばらく日本語研修に行って参ります。ノシ
0151デフォルトの名無しさん
2005/11/15(火) 01:32:040152134
2005/11/15(火) 01:47:29説明しなおします。
つまり、
ヤフなどの検索エンジンの検索結果のように、
表示すべき内容がたくさんあった時、
いっそのこと1ページに表示する件数を決めて、
複数ページに分けて表示させてしまおうではないか、
という話です。
このように、文節をとにかく繋げてしまう私は日本語力が乏しr(ry
0153デフォルトの名無しさん
2005/11/15(火) 02:15:58ページ番号が0のとき、 1〜10までを表示
ページ番号が1のとき、11〜20までを表示
・・・
ページ番号が$nのとき、($n*10+1)〜(($n+1)*10)までを表示
って作ればいい。
0154デフォルトの名無しさん
2005/11/15(火) 02:59:430155デフォルトの名無しさん
2005/11/15(火) 06:05:47CGIと一言も言ってないけどCGIでしょ?
続けるならWebProg行きなよ
0158デフォルトの名無しさん
2005/11/15(火) 09:53:43おまい、いろいろ不自由なんだな・・・
ガンガレ
0159デフォルトの名無しさん
2005/11/15(火) 14:15:26レスありがとうございます。Sendmailの本は持っているのですが、よく分かりませんでした。
適切なスレを探しているのですが、よく分かりません。もしよければ、質問できそうなスレを教えて貰えませんか?
0160デフォルトの名無しさん
2005/11/15(火) 15:07:14くだらねえ質問はここに書き込め! Part 115
http://pc8.2ch.net/test/read.cgi/linux/1131686280/
くだらない質問はここに書き込め!44
http://pc8.2ch.net/test/read.cgi/unix/1128698100/
0161デフォルトの名無しさん
2005/11/15(火) 16:15:01いや、sendmail本はともかく RFCの確認含めて、基礎的な部分を自分で
調べられない程力不足であれば、人に聞くだけでは怪しいままなので
そういう他のサイトに被害が及びそうなことはやめてくれよ。
0162デフォルトの名無しさん
2005/11/15(火) 16:24:56まじめにじっくり勉強しろという方が親切だろうな...
0163デフォルトの名無しさん
2005/11/15(火) 17:14:59AN HTTPDで鯖を立て、そこにプログラムを置いて実行するようにしたのですが、動きません。
一瞬読みに行ったような動作はするのですがすぐに終わり、何も変化しません。
詳しい先輩に聞いたら「perlがぶっこわれてんじゃね」といわれたため、入れなおしてみたりいろいろしてみましたが変化ありません。
なぜでしょうか?非常に困っているために解決方法を教えていただきたいのですが・・・
AN HTTPDのver 1.42n
Active Perlのver v5.8.7 built
AN HTTPDの設定 拡張子.pl,.cgi 実行プログラムC:\Perl\bin\perl.exe
よろしくお願いします。
0164デフォルトの名無しさん
2005/11/15(火) 17:16:40それ、Perl の質問じゃないんじゃないの?
0165デフォルトの名無しさん
2005/11/15(火) 17:25:34ここで検索しな。
http://find.2ch.net/
sendmail スレもいくつかある。
0166デフォルトの名無しさん
2005/11/15(火) 17:35:23すみませんでした。別のところいってきまつ
0167デフォルトの名無しさん
2005/11/15(火) 19:57:070168デフォルトの名無しさん
2005/11/15(火) 20:10:17> myで宣言した変数って、いらなくなったらundefしたほうがいいの?
時と場合による。
0169デフォルトの名無しさん
2005/11/15(火) 20:17:29smbclientが実行される度にコンソールに標準出力が出るのですが、これを表示しないようにすることは可能ですか?
0170デフォルトの名無しさん
2005/11/15(火) 20:21:04http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#How_can_I_capture_STDERR_from_an
0171デフォルトの名無しさん
2005/11/15(火) 21:44:12これを指定すると、変数はすべて宣言しなければならないと
いう規制がつきますよね?
宣言とはmyを付けることなのでしょうか?
それにしては、いきなり
$a = "aaa";
とか書いても怒られないんですよね。
どういう解釈をすればいいのでしょうか?
0172デフォルトの名無しさん
2005/11/15(火) 21:48:08$a と $b だけは特別。 perldoc perlvar 参照。
0173デフォルトの名無しさん
2005/11/15(火) 22:00:32それもそうだね。ありがとう。
0174デフォルトの名無しさん
2005/11/15(火) 22:14:23my な変数はできるだけ内側のスコープで宣言しておいて、「要らなくなった時には見えなくなっている」というのがひとつの理想かと思う。
そういう話でなかったらごめん。
0175デフォルトの名無しさん
2005/11/15(火) 22:33:56> > myで宣言した変数って、いらなくなったらundefしたほうがいいの?
> 時と場合による。
っていうか、そういうことをするのは相当特殊な場合でしょう。
0176デフォルトの名無しさん
2005/11/15(火) 22:35:21もうPerl忘れたぞ。。
スコープを抜けた時にリファレンスカウンタ調べて解放して行くと記憶してるけど
0177名無しさん
2005/11/15(火) 22:43:31決して解放されないって考えた方がよいの?
0178デフォルトの名無しさん
2005/11/15(火) 22:47:15シンボルテーブルにエントリは残るけど
アロケートしたメモリはundefすれば解放されるんじゃねーの
0179デフォルトの名無しさん
2005/11/15(火) 22:48:55いや、それもスコープ抜けたときだったと思う。
ちょっと見てみたけど手元の黒豹本では、
リファレウンスカウントがデクリメントされるのは、
When variables (named values) go out of scope,
とある。
この黒豹本、初版で古いけど、今は違うなんて事はないよね。
0180デフォルトの名無しさん
2005/11/15(火) 22:49:010181デフォルトの名無しさん
2005/11/15(火) 23:00:28my $hoge = 'This is hoge.';
…
}
# 今や$hogeは解放された。×
# 今や$hogeは消滅した。 ×
# 今や$hogeは逝ってしまった。 ○
0183デフォルトの名無しさん
2005/11/15(火) 23:07:30それはプールに戻ったという意味だよね。
その昔、Cで拡張ラリブラリ書いた時に
DESTROYで強制的にメモリ解放させるのは書いた事があるが。
そうじゃなきゃプールに戻るんだったような。
0184銀色
2005/11/15(火) 23:09:28テキストファイルの処理をしているのですが、
多少の加工をした後に重複した行を削除したいのです。
何かいい方法ありませんでしょうか?
0185デフォルトの名無しさん
2005/11/15(火) 23:10:510186銀色
2005/11/15(火) 23:17:44ただ単に重複した行を削除したいと言うことです。
$txt の中に \n で改行されています。
うん。相変わらず説明が下手です。ごめんなさい。
0187デフォルトの名無しさん
2005/11/15(火) 23:23:180188デフォルトの名無しさん
2005/11/15(火) 23:35:38OSに返却されないまでも
Perlのプロセス内では再利用されているって
信じちゃっていいんでしょ?! 信じちゃうから。
0189デフォルトの名無しさん
2005/11/15(火) 23:45:13そういうこと言ってると「malloc() & free()」っていうタイトルで長大なスレッドが・・・
0190デフォルトの名無しさん
2005/11/15(火) 23:50:51調べる力も身に付けようね。
my %got;
foreach (split /^/, $txt) {
print unless $got{$_}++;
}
0191134
2005/11/16(水) 00:55:24僕と>>184さんのどちらの方が意味不明ですか?
と、競ってみたりします。
ところで、みなさんはperlとcのどちらが使い勝手が良いと考えていますか?
0192デフォルトの名無しさん
2005/11/16(水) 00:59:20それがスクリプトクォリティだろ。
0193デフォルトの名無しさん
2005/11/16(水) 01:51:240194デフォルトの名無しさん
2005/11/16(水) 07:42:15ちょうどPerlとCしか使わない(使えない)人間なんだけど
使い勝手って言ったらそりゃPerlでしょ。用途がぜんぜん違うから
比べるのは間違ってるけどね。
0195デフォルトの名無しさん
2005/11/16(水) 08:52:52ほー 興味深いなぁ。 今まで my と local 適当に使ってた(´・ェ・`)
この説明は、要はこういうことなのかな。
■local は、グローバルの同名(?)変数の内容を待避させ(スタック?)、再利用する。
スコープから外れると、使用していたのを破棄して、待避内容を復帰させる。
■my は、スコープ内で呼ばれると用意されるメモリ空間?
コンパイル時とは言っても、cのstaticとは違うんですよね? package内グローバルだと
staticっぽいですね。
ちょっとちがうかなぁ。
まとめると、大きい変数使ったりスピード求めるには、 my の方がいいのかな?
0196デフォルトの名無しさん
2005/11/16(水) 09:08:260197デフォルトの名無しさん
2005/11/16(水) 09:26:00> 大きい変数使ったりスピード求めるには、 my の方がいいのかな?
つか、そもそも用途が全然違うだろ。馬鹿か?
0198デフォルトの名無しさん
2005/11/16(水) 09:47:320201デフォルトの名無しさん
2005/11/16(水) 10:24:57全然当てはまんない。だから、そもそも用途が違うって。入門書読め。
0203デフォルトの名無しさん
2005/11/16(水) 15:06:02そりゃ、スコープを抜ければ待避させたデータの再利用が可能だし、
入門書では他のサブルーチンからでも参照できるとか書いてるけど
意図的にそういうスクリプト書く奴の気が知れない。
基本はTMTOWTDIだが、一応正しい使い方はlocalでできてmyでできない宣言。
→型グロブやファイルハンドルの宣言、特殊変数の一時書き換えなど。
myはレキシカル変数の宣言。
スコープの外からリファレンスを使って参照することができるが、基本的にはスコープを抜けると消える。
外から参照されている場合もリファレンス自体が消えた時点で消える。
スコープの外に同名の変数が無く、リファレンス等も用いていないなら挙動は同じといって良い。
きっちり書いてるならundefする必要はないと思われ。
undefされた変数をそれ以降に利用する場合とかはその例外。
これでどう?
0204デフォルトの名無しさん
2005/11/16(水) 15:10:090205デフォルトの名無しさん
2005/11/16(水) 16:44:44script.pl inputfile
script.pl < inputfile
# script
if ( $ARGV[0] eq "" ) {
$fh = *STDIN;
$f_flag = 0;
} else {
open IN, $IN;
$fh = *IN;
$f_flag = 1;
}
while(<$fh>){
処理
}
$f_flag = 1 なら閉じる
としているのですが
どちらもやりわすれたときの良い対処方法が見つかりません。
どのようにしたらいいでしょうか?
0206デフォルトの名無しさん
2005/11/16(水) 17:17:37これが意味不明なのでなんとも回答のしようがないな。
「どちらもやりわすれた」って何?
それ以前の一般的な話として、
openはよく失敗するので戻り値見るべき
単に標準入力か引数のファイルを読みたいだけなら<>でもいいんじゃねーの?
0207デフォルトの名無しさん
2005/11/16(水) 17:20:53@ARGV == 0の方がいいと思う。
0208デフォルトの名無しさん
2005/11/16(水) 17:31:22今、入力ファイルが引数またはSTDINで処理しようとしています。
使用法A:script.pl inputfile
使用法B:script.pl < inputfile
# script
if ( @ARGV[0] eq 0 ) {
$fh = *STDIN;
$f_flag = 0;
} else {
open IN, $ARGV[0] || die "I can't open";
$fh = *IN;
$f_flag = 1;
}
while(<$fh>){
処理
}
$f_flag = 1 なら閉じる
としているのですが
使用法Aも使わず使用法Bも使わなかった時の良い対処方法が見つかりません。
どのようにしたらいいでしょうか?
>単に標準入力か引数のファイルを読みたいだけなら<>でもいいんじゃねーの?
これは知りませんでした。
今、試しましたがやっぱり使用法AもBもしなかったときは
自動的にスクリプトが終了しないですよね?
どうしたらよいのでしょうか?
0209デフォルトの名無しさん
2005/11/16(水) 17:49:55使用法B:script.pl < inputfile
これって、inputfileがなければ入力待ちになるからなぁ。
どうしてもって言うなら、
一定時間入力が来なかった場合、timeoutさせるようにする。
0210デフォルトの名無しさん
2005/11/16(水) 17:55:37標準入力をredirectしてなければ端末がつながってるので
そういうものだな。それがredirectの結果つながったものか
どうかは起動されたプログラム側からはわからないので、
ある程度誤判定をするのを覚悟してファイルの種類で
区別するしかないんじゃないだろうか。-f STDINや
-c STDINあたり。
0211デフォルトの名無しさん
2005/11/16(水) 18:00:14入力を大文字化して表示するスクリプトの例。
#!/usr/local/bin/perl -w
my $input = shift @ARGV or die "Not enough arg.\n";
open IN, '<' . $input or die $!;
print uc while <IN>;
__END__
標準入力を使いたい場合は
script.pl -
のように - を指定。
0212デフォルトの名無しさん
2005/11/16(水) 18:01:45入力が端末かどうかテストすればええのでは? -t fileno(STDIN) あたり。
0213デフォルトの名無しさん
2005/11/16(水) 18:06:470214デフォルトの名無しさん
2005/11/16(水) 18:15:59$hoge[1]=('i'=>6,'c'=>2,'g'=>7);
$hoge[2]=('e'=>4,'l'=>3,'b'=>10,'h'=>11,'j'=>13);
上記のような配列@hoge(要素数100以上)があったとして
$hoge[20]〜$hoge[30]までを切り取って上位に詰める(unshift?)
する場合は、どうしたら良いのでしょうか?
現在は、下記のようにしていますが、もっとスマートな方法は
ありますか?
for($i=0,$j=0;$i<@hoge;$i++) {
if($i>=20&&$i<=30) {
foreach $key (keys %{$hoge[$i]}) {
$tmp[$j]{$key} = $hoge[$i]{$key};
}
$j++;
}
}
for($i=0;$i<@hoge;$i++,$j++) {
if($i<20&&$i>30) {
foreach $key (keys %{$hoge[$i]}) {
$tmp[$j]{$key} = $hoge[$i]{$key};
}
$j++;
}
}
0215デフォルトの名無しさん
2005/11/16(水) 18:18:52ちゃんと読んでないけど
splice()
0216デフォルトの名無しさん
2005/11/16(水) 18:29:00splice(@hoge, 20, 10);
じゃなかったかな。間違ってたらすまん。
0217214
2005/11/16(水) 18:44:45spliceは、配列に場所を指定して配列を追加したりする時に
使いますよね?でも、この場合は、$hoge[20]〜$hoge[30]まで
を上位に"Copy"では無く"Move"させたいのです。
その場合に元の位置にあったデータは消したいのですが…。
どうすれば良いのでしょうか?
0218デフォルトの名無しさん
2005/11/16(水) 18:50:54「上位」って何?
俺用語を使わないで、正しい言葉と、分かりやすいサンプルを。
0219デフォルトの名無しさん
2005/11/16(水) 18:52:35とりあえずマニュアル読もうや。
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_splice_ARRAY_OFFSET_LENGTH_LIST
my @array = (0..40);
unshift @array, splice @array, 20, 10;
print join ',', @array;
0220212
2005/11/16(水) 18:57:48# script
use FileHandle;
{
my $fh = (@ARGV == 0) ? *STDIN : new FileHandle $ARGV[0];
die "Can't open" unless defined($fh);
die "Can't input from terminal" if -t fileno $fh;
while(<$fh>){
printf ">>> %s", $_;
}
undef $fh;
};
0221デフォルトの名無しさん
2005/11/16(水) 19:05:36ひょっとしてこういう事か?
$hoge[$from] から $hoge[$to] として、
@hoge = (0 .. 40);
$d = $to - $from; # 30 - 20
splice(@hoge, $d, $d); # splice(@hoge, 30 - 20, 10);
0222221
2005/11/16(水) 19:14:49@hoge = (0 .. 40);
$d = $to - $from; # 30 - 20
splice(@hoge, $from - $d, $d); # splice(@hoge, 20 - (30 - 20), 10);
0223デフォルトの名無しさん
2005/11/16(水) 19:16:44もちつけ、splice(@hoge, $from, $d); # splice(@hoge, 20, 30 - 20); じゃないか?
# これじゃ削除だけだけど
>>214
質問の件はspliceで出来るだろうからちょっとツッコミを。
Perlでの擬似多次元配列は無名配列/無名ハッシュを用いて実現されている。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html
> $hoge[0]=('a'=>5,'f'=>9,'k'=>8,'d'=>12);
これは正しくはこう書く
$hoge[0]={'a'=>5,'f'=>9,'k'=>8,'d'=>12};
で、これを読めば分かるように$hoge[$i]の中身はリファレンスなので、
foreach $key (keys %{$hoge[$i]}) {
$tmp[$j]{$key} = $hoge[$i]{$key};
}
ここは、この場合必要としてるのは浅いコピーだから、
$tmp[$j]=$hoge[$i]とリファレンスをコピーしてやれば十分
0224デフォルトの名無しさん
2005/11/16(水) 19:38:550225デフォルトの名無しさん
2005/11/16(水) 19:41:24ごめんなさいspliceの機能を勘違いしてました。
>>221-222
解答ありがとうございました。
unshift @array, splice @array, 20, 10;
で解決しました。
>>223
色々と為になるご掲示ありがとうございます。
勉強になります。浅いコピーは一発で代入できるんですね。
という事は深いコピー…例えば、#hoge[100][100]{$key}のような
構造の配列では$tmp[$j]=$hoge[$i]とできないという事ですか?
0226デフォルトの名無しさん
2005/11/16(水) 19:48:13> という事は深いコピー…例えば、#hoge[100][100]{$key}のような
> 構造の配列では$tmp[$j]=$hoge[$i]とできないという事ですか?
っていうか、それだと浅いコピーです。
0227デフォルトの名無しさん
2005/11/16(水) 19:51:06深いコピーというのは同じものを参照するのではなく、別の写像を作ることを言う。
今回のようにした場合、
$hoge = {'a' => 1};
$fuga = $hoge;
$fuga->{a}='2';
とコピーした先を書き換えると、$hoge->{a}も書き換わってしまう。
$hoge = {'a' => 1};
$fuga = {};
%$fuga = %$hoge;
$fuga->{a}='2';
という風に深いコピーをしてやれば、$hoge->{a}は変わらない。
が、別の領域を用意するということはメモリを余分に使うということであり
必要が無いならやるべきではないな。
0228デフォルトの名無しさん
2005/11/16(水) 19:56:040229227
2005/11/16(水) 20:02:15ああ、言い忘れたけれど
$hoge = {'a' => [1,2,3]};
みたいになると
%$fuga = %$hoge;
じゃ[1,2,3]の部分までは深いコピーは出来ないな。
そういう場合は>>228の言っているCloneモジュールを使うべきかな
0230デフォルトの名無しさん
2005/11/16(水) 20:10:31> という事は深いコピー…例えば、#hoge[100][100]{$key}のような
> 構造の配列では$tmp[$j]=$hoge[$i]とできないという事ですか?
やりたいことにもよるけど、浅いコピーが出来ないのかと訊かれれば、出来ると答える
0231デフォルトの名無しさん
2005/11/16(水) 20:18:42スプライス?
いつも口に出す時こまる。
0232デフォルトの名無しさん
2005/11/16(水) 20:21:51辞書開いて発音記号見れば分かるんだけどな。
http://dictionary.goo.ne.jp/voice/s/02071393.wav
0234デフォルトの名無しさん
2005/11/16(水) 20:26:430235デフォルトの名無しさん
2005/11/16(水) 20:30:13当たり!
0236デフォルトの名無しさん
2005/11/16(水) 20:57:12for文使うのが普通ですか?
0237デフォルトの名無しさん
2005/11/16(水) 21:10:45演算子のxを使う
@hoge = (0) x 100;
0238デフォルトの名無しさん
2005/11/16(水) 21:16:43できた!(・∀・)
ありが�d
0239デフォルトの名無しさん
2005/11/16(水) 21:52:30for文を使うのが普通でしょうか?
(例)@hoge=(1,1,1,1,1,1)なら真、@huga=(1,0,1,1,1)なら偽
0240デフォルトの名無しさん
2005/11/16(水) 21:57:59return scalar(grep($_ != 1, @_)) == 0 ? 0 : 1;
}
0241デフォルトの名無しさん
2005/11/16(水) 22:02:59sub subete_ichi {
return scalar(grep($_ != 1, @_)) == 0 ? 1 : 0;
}
0242デフォルトの名無しさん
2005/11/16(水) 22:09:16全部調べなくても一つ違えばそこで調べ終わっていい。
sub check { $_ == 1 || return for @_ }
0243242
2005/11/16(水) 22:10:19sub check { $_ == 1 || return for @_; 1 }
0244デフォルトの名無しさん
2005/11/16(水) 22:20:34無理に短い、トリッキーなコードを書こうとしないで
後にメンテする人の事も考えてあげて下さい(><)
0245デフォルトの名無しさん
2005/11/16(水) 22:21:330246デフォルトの名無しさん
2005/11/16(水) 22:26:390247デフォルトの名無しさん
2005/11/16(水) 22:27:200248デフォルトの名無しさん
2005/11/16(水) 22:30:570249銀色
2005/11/16(水) 22:31:04適当なところにそのまんまその4行を追加してみたけどダメでした。
3分考えて
open(FILE, ">$filename") or die;
#print FILE $txt;
my %got;
foreach (split /^/, $txt) {
print FILE unless $got{$_}++;
}
close(FILE);
こうしたらうまくできました。
調べる力の不足もそうですが、それ以前の理解度の不足が…
ちょっとずつ勉強していくのでその時はよろしくです。
0250デフォルトの名無しさん
2005/11/16(水) 22:32:21http://search.cpan.org/dist/Quantum-Superpositions/lib/Quantum/Superpositions.pm
all(1,1,1)
0251デフォルトの名無しさん
2005/11/16(水) 22:36:35お前一回WebProg板行ってみろ
0252デフォルトの名無しさん
2005/11/16(水) 22:41:10イヤだ。勘弁してくれ。
0253デフォルトの名無しさん
2005/11/16(水) 22:45:15おぉ!こんなのあったのね。
0254250
2005/11/16(水) 23:09:26all(@arr) == any(1,2,3,4)
で@arr[のすべて]が1,2,3,4[のどれか]なら、とかもできるのか
# 役に立ちそうだったからとりあえずブックマークしてあった
0255デフォルトの名無しさん
2005/11/16(水) 23:15:40するような奴がPerlを使うなと言いたい
そういう人はPythonとJavaを使いなさい
0256デフォルトの名無しさん
2005/11/16(水) 23:19:170257169
2005/11/16(水) 23:28:36返事遅くなりましたが、`smbclient 2>&1`で解決しました。
ありがとうございました。
0258デフォルトの名無しさん
2005/11/16(水) 23:58:53> 配列の要素がすべて1なら真を、そうでなければ偽を返したいです。
> for文を使うのが普通でしょうか?
> (例)@hoge=(1,1,1,1,1,1)なら真、@huga=(1,0,1,1,1)なら偽
List::MoreUtilsに。
0259デフォルトの名無しさん
2005/11/17(木) 00:04:32all { $_ == 1 } @hoge;
か。
0260デフォルトの名無しさん
2005/11/17(木) 00:48:51ならんのですかね。今はリファレンスに使っていますが。
全部読んだって人います?
0261デフォルトの名無しさん
2005/11/17(木) 00:56:24とにかく人の書いたソースを読みまくること
0262デフォルトの名無しさん
2005/11/17(木) 01:01:51全部読んで Perl マスターになったひともいるだろうが、
全部読まずとも Perl マスターになったひとも大勢いるだろう。
0263デフォルトの名無しさん
2005/11/17(木) 01:21:530264デフォルトの名無しさん
2005/11/17(木) 01:23:15> 配列の要素がすべて1なら真を、そうでなければ偽を返したいです。
> for文を使うのが普通でしょうか?
> (例)@hoge=(1,1,1,1,1,1)なら真、@huga=(1,0,1,1,1)なら偽
eval(join('==1 && ', @hoge).'==1')? return "1": return "0";
0265デフォルトの名無しさん
2005/11/17(木) 01:32:130266デフォルトの名無しさん
2005/11/17(木) 01:37:57なんというか・・・突っ込みどころ満載だな・・・
0267デフォルトの名無しさん
2005/11/17(木) 01:54:56!index(join('', @hoge), 0);
0268デフォルトの名無しさん
2005/11/17(木) 01:56:090269デフォルトの名無しさん
2005/11/17(木) 02:03:37志村ー-1、-1
$tmp+=$_ foreach @hoge; return $tmp==@hoge
0270デフォルトの名無しさん
2005/11/17(木) 02:05:150271デフォルトの名無しさん
2005/11/17(木) 05:10:06みたいなことをしたいんですけど、どう表現すればいいですか?
(上の文ではうまくいかないみたいです。)
0272デフォルトの名無しさん
2005/11/17(木) 05:42:57三項演算子の使い方を調べたらいい
0273デフォルトの名無しさん
2005/11/17(木) 05:43:03漏れの解釈どおりなら、それでちゃんと動く。
こういうことだと解釈したけれど、違うならもっと具体的に説明を
my $hoge = 'xxx#a#xxx#b#xxx';
$hoge =~ s{#(.*?)#}
{
my $tmp = $1 eq 'a' ? 'hoge' : 'fuga';
$tmp =~ /ho/ ? 'foo' : 'bar'
}eg;
print $hoge;
0274デフォルトの名無しさん
2005/11/17(木) 11:50:18分かりやすい。ありがとう。
外から参照されてないと消えるってのは知らなかった。
にしてもよく伸びるスレだな。。。
0275203
2005/11/17(木) 19:48:58いや、消えてくれないとmyの意味ないから。
俺もずっと放置されていて寂しかったよ・・・
レスしてくれて報われた気がする。サンクス
0276デフォルトの名無しさん
2005/11/17(木) 20:01:23% ruby -e 'print [1,2,3,4,5].reverse[0..2], "\n"'
をやりたいのですが、
% perl -e 'print reverse(1,2,3,4,5)[0..2], "\n"'
で怒られてしまいます。
何かナイスな書き方ってありますか?
0277デフォルトの名無しさん
2005/11/17(木) 20:10:22% perl -e 'print +(reverse(1,2,3,4,5))[0..2], "\n"'
0278デフォルトの名無しさん
2005/11/17(木) 20:45:580279デフォルトの名無しさん
2005/11/17(木) 20:46:53早い回答に多人数は必要ない。
0280デフォルトの名無しさん
2005/11/17(木) 21:14:48結構時間がかかるので "." をポチポチと画面に表示していこうと
考えました。
とりあえず 500 件毎に "." を出力して、50 個出力したら改行するように
したつもりなのですが、1 つずつ "." が出力されず、
50 個いっぺんに "." が表示されてしまいます。
多分初歩的なことだと思うのですが、助言いただけませんでしょうか。
ソースはこんな感じです。
------------------------------------
#!/usr/bin/perl
$counter = 0;
while (<>) {
$counter++;
if ($counter % 5000 == 0) {
if ($counter % 250000 == 0) {
print "\n";
}
else {
print ".";
}
}
}
------------------------------------
0281デフォルトの名無しさん
2005/11/17(木) 21:15:09if($x = $y)
みたいな、代入式で真偽を判断するケースって
C言語みたいに最終的な$xの値(まぁどっちでもいいか)が
真偽の値になるという考え方でいいのでしょうか。
どうも素直にそう考えていいものか。
配列へリストの代入とかだとどうなるんでしょうか・・・。
if(@m = sort @n)とかは、スカラーコンテキストとして
配列の要素数で真偽を決めるってことでいいのですか?
0282デフォルトの名無しさん
2005/11/17(木) 21:22:42local $| = 1;
http://perldoc.jp/docs/perl/5.6.1/perlvar.pod#item_autoflush_HANDLE_EXPR
>>281
YES. 気になるなら試そう。
0283デフォルトの名無しさん
2005/11/17(木) 21:31:21俺はその手の出力は STDERR に出すようにしてるよ。
STDERR ならデフォルトでバッファリングしないので。
0284デフォルトの名無しさん
2005/11/17(木) 21:34:06エラーじゃない物を標準エラー出力に吐いてるって事?
それはどうかと思うが…
0285280
2005/11/17(木) 21:37:33即答ありがとうございます。
助かりました!
0286デフォルトの名無しさん
2005/11/17(木) 21:41:46別に、エラーじゃなきゃ STDERR に出しちゃダメなんて決まりはないし。
ていうか、本来の出力ではない、ヘルプメッセージやプログレスバーなどを、
STDERR に出すプログラムなんてほかにも世の中にはたくさんあるよ。
0287デフォルトの名無しさん
2005/11/17(木) 21:46:53それもそうか
よく考えたら、この場合エラー出力に吐いて置いた方が返って都合が良いな
0288デフォルトの名無しさん
2005/11/17(木) 22:00:12stdout への出力は、リダイレクトして使用したりもするし、
こういうのを混ぜると汎用性が下がるしね。
0290デフォルトの名無しさん
2005/11/17(木) 22:32:09> >>280
> 俺はその手の出力は STDERR に出すようにしてるよ。
> STDERR ならデフォルトでバッファリングしないので。
ファイル転送などの100%のうちの進行具合を計るプログレスメーターは
STDERRに出せば良いが、この手のプログレスメーターは、トータル数を
見るために使うこともあるし、途中に重要な情報を混ぜこむこともある。
"...."ごとファイルに書き込むこともある。
0291デフォルトの名無しさん
2005/11/17(木) 22:36:26ごめん、言いたいことがわからん。
0292デフォルトの名無しさん
2005/11/17(木) 22:54:19どうでも良いが自分だったら
print SRDERR "." unless $. % 500;
print SRDERR "\n" unless $. % 250000;
と書く。
0293デフォルトの名無しさん
2005/11/18(金) 00:26:120294デフォルトの名無しさん
2005/11/18(金) 03:09:250295デフォルトの名無しさん
2005/11/18(金) 03:18:06ない
0296デフォルトの名無しさん
2005/11/18(金) 03:28:57-t で端末かどうか調べてプログレスメータを表示するべきかどうか
判断させるのが良いかと。
……なんて固い事考えないで、目的を達成できるように書けばいいか。
その方が Perl 使いらしい。
0298デフォルトの名無しさん
2005/11/18(金) 11:16:31一旦何かの配列に入れないでやるにはどうすればいいですか?
0299デフォルトの名無しさん
2005/11/18(金) 11:32:22>>277
0300デフォルトの名無しさん
2005/11/18(金) 11:40:11何、+て
演算子? 関数?
0301デフォルトの名無しさん
2005/11/18(金) 12:00:30マニュアルを読めば分かることを聞かない。
0302デフォルトの名無しさん
2005/11/18(金) 12:45:400303277
2005/11/18(金) 12:58:29言えない…回答時にリファレンスへのリンクを貼ろうと探したけれど見つけられなかったなんて言えない…
perlopの中にあったのね。perlsynとかを探してた( ´д`;)
0304デフォルトの名無しさん
2005/11/18(金) 16:47:22if(もじゅーるあった){}
else{}
↑こんな感じで
なんかいい方法ないでしょうか?
0305デフォルトの名無しさん
2005/11/18(金) 16:54:16eval
0306304
2005/11/18(金) 17:04:37回答ありがとうございます。
具体的にはどのようにすれば良いのでしょうか?
自分で色々やってみたのですが、
Can't locate云々とエラーメッセージが出て強制終了されてしまいます
0307デフォルトの名無しさん
2005/11/18(金) 17:10:06BEGIN {
eval "use Hoge"; # try
if ($@) { # catch
# モジュールが無かった
} else {
# モジュールがあった
}
}
0309デフォルトの名無しさん
2005/11/19(土) 07:46:330310デフォルトの名無しさん
2005/11/19(土) 10:17:04%は小数点をどのように処理しているのでしょうか?
5 % 2.99 が 1
で
5.99 % 2.55 が 1
で
5.99 % 2 が 1
これって、全て
5 % 2
ということでいいのでしょうか?
よろしくお願いします。
0311デフォルトの名無しさん
2005/11/19(土) 10:35:05http://perldoc.jp/docs/perl/5.6.1/perlop.pod の
Multiplicative Operators の項参照。
0312デフォルトの名無しさん
2005/11/19(土) 11:18:310313デフォルトの名無しさん
2005/11/19(土) 11:45:49Compress::Zlib 相当の機能を Pure Perl で実装しているモジュール
という意味なら寡聞にして知らないが、Compress::Zlib や gzip(1) の
Pure Perl なラッパーなら CPAN に色々ある。
Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/
0314310
2005/11/19(土) 12:22:15該当項を読みましたが、仮定が$a,$bの「整数」となっていて、未だ疑問が
解決いたしません。
詳しい説明をよろしくお願いします。
0315310
2005/11/19(土) 13:08:33を読んで自己解決しました。
お騒がせしてすみませんでした。
0316デフォルトの名無しさん
2005/11/19(土) 14:13:350317311
2005/11/19(土) 14:19:36Perl は弱い型の言語なんだから、整数値が期待されるところに
置かれた値は整数値として評価されるし、文字列が期待される
ところに置かれた値は文字列として評価される。
my $chr = ('a'..'z')[ rand 26 ]; # int 不要
"+1.0e2cm" == 100 ? 'eq' : 'ne'; # eq
だからマニュアルに「整数」と書かれているなら、それは仮定では
なくて両オペランドを整数値として評価した上で、という意味になる。
0318デフォルトの名無しさん
2005/11/19(土) 14:50:36勝ちあがるって…。使えない奴が淘汰されるのは自然の摂理なんじゃないの。
0319デフォルトの名無しさん
2005/11/19(土) 15:16:58foreach my $var (@array) {
のように明示して使うというのを見た気がするのですが
みなさんの場合、使い勝手と厳格さを天秤にかけてどっちを選びますか?
自分は$_でも問題ないと思うのですが再帰的なプログラムではまったような記憶もあります。
それとPerlにはpearのコーディング規約みたいなものは無いのでしょうか。
0320デフォルトの名無しさん
2005/11/19(土) 16:05:50http://www.kt.rim.or.jp/~kbk/perl5.005/perlstyle.html
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsec.html
汚染の可能性は外部から入力された全ての値に潜んで
いるのだから、$_ だけを特別扱いするのはナンセンス。
> 使い勝手と厳格さを天秤にかけてどっちを選びますか?
ケースバイケース。個人的なポリシーでどちらかに揃えると
いうのは自由にしてくれて構わないが、万能解は存在しない。
駱駝本の24章「Perlの常識」(2nd なら8章の2 〜 4)を読む事
をお勧めする。
0321デフォルトの名無しさん
2005/11/19(土) 16:22:330322デフォルトの名無しさん
2005/11/19(土) 16:51:03ありませんか?
http://www.watersprings.org/pub/id/draft-dasilva-l2tp-relaysvc-02.txt
とりあえず、タイトルをセンタリングして、章番号、ヘッダ、フッタが
出せればいいのですが。
Text 関係のモジュールをCPAN で調べようとしたのですが、
あまりにもモジュールが沢山ありすぎて滅入ってしまいました。
0323デフォルトの名無しさん
2005/11/19(土) 17:24:07「メンドいから代わりに探して」と臆面も無く言われてもな。
探すのがイヤなら use encoding して format でシコシコ書けば
いいんじゃね?
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlform.pod
0324デフォルトの名無しさん
2005/11/19(土) 18:17:34それは当然として、使えないのに生き残ってる奴は
この程度なら自分で検証くらいできるんじゃないかなと。
0325デフォルトの名無しさん
2005/11/19(土) 18:17:480326デフォルトの名無しさん
2005/11/19(土) 18:55:230327デフォルトの名無しさん
2005/11/19(土) 19:08:510328323
2005/11/19(土) 19:23:48なるほど。例のファイルはRFC2223の規格に定められているものであり、
nroffを使って出力するものなのですね。このようなファイルを時々見かけ
ていたのですが知りませんでした。ありがとうございました。
0329デフォルトの名無しさん
2005/11/19(土) 19:29:01Perl では foreach と for はシノニム。
foreach (my $i = 0; $i < 5; ++$i) { print "$i\n" } # "for" ループ
for (0..4) { print "$_\n" } # "foreach" ループ
但し "foreach" 修飾子は存在するが "for" 修飾子は存在しない。
print "$_\n" for 0..4; # "foreach" 修飾子。OK。
print "$i\n" foreach ($i = 0; $i < 5; ++$i); # "for" 修飾子は存在しない。エラー。
Perl で for ループが必要な場面というのは少ないのと、
for なのか foreach なのかは見た目ですぐ分かるのとで、
略して書いても大して問題にならない。律儀に foreach
と書くかどうかは好みの問題。
0330デフォルトの名無しさん
2005/11/19(土) 19:49:01for は、for (my $i=0; $i<10; $i++) {} の使い方しかしないし、
foreach は、foreach (@array) {} の使い方しかしないなぁ。
0331デフォルトの名無しさん
2005/11/19(土) 20:13:54foreach (my $i = 0; $i < 10; $i++) {
print "$i\n";
}
0332デフォルトの名無しさん
2005/11/19(土) 20:28:38関係無い者だけど勉強になりました。�dクス
0333デフォルトの名無しさん
2005/11/19(土) 20:38:33対立しようぜ.
0334326
2005/11/19(土) 20:44:21それなら自分はforでいこうと思います。
そもそもPerl使いはタイピングをいやがるという話だし
言語もそのような思想でつくられてるそうなので。
0335デフォルトの名無しさん
2005/11/19(土) 20:46:03bshかcshか?みたいな話でけっこう笑える
そもそもfor,foreachってどこから借りてきたんだろね
fortranはDOが基本だしCとcshあたりなのかな?
0336デフォルトの名無しさん
2005/11/19(土) 21:09:14「けっこう笑える」と言っているが、どこで笑えるのかよくわからないので、笑いどころを教えてくれ。
だいたい、bshとcshは違うものだが、for と foreach は同じだ。
0337デフォルトの名無しさん
2005/11/19(土) 21:10:32タイピングを嫌がる*のも*有り、かな。Perl は自然言語的な
表現の幅を持てるようデザインされているので、厳格な文体
で記してもいいし、くだけた言い回しも受け付けてくれる。
>>335
赤リャマを読んだ限りでは、多分それで正解。>借用元
0338デフォルトの名無しさん
2005/11/19(土) 21:11:27あるテキストファイルにときおり存在する1行以上の連続する空行を
<p>
の1行に圧縮するプログラムを書いているのですが、
open MYFILE, "???.txt";
undef $/;
$text = <MYFILE>;
$text =~ s/^\s*$/<p>/mg;
print $text;
これを実行すると、1行のみの空行は<p>に圧縮されますが
2行以上の連続する空行は<p><p>と圧縮されます。
正規表現の行を
$text =~ s/^\s*$/<p>/m for 1..10;
とかにすると意図した通りになります。
(もちろんこれだと10個までですが)
なぜこのような結果になるのでしょうか?
0339デフォルトの名無しさん
2005/11/19(土) 21:18:20Bシェルの for..in 構文も、Cシェルのforeachも
だいたい似たり寄ったりじゃない。
そんなところがさ、君もそう思わないかい?
シェルの話じゃないけど。
0340デフォルトの名無しさん
2005/11/19(土) 21:19:50pタグは閉じタグが必要なので、HTMLとして使い方が間違ってます。
0341デフォルトの名無しさん
2005/11/19(土) 21:27:420342デフォルトの名無しさん
2005/11/19(土) 21:36:15for, foreachは基本的に一緒。
ただし、後置できるのは foreach タイプのみ (for と書いた場合も)。
for (; ;) のタイプは後置できないよってこと。
>>329 は、わざと互い違いに書いてるみたいだけどちょっと分かりにくいね。
0343デフォルトの名無しさん
2005/11/19(土) 21:40:05$text = "0\n1\n\n2\n\n\n3\n\n\n\n*";
while($text =~ m/^\s*$/mg) {
print join(':',length($'),length($&)),"\n";
}
こういう事らしい。
空行が1個の場合は0文字幅の一致が1回。
複数の場合は、n文字幅の一致と0文字幅の一致で2回マッチ。
0344デフォルトの名無しさん
2005/11/19(土) 21:42:49なんかかゆいところだよね。
1ラインであんまり複雑なことすんな、って事なのかもしれんが。
Perl6では変わるのだろうか?
0345デフォルトの名無しさん
2005/11/19(土) 21:56:13その出力分かり辛いよ(笑)。
my $text = "0\n1\n\n2\n\n\n3\n\n\n\n*";
while ($text =~ /^\s*$/gm) {
tr/\n/./ for my($pre, $match, $post) = ($`, $&, $');
print "$pre($match)$post\n";
}
$ は*行末の直前*にマッチするというのが原因だね。
0346デフォルトの名無しさん
2005/11/19(土) 22:03:34>>340の言うとおりpではなく、せめてbrだな。
0347338
2005/11/19(土) 22:19:16ちなみに今はHTMLの文法はおいておいてください。
グローバル置換は順番に1つ1つ置換していくのとは
違うということでしょうかね。
$text =~ s/^\s*$/<p>/m for 1..10;
これだと違ってくるのはなぜなんでしょうね。
0348デフォルトの名無しさん
2005/11/19(土) 22:24:15これだからプログラマ(スクリプタ)の吐くHTMLは汚いっていわれるんだぞ・・・
0350デフォルトの名無しさん
2005/11/19(土) 22:29:36テンプレートにしないか。デザイナに文句いわれないように。
0351338
2005/11/19(土) 22:32:22いやだから、目的は正規表現の学習であって
プログラムはそのために作ってるだけです。
もっといえばオライリーの「正規表現」から
サンプルコードをもってきているんです。
別に<p>だろうと<z>だろうと何でもいいのです。
0352デフォルトの名無しさん
2005/11/19(土) 22:43:51こいつ何開きなおってんの?
そもそもタグいじるならWebprogだろ。
目的もなく置換したいなら正規表現道場いけよ。
0353338
2005/11/19(土) 22:48:11は?
正規表現の本読んでいて、そこにあるサンプルプログラムを
そのまま実行してみたり、少し変えたらどういう結果になるかとか
そういう学習をしてるのがそんなにおかしいですか?
実際にサンプルプログラムをそのまま持ってきてるんで自分が
作ったプログラムでもないし。
しかも本に書かれている結果とは違った結果になったわけで、
十分研究の意味があるということになるじゃないですか。
開き直るもなにも、開き直る必要もないですが?
0354デフォルトの名無しさん
2005/11/19(土) 22:51:35(゚Д゚)ポカーン
<>を見るとHTMLだと思い込む香具師多いのか?
>>338はHTMLとは一言も言ってないなと思いつつ読んでた訳だが
独自構文か何かかと
0355デフォルトの名無しさん
2005/11/19(土) 22:53:330356デフォルトの名無しさん
2005/11/19(土) 22:58:04>>347
>>338
正規表現道場@2ch Part4
http://pc8.2ch.net/test/read.cgi/php/1105930285/
0357デフォルトの名無しさん
2005/11/19(土) 22:58:32だな。ついでに2.0だったか1.0だったかまではbr同様単独で段落の区切りに書く物だったと聞く
まあそれこそ板違いだから程々に
0358デフォルトの名無しさん
2005/11/19(土) 23:00:48HTMLの文法は置いておいてくれって言ってんじゃねぇか
それでもまだHTMLの話をする馬鹿の神経がしれねぇ
0359デフォルトの名無しさん
2005/11/19(土) 23:01:330360デフォルトの名無しさん
2005/11/19(土) 23:06:510361デフォルトの名無しさん
2005/11/19(土) 23:08:570362デフォルトの名無しさん
2005/11/19(土) 23:09:20どちらにしろ、この手の質問は、
後出しで違う文字に置換する質問を出してくる希ガス。
0363デフォルトの名無しさん
2005/11/19(土) 23:24:140364デフォルトの名無しさん
2005/11/19(土) 23:26:170365デフォルトの名無しさん
2005/11/19(土) 23:29:27「は?」
と書かれると癇に障るよね
0366デフォルトの名無しさん
2005/11/19(土) 23:31:36質問者のコメントは至極まっとうじゃないのか?
なんなんだこのスレ違いの回答は。。。やれやれ
回答者マズすぎ
0367デフォルトの名無しさん
2005/11/19(土) 23:33:17こいつ呼ばわりとか。それも結局自分のはやとちりが原因。
「は?」は、よく我慢した方だろ。
俺ならアホかてめぇくらいは言いたくなるな。
0368デフォルトの名無しさん
2005/11/19(土) 23:34:460369デフォルトの名無しさん
2005/11/19(土) 23:37:45sleep(60);
0370デフォルトの名無しさん
2005/11/19(土) 23:38:15は?
0371デフォルトの名無しさん
2005/11/19(土) 23:39:03ただ>>352のようなバカには別に腰低くする必要ないじゃん。
質問者もそいつだけには答えて欲しくなかっただろうしww
0372デフォルトの名無しさん
2005/11/19(土) 23:40:150373デフォルトの名無しさん
2005/11/19(土) 23:41:310374酩酊 ◆TWARamEjuA
NGNGいろいろやってみたら解決しちゃった♪って云うことも少なからずかと。
0375デフォルトの名無しさん
2005/11/19(土) 23:42:350376デフォルトの名無しさん
2005/11/19(土) 23:47:39カスコテはどっか行ってろ
0377デフォルトの名無しさん
2005/11/19(土) 23:56:450378343
2005/11/20(日) 00:16:28自分でもそう思う。分り易い奴、乙。
>>347
$text =~ s/^\s*$/print(join ':',pos $text,length $`,length $&,length $',length $text,"\n"),'___<P>___'/mge;
print length $text,"\n";
0379デフォルトの名無しさん
2005/11/20(日) 00:20:500380デフォルトの名無しさん
2005/11/20(日) 00:49:110381デフォルトの名無しさん
2005/11/20(日) 01:25:57しまった。まじで分からん。俺にも教えてくれ。
>>347 が言ってるのは
while ($text =~ s/^¥s*$/<br>/m) {}
と
while ($text =~ s/^¥s*$/<br>/mg) {}
で結果が異なる事なんだよね。
gオプションの時は
/^¥s*$/ の他に、置換後の /^$/ にも反応してるってこと?
0382デフォルトの名無しさん
2005/11/20(日) 01:39:59どう考えても、gオプションの動作がおかしい。
$text1 = $text2 = "abc\n\n\n\n\n\ndef";
$text1 =~ s/^\s*$/K/gm;
while( $text2 =~ s/^\s*$/K/m ){}
print "\$text1:$text1\n\$text2:$text2\n";
$text1:abc
KK
def
$text2:abc
K
def
0383デフォルトの名無しさん
2005/11/20(日) 04:28:46HTTPサーバに接続して、ページを取得した際に、正常に取得されたかどうかはどのようにしたら分かるのでしょうか?
0384デフォルトの名無しさん
2005/11/20(日) 05:01:47答えが出てると思うんだが
0385デフォルトの名無しさん
2005/11/20(日) 05:23:29foreach my $x (@huga){
〜
と、
foreach my $x (@hoge){
foreach (@huga){
〜
はどっちがいい?
0386デフォルトの名無しさん
2005/11/20(日) 05:37:33好みの質問?
漏れはどちらかと言われれば後者だが、両方名前をつける事が多い
0387デフォルトの名無しさん
2005/11/20(日) 05:39:33入れこにするなら$_使わず、両方とも変数使うかな。
ぱっと見て訳わかんなくなるし。
0388ヽ(´ー`)ノ ◆.ogCuANUcE
2005/11/20(日) 06:10:32基本的に両方名前を付ける。
ループで $_ を使うとしたら、最も入れ子になったループが
一文で終わる時だけだな。
foreach my $x (@hoge) {
$_->do_operation() foreach @fuga;
}
0389デフォルトの名無しさん
2005/11/20(日) 11:49:07gオプションの場合は、1つマッチしては置換というような
ことをしてないような希ガス
マッチが余分にある気がするねぇ…
バグ報告?
0390デフォルトの名無しさん
2005/11/20(日) 13:12:29使わないとすれば、>>388と似たような感じのとき。
例えば、
foreach(@file){ -T or return }
とかみたいに書きたいときだけ。
漏れは $_ って文字はタイプしないような構成にする。
0391デフォルトの名無しさん
2005/11/20(日) 14:10:16(下の文章を[email protected]に送りました。)
title: Perl Bug in s///mg
Dear Sirs,
I expected in the following script that $text1 and $text2 should
have a coincide result. However, $text1 has an excess 'K' which
is considered to be a bug.
My environment is Windows XP, ActivePerl 5.8.7.815.
---------------script-------------------------
$text1 = $text2 = "abc\n\n\n\n\n\ndef";
$text1 =~ s/^\s*$/K/gm;
while( $text2 =~ s/^\s*$/K/m ){}
print "\$text1:$text1\n\$text2:$text2\n";
---------------output-------------------------
$text1:abc
KK
def
$text2:abc
K
def
0392デフォルトの名無しさん
2005/11/20(日) 14:16:54出るものなの?パッチだけとか?
0393デフォルトの名無しさん
2005/11/20(日) 14:31:17>>345氏のコードを実行してみたよ。
^\s*$ を仮に @ に置き換えるとして、gオプションをつけたとき
0.1.().2...3....*.
[email protected].(.).3....*.
[email protected].@().3....*. <-- 2\n@\n3となっているはずの部分に^\s*$がなぜかマッチ
[email protected].@@.3.(..).*.
[email protected].@@.3.@().*. <-- 3\n@\n*となっているはずの部分に^\s*$がなぜかマッチ
となるのがおかしい、と理解していいのかな?
(質問の説明のために実行結果に若干手を加えています)
0394デフォルトの名無しさん
2005/11/20(日) 14:40:48え? それ、正しい動作...
まず、s///gでは置換途中は対象変数が元の値を保持している。
確認例 perl -e "$_='AAA ';s/A/print/ge;print"
/gは、元の文字列でマッチが成立する場所を全て置換するという事。
m//g と s///g でマッチ個所は同一になる。
$の件(>>345)を別の表現にすると、先読みの肯定(/(?=\n)/)
単純な例
$_='a aa aaa aaaa aaaaa';
s/a*(?=a)/print "$`($&)$'\n"/ge;
print;
これは、直後が'a'である0文字以上の'a'を置換という指定。
print出力は345準拠。
0395デフォルトの名無しさん
2005/11/20(日) 14:44:340396デフォルトの名無しさん
2005/11/20(日) 14:46:180397デフォルトの名無しさん
2005/11/20(日) 14:49:25それって意図したとおりの動作なのかな。
単純に何度も置換するのと、グローバルで一括置換するのと
結果が違うのは、まずい気がするんだが。
0398デフォルトの名無しさん
2005/11/20(日) 15:26:22そうすると、394氏が言ってる
m//g と s///g のマッチ箇所が異なる結果になるので
それはそれでよくないと思うのだけどな…
0399デフォルトの名無しさん
2005/11/20(日) 15:51:30http://boobar.hp.infoseek.co.jp/note/match01.txt
http://boobar.hp.infoseek.co.jp/note/match02.txt
0400デフォルトの名無しさん
2005/11/20(日) 16:41:14というよりかは、m//gの動き自体からおかしいのでは?ということに。
0401デフォルトの名無しさん
2005/11/20(日) 16:50:17俺もforeachのときは付けるけどmapだと使わないときあるな。
0402399
2005/11/20(日) 17:34:25>>338
> なぜこのような結果になるのでしょうか?
>>338 の前者は $text に対し s///g を一回だけ実行し、その処理過程で
複数の置換を行っている。後者は $text に対し s/// 自体を複数回実行し、
それぞれ一回ずつの置換を行っている。前者では二つ目以降のマッチ開始
位置が前回マッチの終了位置となるのに対し、後者では毎回文字列の先頭
にリセットされる為、結果も変わってくる。
>>356
ム板にもある。
正規表現 part2
http://pc8.2ch.net/test/read.cgi/tech/1131028296/
>>381 >>389
上の説明と >>399 参照。
>>393
>>394 で書かれているように、/g の処理中で逐次的に置換されるわけ
ではない。よって 2\n@\n3 ではなく2\n\n\n3 のまま。>>399 も参照。
>>397
違う事をしているのだから結果も違って当然。
(my $str = 'ababab') =~ s/ab/abc/g; # abcabcabc
# my $str = 'ababab';
# 1 while $str =~ s/ab/abc/; # 無限ループ!
0403デフォルトの名無しさん
2005/11/20(日) 17:39:15実装した人がそういう違いをだしたかったかは
わからんのでは。
0404デフォルトの名無しさん
2005/11/20(日) 17:43:13置換してるんだから検索開始位置がズレて当然
0405デフォルトの名無しさん
2005/11/20(日) 17:51:06$text =~ s/^\s*\n/<p>\n/mg;
とするのが正解?
0406399
2005/11/20(日) 18:08:44s{(?<=後者では毎回文字列の先頭にリセットされる為、)}
{また、置換対象となる文字列自体が変化している為、}
の方が正確か。
>>403
「実装した人」とは? この perl(1) の振る舞いが「正しくない」と
思うなら porters@ にでも提案してみてね。
>>405
正解と言うか、一番素直な表現だと思う。
$ は改行にマッチするパターンでなくて改行直前にマッチする
0 文字幅のパターンだという事を押さえておけば OK。
0407405
2005/11/20(日) 18:30:40確かに正解という限定的な言い方はTMTOWTDIの考え方に反してましたね。
訂正 s/正解/安全で分かりやすい表現/
改行直前にマッチということを今まで知らなかった漏れは
ちょっと正規表現勉強しなおしてこよう・・・
0408デフォルトの名無しさん
2005/11/20(日) 20:03:02perl -w でUse of uninitialized value…
と怒られないようにするにはどうしたらいいのでしょうか…
0409デフォルトの名無しさん
2005/11/20(日) 20:13:22ちょっとそれじゃ説明不足。もう少し具体的に
0410デフォルトの名無しさん
2005/11/20(日) 21:08:20'def' =~ /(?:<(.*?)>)?(.*)/;
こんな感じのときかな。definedを調べれ
0411408
2005/11/20(日) 21:18:30すいません…
例えば
$test = "AB";
if ($test =~ /^([AB])?([AB])?([AB])?$/) {
if ($1 eq "A") { print "\$1 match:A \n"; }
if ($2 eq "A") { print "\$2 match:A \n"; }
if ($3 eq "A") { print "\$3 match:A \n"; }
}
みたいなのだと最後のifの文で警告が出てしまいますよね。
このような場合の対処法をよろしければ…
>>410
defined調べてみます。
ありがとうございます。
定義済みかどうかを調べる制御構造を
増やさなければならないということなんでしょうか…。
0412デフォルトの名無しさん
2005/11/20(日) 21:26:07なんで -w で実行する必要があるのかっつーとこも問題になってくると思ゐ
0413デフォルトの名無しさん
2005/11/20(日) 21:39:060414デフォルトの名無しさん
2005/11/20(日) 21:40:48> 定義済みかどうかを調べる制御構造を
> 増やさなければならないということなんでしょうか…。
確かに一つ判断は増えるが、チェックを増やすとネストが深くなるような長めの処理なら、
一旦レキシカル変数に落とすだろうから、そのときにチェックすれば良いのでは
my $hoge = defined $1 ? $1 : '';
また、もしマッチしていなければその処理を行わないというような内容なら、
そもそもそのチェック自体が要件なわけだし
0415デフォルトの名無しさん
2005/11/20(日) 22:00:18my @captured = ($1, $2, $3, $4); # まず配列(でもなんでも)に値を移して
foreach (@captured) { # ループにかけ、
next unless defined; # 未定義ならはじいてしまうか、
# あるいは、
$_ |= ''; # 適当に初期化しておいてから、
# 思う存分本来の処理をやりましょう。
}
0416酩酊 ◆TWARamEjuA
2005/11/20(日) 22:38:51print "\$1 match:A \n" $Check_array[0] eq 'A';
:
:
みたいな?
0417デフォルトの名無しさん
2005/11/20(日) 22:58:41含まない場合とがあるんだよね?\n$とやった場合は$に改行は含まれないが
$だけなら改行文字も含むってことでいいの?
0418デフォルトの名無しさん
2005/11/20(日) 23:33:41いいや。改行文字は「常に」含まれない。
0419デフォルトの名無しさん
2005/11/20(日) 23:44:42>>415
> my @captured = ($1, $2, $3, $4); # まず配列(でもなんでも)に値を移して
試していないけど、この文を実行する時に$2, $3, $4などが無ければ、
また怒られるのでは?
リストコンテキストでは、($1, $2, $3, $4, ....)が返ってくるよ。
my @captured = $test =~ /^([AB])?([AB])?([AB])?$/;
0420デフォルトの名無しさん
2005/11/21(月) 00:10:58リャマによれば、ドル記号アンカーは文字列の末尾、または文字列の末尾に
ある改行文字にマッチします...とあるが。
/^fred$/は"fred"にも"fred\n"にもマッチするんで。
0421デフォルトの名無しさん
2005/11/21(月) 00:27:33「\e」がありますよね。
これの使いどころがわからないのですが、
どういう使い方するのでしょうか?
ラクダ本には乗ってないようで、新しめの機能?
0422415
2005/11/21(月) 00:28:34連結したり展開するなどの形で値を「利用」しなければ警告は出ないみたいよ。
> my @captured = $test =~ /^([AB])?([AB])?([AB])?$/;
場合によりけりだけど通常はこちらのほうがいいよね。
予約されている範囲なら警告はないんで、順序を入れ換えたりする場合には ($1,...) も便利だけど。
0423デフォルトの名無しさん
2005/11/21(月) 00:36:44$_ = "fred\n";
print 'case $ >', /($)/, "<\n";
print 'case \\n >', /(\n)/, "<\n";
0424デフォルトの名無しさん
2005/11/21(月) 00:40:20配列関数について分からないのですが、
@list = (1, 2, 3);
の意味は@listが1、2、3という3つの値を持子とは分かるのですが
@primes = (0, 0, 2 .. $limit);
とはどういう意味なんでしょうか?
(limitにはある整数値が入っています)
0425デフォルトの名無しさん
2005/11/21(月) 00:48:51http://perldoc.jp/docs/perl/5.6.1/perlop.pod
の Range Operators 参照。
あと関数じゃなくて変数な。
0426デフォルトの名無しさん
2005/11/21(月) 00:50:15おちついて、$&や$'を確認しろ。
らくだ本(赤い奴だろうと青い奴だろうと)に説明あり。
>>421
第二版には載っていたけど、第三版には載ってないの?
赤い奴には載ってないな。
Perl4でも\eはESC文字だった気がするけど、うろ覚え。
0427デフォルトの名無しさん
2005/11/21(月) 00:54:56ということは行末$とは改行文字の直前てことでいいのかな?
0428デフォルトの名無しさん
2005/11/21(月) 00:55:12恥ずかしい間違いすみませんでした。
また答えを教えていただいてありがとうござていました。
予想していたとおり、0からlimitの値までの昇順の配列なようですが
(limitが5だったら1,2,3,4,5)
なぜ、0が2つあるのかが謎なのです。
素数を求めるプログラム(エラトステネスのふるい)
に使うので「2以上limit以下の配列」なら良いはずなのですが・・・。
0429デフォルトの名無しさん
2005/11/21(月) 00:58:27行末が改行文字で終わっていればその直前。
行末が改行文字で終わっていなければ文字列の末尾。
>>428
変数の中身をどう使うかなんてのはそのプログラムを書いた人に聞いてね。
0430デフォルトの名無しさん
2005/11/21(月) 00:59:40はい、すみませんでした。
0を無視して、@primes = (2 .. $limit);だと思って解釈します。
皆様、ありがとうございました。
0431デフォルトの名無しさん
2005/11/21(月) 01:09:47> ラクダ本には乗ってないようで、
5.3.2
0432408
2005/11/21(月) 01:41:28なんらかの形でdefinedのチェックを通せばよいのですね。
>>413
>defined($n) &&
そうか…論理和は左から真でなければ右を見ないのでこれでいいんですね。
これはお手軽ですね。
他にもスマートな例をいただきありがとうございました。
0433デフォルトの名無しさん
2005/11/21(月) 03:09:260434デフォルトの名無しさん
2005/11/21(月) 03:11:020435ヽ(´ー`)ノ ◆.ogCuANUcE
2005/11/21(月) 08:54:37そのケースだけで言えば、/^([AB]?)([AB]?)([AB]?)$/ にして、マッチしなければ
空文字にすればいいんでないの。
0436デフォルトの名無しさん
2005/11/21(月) 08:56:39意図してるなら未定義の変数も平気で使う人って実は少ないの?
0437デフォルトの名無しさん
2005/11/21(月) 09:26:500439デフォルトの名無しさん
2005/11/21(月) 11:33:08遅れて見てたが、はなから /^([AB]?)([AB]?)([AB]?)$/ で充分だと思う。
複雑なパターンでもグループ化と後方参照の為の()を区別すればいいだけで。
/ ...((?:[AB][XY])?)$/
0440391
2005/11/21(月) 11:57:12回答内容は、>>399 の指摘と同様の内容になっています。
Thanks for the report, however this is correct behaviour.
The main thing to be aware of is that for s///g, we retain the source
string for the pattern matching so as not to be confused by any changes
that occur as a result of successful substitutions, building those up
instead into a separate results string.
In the first case then, the first match occurs at offset 4 in the string,
just after the first newline. The /\s*/ matches the next 4 newlines,
and the /$/m matches just before the 6th (final) one.
In the result string, those 4 newlines are replaced with 'K'. In the
source string, the position to continue matching is now still just
before the final newline, and at this point we repeat and match again -
the /^/m matches the position just after the 5th newline, /\s*/
matches zero characters, and /$/m matches (as before) just before the
6th (final) newline. This zero-width substring is thus replaced with
another 'K' in the result string.
Now the match is repeated again, still from the same position, and
the pattern matches a third time, matching in exactly the same way
as the second time. However this time the string has a flag attached
to say that we've already matched a zero-width substring at this
position, so the match is rejected, and no further matches are found.
0441391(続き)
2005/11/21(月) 11:57:51perl -wle '$_="abc\n\n\n\n\n\ndef";s/^(?{print "pos ", pos($_)})\s*$(?{print "match"})/K/gm'
which prints:
pos 0
pos 4
match
pos 8
match
pos 8
match
pos 9
In the second case, we do a single replacement as in the case of the
first match described above. When we invoke the substitution a second
time, however, we are acting on the modified string, and so no further
matches are found. It is the fact that the second substitution acts on
the modified string that causes the visible difference between the two
cases.
This is all quite difficult to explain clearly, I hope my attempts have
helped,
Hugo van der Sanden
0442デフォルトの名無しさん
2005/11/21(月) 13:15:32どのような方法が論理的かつ美しいのでしょうか。
現在はとりあえず$ENV{HTTP_HOST}があったらwebから実行されているとしています。
0443デフォルトの名無しさん
2005/11/21(月) 13:44:28-t STDOUT
0444デフォルトの名無しさん
2005/11/21(月) 14:10:10ありがとうございます。実は>>296の投稿を見てカンピュータで
-t <STDOUT>
としたのですがコンソールから実行してるのにundefが
返ってきてしまったので投稿してしまいました。
もっと精進します。
0445デフォルトの名無しさん
2005/11/21(月) 14:55:050446134
2005/11/21(月) 20:58:19でファイルをオープンした後に、
unshift @log, "あああああ<>いいいいい<>ううううう\n";
で@logに代入して、
print FH @log;
という形でファイルに書き込んだのですが、何故かログファイルが1行に連なってしまいます。
しかも、\nが・という感じに変わってしまうのですが・・・どうしたら良いですか?
0447デフォルトの名無しさん
2005/11/21(月) 21:07:410448デフォルトの名無しさん
2005/11/21(月) 21:12:390449デフォルトの名無しさん
2005/11/21(月) 21:16:190451デフォルトの名無しさん
2005/11/21(月) 21:26:53http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
0452408
2005/11/21(月) 21:39:41>>439
ありがとうございます。
?を括弧の中に入れれば良かったのですね。
よろしければもう一つ、
例えば
$test = "AB";
if ($test =~ /^([AB]?)([AB]?)(?:C([AB]?))?$/) {
のような形(つまり3回目はCが先行する場合のみマッチしたい)では
処理が$3まで到達しないのかやはり未定義になってしまうようです…
このような形に応用するやり方はあるでしょうか。
考えたのですが、どうしても…
0453134
2005/11/21(月) 21:41:47しかし、それが何故\n→・の文字化けに繋がるのでしょうか。
あと、>>451さんの資料を読む限り、改行文字は\nなのですが、\r\nで記述しなければいけないのはどうしてでしょう・・・
駄目だ、定期テスト期間中なのに頭はperlでいっぱいですonz
0454デフォルトの名無しさん
2005/11/21(月) 21:46:50ヒント
OSの改行コード
Perl(発祥?のOS)の改行コード
メモ帳(エディター)が対応している改行コード
0455134
2005/11/21(月) 21:57:28な、なるほど!
テキストエディタで開かずドリームウィーバーで開いてみたら、ちゃんと改行されていました。
つまり、Perl(発祥?のOS)の改行コードに対応していないテキストエディタでログファイルを見ていた私がperlの奥の深さを知らなさ過ぎた訳ですね^−^;
どうもありがとうございました!
しかし何故か、unshiftでログファイルに書き込んでいるのに、配列の末尾に要素が追加されてしまいます・・・。
0456デフォルトの名無しさん
2005/11/21(月) 22:12:24CR, LF, CRLF
ファイルに追加書き込みしてるから
0457デフォルトの名無しさん
2005/11/21(月) 22:23:36#!/usr/local/bin/perl -w
use strict;
for (qw(A BA ABCA)) {
if (/^([AB])?([AB])?(?:C([AB])?)?$/) {
if (defined $1 && $1 eq 'A') { print "\$1 match:A \n" }
if (defined $2 && $2 eq 'A') { print "\$2 match:A \n" }
if (defined $3 && $3 eq 'A') { print "\$3 match:A \n" }
}
print "--\n";
}
__END__
0458134
2005/11/21(月) 22:32:22ファイルに追加書き込みとは">>ログファイルへのパス"のことですよね?
普通に書き込みが出来る入出力記号(>や+<)を記述すると、追加されずに上書きされてしまうです・・・。
0459134
2005/11/21(月) 22:54:49ただ、@logに要素を入れる場所を間違えていたみたいです。
そろそろ真剣にテスト勉強しないと留年するのでしばらくperlは我慢します...λ
0460デフォルトの名無しさん
2005/11/22(火) 02:45:14これをダウンロードしたんですけどあってますか?
0461デフォルトの名無しさん
2005/11/22(火) 02:59:00質問の仕方が間違ってる
0462デフォルトの名無しさん
2005/11/22(火) 07:48:30ハイハイアッテスアッテス
0463デフォルトの名無しさん
2005/11/22(火) 07:56:230464デフォルトの名無しさん
2005/11/22(火) 15:11:02合ってるかどうかはMD5を見よう
あるいは、それを本当に自分がダウンロードしたのか思い出してみよう
0465デフォルトの名無しさん
2005/11/22(火) 17:10:210466デフォルトの名無しさん
2005/11/23(水) 14:15:45aaaaa
bbbbb
ccccc
PAGE_END
こんなprintの使い方ありますよね?
でもラクダ本にはこの手の使い方のってないし、
どのprintの構文に照らし合わせても、なぜこれが
できるのかわからんのですが、どういうことなんでしょうか?
0467デフォルトの名無しさん
2005/11/23(水) 14:30:51それはヒアドキュメントといってprintに限ったものではない
my $hoge = <<EOM;
hogehoge
EOM
ラクダ本は持ってないんだが、リファレンスの何所に載ってるんだろ・・・
0468デフォルトの名無しさん
2005/11/23(水) 14:34:46http://www.kt.rim.or.jp/~kbk/perl5.005/perldata.html#Scalar_value_constructors
> 行指向形式のクォートは、シェルの「ヒアドキュメント」構文をもとにしています。
以降参照
0469466
2005/11/23(水) 15:15:07そういうものがあったのですね・・・。
こんな使い方
print <<`EOC`; # コマンドを実行する
echo hi there
echo lo there
EOC
まであるのかと思い、やってみたら、Windows環境ですが、最初の
コマンドしか実行されませんでしたTT
0470デフォルトの名無しさん
2005/11/23(水) 15:50:53赤ラクダには載ってるよ。青にも載ってるんじゃないかな
0471デフォルトの名無しさん
2005/11/23(水) 15:59:18print ・・・;
print ・・・;
print ・・・;
ってやるよりヒアドキュメント使えってあったよ。
0472466
2005/11/23(水) 16:41:04printではなくヒアドキュメントでラクダ本を調べると
詳しい解説が載っていました。
さすがラクダ本・・・。
0473デフォルトの名無しさん
2005/11/23(水) 22:37:29print $header, <<"BODY_END", $footer if defined $hoge
適当に
複数行の
本文を書いて
BODY_END
my @text= ( <<"ARRAY1",<<"ARRAY2",<<"ARRAY3" );
複数行に
渡る
文字列の
代入を
ARRAY1
¥nとか
使って
書くと
美しくない
ARRAY2
とか
思う人に
おすすめ。
ARRAY3
my @text= ( <<"AND",<<"AND",<<"END" );
これって何かの本に載ってる?
適当に自分でいじってて、
AND
できたらいいのに、
AND
がホントにできた例なんだが。
END
0474デフォルトの名無しさん
2005/11/23(水) 22:56:340475デフォルトの名無しさん
2005/11/23(水) 23:01:59>>468
0476デフォルトの名無しさん
2005/11/23(水) 23:04:220478デフォルトの名無しさん
2005/11/23(水) 23:39:44例えば配列@list = ( 28, 10, 7, 15, 34, 9, 58, 2 ) を
ヒープソートするロジックを教えて頂きたいんですが・・・。
考えても考えても、どう表現したらいいかわからん。
0479デフォルトの名無しさん
2005/11/23(水) 23:45:02よく本では、
$ENV{PATH}
のようにやっているのですが、PATHってkeyの文字列ですよね?
なぜにクォーテーションで囲まないのでしょうか?
というかやってみると出来てしまうのですが。
なんででしょうか?
0480デフォルトの名無しさん
2005/11/23(水) 23:46:06『裸のワード』でぐぐれ
0481デフォルトの名無しさん
2005/11/24(木) 00:31:21実装例。
http://search.cpan.org/search?query=heap&n=100
>>479
文法上許されているから。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html#Scalar_value_constructors
0482479
2005/11/24(木) 00:38:18裸のワードというのを初めて知りました。
しかし、今回のケースでは、そういう解釈ではなく
文法で許されているようですね。
0483デフォルトの名無しさん
2005/11/24(木) 03:10:27$ENV{foo-bar}は書けない
$ENV{'foo-bar'}と書かないといけない
0484デフォルトの名無しさん
2005/11/24(木) 14:02:06$hash{-foo} = 'bar';
とかね。
0485デフォルトの名無しさん
2005/11/24(木) 14:49:22$hoge=~m/(<.*?href.*?=("|')?)(https?:\/\/)?(.*?)($2| |\>)/
想定では
$1<href= $2" $3http:// $4url部分 $5">
と、なるはずなんですが、
$4,$5が空になってしまいます。だれか助けてください。
0486485
2005/11/24(木) 15:44:06eオプションで条件式つけてだらだらやるしかないんでしょうか?
0487デフォルトの名無しさん
2005/11/24(木) 16:20:36同じ正規表現の中で使うときは$2じゃなくて\2
0488デフォルトの名無しさん
2005/11/24(木) 17:51:010489デフォルトの名無しさん
2005/11/24(木) 17:55:02何を持って使えるというのかにもよるが
つ EPIC
0490デフォルトの名無しさん
2005/11/24(木) 18:21:57ありが�d
検索してepicのページ見つけました。
なんだかよくわからないけど使ってみます。
0491デフォルトの名無しさん
2005/11/26(土) 12:07:390492デフォルトの名無しさん
2005/11/26(土) 12:58:250493デフォルトの名無しさん
2005/11/26(土) 13:25:45それともWindows側で設定するんでしょうか
0494デフォルトの名無しさん
2005/11/26(土) 13:36:38LWP::UserAgentのproxyメソッドで設定できます
0495デフォルトの名無しさん
2005/11/26(土) 14:19:06ですが、&を必ずつけるというやり方はいいやり方なのでしょうか?
0496デフォルトの名無しさん
2005/11/26(土) 14:33:35プロトタイプが無視されるので良くないやり方
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_ca
0497デフォルトの名無しさん
2005/11/26(土) 14:47:28「前に」必ず記述しないと駄目ってことになるの?
0498デフォルトの名無しさん
2005/11/26(土) 14:50:36プロトタイプを使うなら先行宣言
使わないなら無くても何も文句は言われん
0499495
2005/11/26(土) 15:07:06では関数ということを強調するのに引数が無い場合でも
my_func( );
こんな感じにするのはいいですよねぇ?
0500デフォルトの名無しさん
2005/11/26(土) 15:10:000501デフォルトの名無しさん
2005/11/26(土) 15:43:530502デフォルトの名無しさん
2005/11/26(土) 15:45:01ありがとうございました
0503デフォルトの名無しさん
2005/11/26(土) 16:55:53なるほど、勉強になります。
0504デフォルトの名無しさん
2005/11/26(土) 17:09:16OOP派なのでそもそもプロトタイプは定義しない。
Perlで仕様ガチガチなsubを書くのもどうかしてると思われ
どっちにしても可読性の観点でmy_func();か$o->my_method();にするけどね。
0505デフォルトの名無しさん
2005/11/26(土) 17:12:380506デフォルトの名無しさん
2005/11/26(土) 17:29:21こういうプロトタイプ書いておいて
my_func(@hoge);
とかなら使うけどな。
0507デフォルトの名無しさん
2005/11/26(土) 17:41:20自分で作ったものを自分で使っている限りはどうでもいいんじゃないの?
他人に使わせるモジュールを書くのなら、値渡しか参照渡しか、
ユーザが気にしなくても使えるほうがベターでしょう。
(Perl のプロトタイプってそのためにあるのだと思っていたが)
0508デフォルトの名無しさん
2005/11/26(土) 19:43:38ブロック外に書いたmyがファイル全体のスコープを持っちゃうのって
どう対処してます?
ブラック外に書くのはサブルーチンの呼び出しだけだったりするんでしょうか。
0509デフォルトの名無しさん
2005/11/26(土) 19:48:220510デフォルトの名無しさん
2005/11/26(土) 19:50:52504だけど、標準モジュールのソース読んだことある?
わざわざプロトタイプを指定しているのはperl4の時代から存在したものぐらいで
perl5以降の関数型標準モジュールを当たってもプロトタイプ指定は稀なように思える。
分野差があるかもしれんが。
0511デフォルトの名無しさん
2005/11/26(土) 19:56:520512デフォルトの名無しさん
2005/11/26(土) 20:04:52Perl4にプロトタイプは存在しない件(´・ω・`) 5.002から導入だそうだ
漏れ、小規模なコードはプロトタイプをがちがちに指定した物を書くのが
好きなんだけど時代遅れなのかな…
0513デフォルトの名無しさん
2005/11/26(土) 20:07:540514デフォルトの名無しさん
2005/11/26(土) 23:43:54俺は使ってない。
あと引数の型を sub foo(¥@) {...} として foo(@arr) で呼び出した時に
配列リファレンスを取り出してくれるかどうかも、バージョン依存だったはず。
なので俺はプロトタイプは使ってないし信用しないことにしてる。
0515デフォルトの名無しさん
2005/11/27(日) 01:32:52>あと引数の型を sub foo(\@) {...} として foo(@arr) で呼び出した時に
>配列リファレンスを取り出してくれるかどうかも、バージョン依存だったはず。
ああ、本当だ。ここのPerl5.005の解説では、
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsub.html
「\」を付ければリファレンスになると書いてあるのに、
らくだ本の改訂版のp133〜(Perl5.002)には、そんなこと
な〜んにも書いていない。
まあ、しかし、5.6以前のことはもう考えなくていいんじゃないの?
0516デフォルトの名無しさん
2005/11/27(日) 01:56:48CPANで集めてきたモジュールの関数を利用するために
複数継承させたら、多重継承になっちゃうんだよね?
多重継承(・A ・)イクナイ!って聞いたので、どうしたらいいのでしょうか?
例えば
package damepo;
use LWP::Simple;
use Encode;
こんな感じです。
0517デフォルトの名無しさん
2005/11/27(日) 02:06:54ちなみにPerlは多重継承をサポートしてるから気にすんな。
0518デフォルトの名無しさん
2005/11/27(日) 02:20:31thx
これは継承じゃないんですか!!!
(´Д⊂ モウダメポ
サブルーチンと継承の差がよくわからなくなってきた
オブジェクト指向がいっこうにわかんね_| ̄|○
0519デフォルトの名無しさん
2005/11/27(日) 02:24:34少なくとも 5.003_07 の perlsub にはその記述が既にある。
http://search.cpan.org/~andyd/perl5.003_07/pod/perlsub.pod#Prototypes
> 5.6以前のことはもう考えなくていいんじゃないの?
線引きをするなら 5.005_0[34] 以降と 5.8.1 以降かな、私の場合。
>>518
http://www.kt.rim.or.jp/~kbk/perl5.005/perlobj.html
http://www.kt.rim.or.jp/~kbk/perl5.005/perlbot.html
0520519 追加
2005/11/27(日) 02:27:01http://perl.infoware.ne.jp/documents/perlboot.ja.html
0521デフォルトの名無しさん
2005/11/27(日) 06:01:13p134で実際に\@や\%を使っているけどな。
0522デフォルトの名無しさん
2005/11/27(日) 12:52:07しかし、意味が違う。らくだ本の改訂版では\@とは、
「引数が@で始まらなければならない」という意味だから、
引数が「@foo」ならいいが、「(1,2,3,4)」みたいなのは
ダメということでしかない。
0523デフォルトの名無しさん
2005/11/27(日) 13:19:28残りの時間を別の所で有効に使うためにプロトタイプするな
ってことでFA?
0524デフォルトの名無しさん
2005/11/27(日) 13:44:42「Perl6 を使えば全て解決」で FA。
0525デフォルトの名無しさん
2005/11/27(日) 13:46:44高階関数を定義するのに便利だから。
0526デフォルトの名無しさん
2005/11/27(日) 13:58:280527デフォルトの名無しさん
2005/11/27(日) 14:00:240528デフォルトの名無しさん
2005/11/27(日) 14:00:340529デフォルトの名無しさん
2005/11/27(日) 14:49:300530デフォルトの名無しさん
2005/11/27(日) 17:37:46改訂版でも\@は、(リストではなく本物の)配列のリファレンスだよ。
宣言例のsub mypop (\@)やsub mysplice(\@$$@)が説明。
テキストは、@arrayは良いが\@arrayや$ref_arrayは駄目という事。
0531デフォルトの名無しさん
2005/11/27(日) 18:22:010532デフォルトの名無しさん
2005/11/27(日) 18:33:43(MainLoopが回った後?)fork出来ないと言う記述を
見かけたような気がするのですが,本当でしょうか。
0533デフォルトの名無しさん
2005/11/27(日) 18:42:14正確に言うと二次配布です。
友人に配るPHPのスクリプトにPerlのモジュールをPHP化したものを配りたいのですが、可能ですか?
0534デフォルトの名無しさん
2005/11/27(日) 19:16:100535デフォルトの名無しさん
2005/11/27(日) 19:35:35CPANいってドキュメントのライセンス嫁よ
0536デフォルトの名無しさん
2005/11/27(日) 20:18:460537デフォルトの名無しさん
2005/11/27(日) 20:34:35Autrijus たんはどうしてあんなものに貴重な才能と時間を費やしているのでしょうか?
0538デフォルトの名無しさん
2005/11/27(日) 20:36:360539デフォルトの名無しさん
2005/11/27(日) 21:00:15あの人のことは、われわれには分からないさ・・・。
0540デフォルトの名無しさん
2005/11/27(日) 23:03:353つの言語で使用法を統一する為に、
移植後のPHPのライブラリを、RubyとPerlに再移植ならしたことある。
配布はしてないが…。あの頃は暇だった。
0541デフォルトの名無しさん
2005/11/27(日) 23:57:50[寄付のお願い]
https://donate.perlfoundation.org/
0542デフォルトの名無しさん
2005/11/28(月) 00:07:370543デフォルトの名無しさん
2005/11/28(月) 03:22:39スレッドは駄目だったと思うがforkは知らん。
てかそれ位自分で試せよ。
0544デフォルトの名無しさん
2005/11/28(月) 13:37:21テスト,:10,田中<TANAKA>NONAMAEHA一郎<ITIROU>TO言<I>IMASU,N000,123,__,050210,99999,
が$_に入っているとして、これを
テスト,:10,田中NONAMAEHA一郎TO言IMASU,N000,123,__,050210,99999,
テスト,:10,田中NONAMAEHA一郎TOIIMASU,N000,123,__,050210,99999,
テスト,:10,田中NONAMAEHAITIROUTO言IMASU,N000,123,__,050210,99999,
テスト,:10,田中NONAMAEHAITIROUTOIIMASU,N000,123,__,050210,99999,
テスト,:10,TANAKANONAMAEHA一郎TO言IMASU,N000,123,__,050210,99999,
テスト,:10,TANAKANONAMAEHA一郎TOIIMASU,N000,123,__,050210,99999,
テスト,:10,TANAKANONAMAEHAITIROUTO言IMASU,N000,123,__,050210,99999,
テスト,:10,TANAKANONAMAEHAITIROUTOIIMASU,N000,123,__,050210,99999,
というように<>の部分を展開してout.txtというファイルに出力するプログラムを作りたいです。
どうか、よろしくお願い致します。
0545デフォルトの名無しさん
2005/11/28(月) 14:08:000546デフォルトの名無しさん
2005/11/28(月) 14:10:19$_ = 'テスト,:10,田中<TANAKA>NONAMAEHA一郎<ITIROU>TO言<I>IMASU,N000,123,__,050210,99999,';
print $_, "\n" foreach f($_);
sub f {
my($s) = @_;
if ( $s =~ /([^[:ascii:]]+)<([^>]+)>/ ) {
my $pre = $`;
my $post = $';
my(@s) = ($1, $2);
my @r;
push @r, f($pre.$_.$post) foreach @s;
return @r;
} else {
return $s;
}
}
0547544
2005/11/28(月) 16:12:33ぐっ…ご名答です。
>546
回答ありがとうございます。
print $_, "\n" foreach f($_); #←ここはprint $_, "\n";foreach f($_);ですか?
上のようにして変えても次の6行目でエラーが出るのですが…
0548デフォルトの名無しさん
2005/11/28(月) 16:14:29宿題は宿題スレへ行ってください。
0549デフォルトの名無しさん
2005/11/28(月) 16:48:570550デフォルトの名無しさん
2005/11/28(月) 17:10:12なんというか、せめてちゃんと動いている回答を疑う前に構文くらい調べようよ…
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsyn.html#Simple_statements
0551デフォルトの名無しさん
2005/11/28(月) 17:32:180552デフォルトの名無しさん
2005/11/28(月) 17:41:42俺には >>546 みたいのは一生書けないだろうな、と思い知ったよ・・・orz
0553デフォルトの名無しさん
2005/11/28(月) 18:23:49それはかなりヤバい。
0554デフォルトの名無しさん
2005/11/28(月) 18:31:00$_ = 'テスト,:10,田中<TANAKA>NONAMAEHA一郎<ITIROU>TO言<I>IMASU,N000,123,__,050210,99999,';
1 while s/^([^<>\n]*?)([^[:ascii:]<>]+)<(.+?)>([^\n]*?)$/\1\2\4\n\1\3\4/m;
print $_, "\n";
0555デフォルトの名無しさん
2005/11/28(月) 18:43:010556544
2005/11/28(月) 19:26:24>550
すいません。ちゃんと動いてますね。ただ、恐縮ですが
546さんのプログラムを実行してみたのですが
テスト,:10,田中NONAMAEHA一郎<ITIROU>TO言IMASU,N000,123,__,050210,99999,
テスト,:10,田中NONAMAEHA一郎<ITIROU>TOIIMASU,N000,123,__,050210,99999,
テスト,:10,田TANAKANONAMAEHA一郎<ITIROU>TO言IMASU,N000,123,__,050210,99999,
テスト,:10,田TANAKANONAMAEHA一郎<ITIROU>TOIIMASU,N000,123,__,050210,99999,
というような結果で@rと$sの中身も展開したい形にはなってませんでした。
展開したい形というのは
テスト,:10,田中NONAMAEHA一郎TO言IMASU,N000,123,__,050210,99999,
テスト,:10,田中NONAMAEHA一郎TOIIMASU,N000,123,__,050210,99999,
テスト,:10,田中NONAMAEHAITIROUTO言IMASU,N000,123,__,050210,99999,
テスト,:10,田中NONAMAEHAITIROUTOIIMASU,N000,123,__,050210,99999,
テスト,:10,TANAKANONAMAEHA一郎TO言IMASU,N000,123,__,050210,99999,
テスト,:10,TANAKANONAMAEHA一郎TOIIMASU,N000,123,__,050210,99999,
テスト,:10,TANAKANONAMAEHAITIROUTO言IMASU,N000,123,__,050210,99999,
テスト,:10,TANAKANONAMAEHAITIROUTOIIMASU,N000,123,__,050210,99999,
というような形です。(_ _(--;(_ _(--;
0557デフォルトの名無しさん
2005/11/28(月) 19:39:55だから宿題は自分でやれって。
#!/usr/local/bin/perl -w
use encoding "shiftjis";$c=2;sub branch{my($s,$t,$n,$r)=@_;if($n==$#$t){push@$r
,$s.$_ for@{$t->[$n]}}else{branch($s.$_,$t,$n+1,$r)for@{$t->[$n]}}}while(<DATA>
){@f=split/,/;@t=map/^([^A-Z]+)<([A-Z]+)>\z/?[$1,$2]:[$_],split
/([^A-Z]+<[A-Z]+>)/,$f[$c];branch"",\@t,0,\@r;$f[$c]=$_,print join",",@f for@r}
__DATA__
テスト,:10,田中<TANAKA>NONAMAEHA一郎<ITIROU>TO言<I>IMASU,N000,123,__,050210,99999,
0558デフォルトの名無しさん
2005/11/28(月) 19:50:51多分先生に説明求められるだろうな。
学校で再帰や foreachの単純文使う段階に
入ってると思えねーw
0559デフォルトの名無しさん
2005/11/28(月) 19:54:210560544
2005/11/28(月) 20:01:28っていうかあんた意外にいい人だね〜○感謝
自分でももっと勉強の必要ありだと実感しました。
0561デフォルトの名無しさん
2005/11/28(月) 20:02:010562デフォルトの名無しさん
2005/11/28(月) 21:09:55> 回答があっても理解できないレベルじゃ聞いても無駄なんじゃ...
なんで? 写して出せば終わりじゃん。
0563デフォルトの名無しさん
2005/11/28(月) 21:11:340564デフォルトの名無しさん
2005/11/28(月) 21:44:39あれは一体何をしたいんだ。何の意味があるんだ。
0565デフォルトの名無しさん
2005/11/28(月) 21:47:24>何の意味があるんだ。
同意w
0566544
2005/11/28(月) 22:54:36端的に言うとこれは辞書の一部です。プログラムの目的自体は読み仮名と漢字の展開です。
田中という漢字の読み仮名が<>にあってそれぞれ別で辞書に登録したいということです。
0567554
2005/11/28(月) 23:11:35よく解らんが、キミが>>556 に書いたとおりの結果を得たいのなら、
>>554の結果も全くその通りになっているのだが。これでまだ不足があるのかな?
0568デフォルトの名無しさん
2005/11/28(月) 23:17:200569デフォルトの名無しさん
2005/11/28(月) 23:21:07なんつーか、それなら文字コードとかもっと学ばないといけないような・・
一応出力するプログラムができても、それに意味はないというか・・
0570デフォルトの名無しさん
2005/11/28(月) 23:38:06出せと逝ってくるようじゃ終わってるな
時間がありあまってる学生時代からこれじゃな…
0571デフォルトの名無しさん
2005/11/28(月) 23:58:15残念ながら君のコードが意図通り動くかどうかは環境依存の上、
s/// の REPLACEMENT で $1 の代わりに \1 を使うお過ちを
している。
0572デフォルトの名無しさん
2005/11/29(火) 00:03:440573デフォルトの名無しさん
2005/11/29(火) 00:51:32今後はこの辺へ振るか。
Perlでリクに答えるスクリプトを作るスレ
http://pc8.2ch.net/test/read.cgi/tech/1086143976/
0574デフォルトの名無しさん
2005/11/29(火) 01:02:31これ経験した人いる?なんで?
0575デフォルトの名無しさん
2005/11/29(火) 09:30:39そういう経験はないな。しかしNet::POP3って添付ファイルの解析は
やってくれないのでいきなりそういう結果は出ないと思うが。どうして
Net::POP3のせいでかけたと考えたのかね?
0576デフォルトの名無しさん
2005/11/29(火) 09:32:47という文字列のコーヒーという部分を太文字にするために
$str="あああ<B>コーヒー</B>あああ";のようにコーヒーの部分だけ
置換するにはどうすればいいですか?
0577デフォルトの名無しさん
2005/11/29(火) 09:53:450578デフォルトの名無しさん
2005/11/29(火) 09:53:48$str =~ s!コーヒー!<B>コーヒー</B>!;
0580デフォルトの名無しさん
2005/11/29(火) 10:01:03このくらいわからないでperl使ってるというのは信じられん
のだが釣り?
0581デフォルトの名無しさん
2005/11/29(火) 10:05:14chompじゃなくてchop使ってたり、、という事じゃないよね。まさか
0582デフォルトの名無しさん
2005/11/29(火) 10:05:53他人が書いた掲示板を弄ってみたいとか、そんなんだろ
0583329
2005/11/29(火) 10:19:18の>>321から書込みを続けている者なんですが、もしPERLで詳しい方で
アドバイスいただける方いたら、あっちのスレのほうで教えてください。
0584デフォルトの名無しさん
2005/11/29(火) 10:30:31文字列$text_dataが含まれている部分だけ太字にしたかったんですけど
$honbun=~s/$text_data/<B>$text_data<\/B>/g;
でやってうまくいくんですが
入力された文字列がコーヒーという文字列だとエラーが出ちゃうんです。
うまく処理できる方法を教えてください
0585デフォルトの名無しさん
2005/11/29(火) 10:41:55スクリプトファイルの文字コードを euc に変えなされ。
0586デフォルトの名無しさん
2005/11/29(火) 11:25:16内部コードをEUCにして http://www.din.or.jp/~ohzaki/perl.htm に紹介されているような
技を使うか、use utf8して全部ユニコードで扱うかどっちかだな。
0587デフォルトの名無しさん
2005/11/29(火) 14:07:11if (A=1) {ここでCという値には3足して、Dという値には4足したい}
elsif (A=2) {Cに100足して、Dには40足したい}
こういった構文を作るにはどうすればいいですか?
普通if文の後って1つしか処理は出来ないの?
0588デフォルトの名無しさん
2005/11/29(火) 14:09:120589デフォルトの名無しさん
2005/11/29(火) 14:14:090590デフォルトの名無しさん
2005/11/29(火) 14:18:10つ quotemeta
0591デフォルトの名無しさん
2005/11/29(火) 14:21:420592デフォルトの名無しさん
2005/11/29(火) 14:23:530593デフォルトの名無しさん
2005/11/29(火) 14:25:46c、c++やパスカルくらいだと思ってましたよ。
0594デフォルトの名無しさん
2005/11/29(火) 14:45:032つの変数に足し算を2回処理するとか出来ないの!?
0595デフォルトの名無しさん
2005/11/29(火) 15:04:480596デフォルトの名無しさん
2005/11/29(火) 16:06:06出来るよ。
以上
0597デフォルトの名無しさん
2005/11/29(火) 21:07:23通常のメーラーとNet::POP3で落とした同メールでソースを比較したら、
Net::POP3の方は、base64でエンコードされた添付の部分の最初1バイトが欠けてるんです。
もちろんデコードしても壊れてるし。
Socketを使ってPOPサーバへ接続したら欠けてないんですけどね。
0598デフォルトの名無しさん
2005/11/29(火) 21:11:17サーバソフトウェアはどんなの使ってるの?
0599デフォルトの名無しさん
2005/11/29(火) 21:32:16メールサーバーソフトウェア?
それ分からないけど。
って事は、Net::POP3に問題無いって事なのかな。
0600デフォルトの名無しさん
2005/11/29(火) 21:47:32いや、わからんけど、
Net::POP3 みたいなメジャーなモジュールに問題があるとは考えにくいので、
普通は自分の実行環境の方に問題がないかというところから攻めて行くっしょ。
0601デフォルトの名無しさん
2005/11/29(火) 21:49:460602デフォルトの名無しさん
2005/11/29(火) 21:50:44選択したファイルの名前を変数に設定するにはどうすればいいの?
0603デフォルトの名無しさん
2005/11/29(火) 22:11:28学内だし、SMTPもPOPも同じはず。。。?
でも、壊れたり壊れなかったりなんですわ。
添付内容が変わるだけの定型文のメールだし。
>>601
添付の最初の1バイト。
添付ファイルに該当する部分の最初の1バイトです。
0604デフォルトの名無しさん
2005/11/29(火) 22:33:400605デフォルトの名無しさん
2005/11/29(火) 22:58:55passwdなどのパスワード入力を後から聞いてくるタイプのコマンドは
どうやって送ればいいのでしょうか?
よろしくです
0606デフォルトの名無しさん
2005/11/29(火) 23:05:44こんな感じ。
って、ほとんどなにもいじってないけど。
------------------------------------
use Net::POP3;
$pop = 'popサーバ';
$u = 'アカウント';
$p = 'パスワード';
my $oPop = Net::POP3->new($pop);
$oPop->login($u,$p);
my $rhMsg = $oPop->list();
foreach my $sMsgId (keys %$rhMsg) {
print @{$oPop->get($sMsgId)};
}
0607デフォルトの名無しさん
2005/11/29(火) 23:24:20漏れなら Expect を使う。
0608デフォルトの名無しさん
2005/11/30(水) 00:17:30それで再現すんの?俺の手元じゃ再現しないぜ。
0609デフォルトの名無しさん
2005/11/30(水) 01:28:26ちょwwww 大ボスたおしとくwwwww
if ( $A == 1 ) { $C += 3; $D += 4; }
elsif ( $A == 2 ) { $C += 100; $D += 40; }
0610デフォルトの名無しさん
2005/11/30(水) 08:39:19大ボスは倒しても形態を変えて再登場するのが普通
0611デフォルトの名無しさん
2005/11/30(水) 08:47:49if ( $A == 1 ) $C += 3, $D += 4;
elsif ( $A == 2 ) $C += 100, $D += 40;
0612デフォルトの名無しさん
2005/11/30(水) 08:53:00(゚Д゚)ハァ?
0613デフォルトの名無しさん
2005/11/30(水) 09:18:20それだけのプログラムで欠けるというのはかなり不思議だね。
バグかもしれないのでがんばって追求すると楽しめそう。
オレのところでは再現しないので残念だ。
0614デフォルトの名無しさん
2005/11/30(水) 09:27:44UNIX鯖の場合とWIN鯖の場合を教えてください
0615デフォルトの名無しさん
2005/11/30(水) 10:36:23(WEBプログラミング板 http://pc8.2ch.net/php/ )
0616デフォルトの名無しさん
2005/11/30(水) 11:13:03なんでWebProg板なの?
別にここでもいいと思うんだけど
0617デフォルトの名無しさん
2005/11/30(水) 11:31:28うるせーよカスムシが
それぐらい自分でしらべろや。
大体なんで鯖なんだよ、鯖ならwebprog板いけよ低脳、Perlスレがあること自体
板違いなんだよ。自覚しろや
opendir(DIR,shift @ARGV);
@dir=readdir(DIR);
foreach(@dir){print "$_\n";}
0618616@ 203.162.27.195
2005/11/30(水) 11:32:33勝手に決め付けないでね中学生さん
0619デフォルトの名無しさん
2005/11/30(水) 11:33:230620617
2005/11/30(水) 11:40:01ならコード書けばいいだろうが
うるせーよ無職ニートがなんでこんな時間に2chいるんだww
俺は授業だけどな
opendir(DIR,shift @ARGV);
@dir=readdir(DIR);
$dirsize=0;
foreach(@dir){
print "$_ ";
$size=-s $_;
print "$size\n";
$dirsize+=$size;
}
print "--- dirsize $dirsize\n";
0621デフォルトの名無しさん
2005/11/30(水) 11:43:180622デフォルトの名無しさん
2005/11/30(水) 12:09:38http://digit.que.ne.jp/work/index.cgi?Perl%A5%E1%A5%E2%2FPerl%A4%C7%A5%E1%A1%BC%A5%EB%A4%F2%BC%F5%A4%B1%A4%EB
「Perlメモ/Perlでメールを受ける」
http://homepage3.nifty.com/hippo2000/perltips/rcvmail.htm
「Perlでメールを受ける」
Net::POP3のことはよく解らないが、上のページとかを見ると、
日本語を扱うために結構苦心しているようだ。単純にはいかないのだろう。
0623デフォルトの名無しさん
2005/11/30(水) 12:23:09試してないから自信ないが…。
print dirSize(".");
sub dirSize {
my ($dir) = @_;
my $sum = 0;
$sum += (-d)? dirSize($_): -s for glob("$dir/*");
return $sum;
}
0624デフォルトの名無しさん
2005/11/30(水) 12:24:07読み込み方教えてください。
それと超がつくほど初心者な質問ですが、
文字関数で日本語の文字列を全角500くらいを扱えるのを
定義するにはどうすればいいですか?
0625デフォルトの名無しさん
2005/11/30(水) 12:35:480626デフォルトの名無しさん
2005/11/30(水) 12:40:57日本語でおk
0627デフォルトの名無しさん
2005/11/30(水) 12:40:59中にあるb.cgiに渡して、b.cgiの&keisanというサブルーチンを実行して、
そのサブルーチンから、また a.cgiにkeisanから弾きだされた結果を送るということなんです。
なにせ、そのkeisanがあまりにも長いためメインのa本体と別にしたいなと思いまして
0628デフォルトの名無しさん
2005/11/30(水) 12:42:32use b.cgi
とかけばいいだけだろ
0629デフォルトの名無しさん
2005/11/30(水) 12:42:54あ、私が意図したものは
$kekka="あなたは非常に素晴らしいです・・・・・(ここに入る日本語の文字列が500文字を超えるという意味です)"
↑のように""の内容が非常に膨大な文字列のときに適した文字列関数ってなんですか?
0630デフォルトの名無しさん
2005/11/30(水) 12:43:36そんなことできるんですか?ちなみにa.cgiの変数はそのまま継続して使えるのですか?
0631デフォルトの名無しさん
2005/11/30(水) 12:47:130632デフォルトの名無しさん
2005/11/30(水) 12:48:04釣りなら帰れ
0633デフォルトの名無しさん
2005/11/30(水) 12:48:050634デフォルトの名無しさん
2005/11/30(水) 12:50:470635デフォルトの名無しさん
2005/11/30(水) 12:54:44すまんが、日本語を先に勉強してきてくれ。
0636デフォルトの名無しさん
2005/11/30(水) 12:55:06use b.cgiして
&&keisan();をすればいいだけですか!?
そうすると普通に a.cgiに記述されていた場合と同じ結果になるのかな?
0637デフォルトの名無しさん
2005/11/30(水) 12:55:53どうすればいいですか?
0638デフォルトの名無しさん
2005/11/30(水) 12:57:450639デフォルトの名無しさん
2005/11/30(水) 13:01:17脳内置換したら名前欄が614になっちゃって、しばらくおかしいなと考え込んだ件
>>614
Filesys::DiskUsage
>>624
>>1
> CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
いや、煽りとかじゃなくマジで。
二つ目は、普通に文字列を変数に入れれば良いんじゃないかな。長さは関係ないわけだが…
CGIから受け取った云々というのならそれもWebProg板行き
0640デフォルトの名無しさん
2005/11/30(水) 13:02:48ありがとう!!!
文字数の長さは関係ないんだね!!ありがとー
0641デフォルトの名無しさん
2005/11/30(水) 19:00:49性別
回答者合計者○($SEXSUM)名中
男○($SEXMALE)名
女○($SEXFEMALE)名
というのをHTMLで出力したいんだけど、ディレクトリに SEX.txtというのを置いて
そのtxtファイルの中に「 0,0 」
というふうに男女の初期値の人数をいれておいて。
毎回フォームから'GENDER'の値が0(男性).もしくは1(女性)で送ってきた時のみ。
SEX.txtを読み込んで、1足して表示→そして読み込んだSEX.txtの人数の一人プラスという
ようなPERLスクリプト分かる人いますか?
0642デフォルトの名無しさん
2005/11/30(水) 19:03:240643デフォルトの名無しさん
2005/11/30(水) 19:03:490644デフォルトの名無しさん
2005/11/30(水) 19:10:110645デフォルトの名無しさん
2005/11/30(水) 19:10:51マルチ放置推奨
0646デフォルトの名無しさん
2005/11/30(水) 19:16:48open(my $fh, "+<セックス.txt") or die $!;
my ($males, $females) = split(/,\s*/, <$fh>);
seek($fh, 0, 0);
($GENDER)? $males++: $females++;
print $fh ("$males, $females");
0647デフォルトの名無しさん
2005/11/30(水) 19:17:520648デフォルトの名無しさん
2005/11/30(水) 19:19:11ってか携帯でコード書くなんて珍しいな・・
0649デフォルトの名無しさん
2005/11/30(水) 19:34:00どうしても今すぐ知りたかったので・・・
0650デフォルトの名無しさん
2005/11/30(水) 19:43:040651デフォルトの名無しさん
2005/11/30(水) 19:50:010652デフォルトの名無しさん
2005/11/30(水) 20:07:25それがマナー違反なんだよ。死ね。
0653デフォルトの名無しさん
2005/11/30(水) 20:14:17>>622
自力で再現できないんで、原因不明ですわ。
メールのヘッダとか見てても、他のメールとさして違いないんだけど・・・
今日、SocketとMIME::Parser使って作りなおしました。
こいつを育てます。
いろいろありがとう。
0654デフォルトの名無しさん
2005/11/30(水) 20:17:57お前が市ね、外道が!
0655デフォルトの名無しさん
2005/11/30(水) 20:35:570656デフォルトの名無しさん
2005/11/30(水) 21:15:16WebProg板の方に答え書いといたよ
0657デフォルトの名無しさん
2005/11/30(水) 22:35:430658デフォルトの名無しさん
2005/11/30(水) 23:16:570659デフォルトの名無しさん
2005/11/30(水) 23:22:050660デフォルトの名無しさん
2005/12/01(木) 01:23:38Pugsじゃ駄目なん?
0661デフォルトの名無しさん
2005/12/01(木) 09:28:33それを $Gに読み込んで そこまでは分かるんだが
my ($A, $B, $C, $D, $E, $F) = split(/,\s*/, <$G>);
というように。
このあと読み込んだ6つの数字を全て0, 0, 0, 0, 0, 0 にしたいので
seek($G, 0, 0, 0, 0, 0, 0);
としたら最初の2つ目の変数までは0に処理されるんだけど、3つ目以降の0からは
エラー対象になります。
分かる人いますか?
0662デフォルトの名無しさん
2005/12/01(木) 09:38:49そもそも何をを考えてるのかさっぱりわからん
0663デフォルトの名無しさん
2005/12/01(木) 09:41:32seekの使い方が間違っています。
seekはファイルの読み書き位置を変更するものです。
0664デフォルトの名無しさん
2005/12/01(木) 09:51:200665デフォルトの名無しさん
2005/12/01(木) 09:51:22エスパー翻訳:
6つの値をコンマ区切りで一行に書いたファイルがあって、それらの
値を一つずつ変数に読み込ませたい。ファイル名が $G 、ファイルの
内容が
0, 1, 2, 3 , 4, 5
だとして、
my($A, $B, $C, $D, $E, $F) = split(/,\s*/, <$G>);
でそれができると思う。
変数に読み込んだのち、ファイルの値は全て 0 に書き換えたいので、
seek($G, 0, 0, 0, 0, 0, 0);
としたら "Too many arguments for seek at ..." と怒られた。
どう書けば意図通り動くか分かる人いますか?
エスパー回答:
>>2 に載っている入門サイトや入門書を熟読せよ。
0666デフォルトの名無しさん
2005/12/01(木) 09:52:34だったんだね
0667デフォルトの名無しさん
2005/12/01(木) 09:53:390668デフォルトの名無しさん
2005/12/01(木) 11:23:47お、おめぇ >>587 だろw
0669デフォルトの名無しさん
2005/12/01(木) 11:34:540670デフォルトの名無しさん
2005/12/01(木) 13:38:100671デフォルトの名無しさん
2005/12/01(木) 14:10:21ドラクエだとあと1,2回あるんだよな。MP温存しとかんとやられるぞ
0672デフォルトの名無しさん
2005/12/01(木) 20:27:010673デフォルトの名無しさん
2005/12/01(木) 20:39:410674デフォルトの名無しさん
2005/12/01(木) 21:58:01$AAAが$BBBという文字列を含んでいるなら・・・
としたいのですがこのままだとエラーがでてしまいます。
どのように修正すればいいのでしょうか?
0675デフォルトの名無しさん
2005/12/01(木) 21:59:540676674
2005/12/01(木) 22:04:030677デフォルトの名無しさん
2005/12/01(木) 22:12:43マルチいくない。
0678デフォルトの名無しさん
2005/12/01(木) 22:16:48なんかそういうのってどうなんだろうねえ?
0679677
2005/12/01(木) 22:43:07http://pc8.2ch.net/test/read.cgi/php/1129477637/843-
0680デフォルトの名無しさん
2005/12/01(木) 22:54:07LWP::UserAgentで、Basic認証をしたいのですが、どのようにコードを書けば良いのでしょうか。
0681デフォルトの名無しさん
2005/12/01(木) 22:58:17「LWP Basic」で Google に Go!!
0682デフォルトの名無しさん
2005/12/02(金) 00:34:17http://homepage3.nifty.com/hippo2000/perltips/lwpcook.html#ACCESS_TO_PROTECTED_DOCUMENTS
0683酩酊 ◆TWARamEjuA
NGNG20 my $response = $request->authorization_basic($id, $pw);
30 goto google.com;
0684デフォルトの名無しさん
2005/12/02(金) 09:48:3120文字ごとに自動改行いれる方法わかる椰子いる?
0685デフォルトの名無しさん
2005/12/02(金) 09:50:130686デフォルトの名無しさん
2005/12/02(金) 09:59:210687デフォルトの名無しさん
2005/12/02(金) 10:01:03usu Jcode;
print jcode($str)->jfold(20)-euc();
<br>で改行したけりゃ
print jcode($str)->jfold( 20, '<br>' )-euc();
perl5.8.1以降なら第三引数に行頭禁則文字の配列リファレンスを渡せますが何か?
0688デフォルトの名無しさん
2005/12/02(金) 10:05:54↓一行でできるわ。
print join /\n/, map{ jcode($_)->jfold(20)-euc() } split /\n/, $str;
0689デフォルトの名無しさん
2005/12/02(金) 10:09:02メール出力だから<BR>の代わりに\n にすればいいだけかな
0690デフォルトの名無しさん
2005/12/02(金) 10:10:19てかドキュメント嫁
http://openlab.ring.gr.jp/Jcode/index-j.html
0691689
2005/12/02(金) 10:16:300692689
2005/12/02(金) 10:46:12# $str を $bytesバイトで折り返す
require 'fold.pl';
while (length($str)) {
(my $folded, $str) = fold($str, $bytes);
print $folded, "\n";
}
というソースを見つけたはいいものの、
$BODYというのに$STRに入ってる日本語の文字を40バイトごとで折り返して追加して
いきたいんだけど、 print $folded, "\n"; のところを
$body .= "$folded";
でいいかな?
0693689
2005/12/02(金) 10:51:53while (length($string)) {
(my $folded, $string) = fold($string, 40);
$body .= $folded, "\n";
}
一応出力されてメールは送ってくるけど、全角20時ごとに改行されていない
なんでだろ
0694デフォルトの名無しさん
2005/12/02(金) 11:03:50× $body .= $folded, "\n";
○ $body .= $folded. "\n";
0695デフォルトの名無しさん
2005/12/02(金) 11:21:18なんで join の第一引数を /.../ にするんだろう.
意味ないと思うんだけど.
0696デフォルトの名無しさん
2005/12/02(金) 11:49:26rename関数でtest.datを他のディレクトリに移動するとtest.datのデータは壊れますか?
こういう場合もファイルロックをかけるんでしょうあ?
0697デフォルトの名無しさん
2005/12/02(金) 12:26:26$_ =~ m/.../ の結果(空文字列 or "1")でjoinしたい気分だったとか?
>>696
環境依存。
renameが失敗するとか、renameが成功してファイルも無事だとか。
0698689
2005/12/02(金) 13:19:58ありがとう。でけた!ただ、やっぱり、この命令つかって
メール生成しても、多少ずれるのね orz
0699689
2005/12/02(金) 13:25:220700689
2005/12/02(金) 13:42:35メール(OE)だと、かなり毎行ずれてる orz
0701デフォルトの名無しさん
2005/12/02(金) 13:48:10フォントのせいじゃないのか?
固定幅フォント使ってる?
0702689
2005/12/02(金) 13:51:49OEの設定の問題ってことかな?
OEの設定は
プロポーショナルフォント:MS Pゴシック
固定ピッチフォント:MS ゴシック
フォントサイズ:中
エンコード:日本語(自動選択)になってるよ
0703689
2005/12/02(金) 13:53:15それってさ、送信する段階で、相手のメーラーソフトがどんなものであれ、
ずれないようにして幅を統一させるようなことってできない?
0704デフォルトの名無しさん
2005/12/02(金) 14:01:040705デフォルトの名無しさん
2005/12/02(金) 14:03:160706689
2005/12/02(金) 14:03:57HTML出力ならまだしも。。。。
0707689
2005/12/02(金) 14:04:53リッチテキストスタイルにするとか、何かいい案はありませんか?
0708デフォルトの名無しさん
2005/12/02(金) 14:08:110709デフォルトの名無しさん
2005/12/02(金) 14:10:050710689
2005/12/02(金) 14:13:36すげぇ難しそう。画像ファイルを生成して添付しろとなもし?
普通、数とか文字列的なデータはCSVに生成して添付する方法なら簡単だけど、
画像の生成の仕方わからんw
0711デフォルトの名無しさん
2005/12/02(金) 14:14:20消えてくれないかな
0712デフォルトの名無しさん
2005/12/02(金) 14:15:010713デフォルトの名無しさん
2005/12/02(金) 14:19:08固定幅フォントで読むのを推奨する旨の注意書きを入れるケースが多いように思う。
つーか、ここから先は Perl 関係ないので余所でやって欲しい。
0714デフォルトの名無しさん
2005/12/02(金) 15:01:04回避方法はありますか?
0715デフォルトの名無しさん
2005/12/02(金) 17:03:37文字化けってのが理解できない。
BOM付きのutf16leが欲しいのに、
encode('utf16',decode('utf16',$input)) だとutf16beになって、
encode('utf16le',decode('utf16',$input)) だとBOM無しになるって事?
それなら、自分でencode前か後にBOMを追加すればいいはず。
0716デフォルトの名無しさん
2005/12/02(金) 17:58:49http://developer.yahoo.co.jp/
サンプルコードは低脳が書いたとしか思えないけど
0717デフォルトの名無しさん
2005/12/02(金) 18:32:03サンプルコードが酷いwwww
0718デフォルトの名無しさん
2005/12/02(金) 18:48:32http://developer.yahoo.co.jp/glossary/
> REST
> REpresentational State Transferの略語。HTTPリクエストに対してXMLをレスポンスとして返す。
> Yahoo!検索WebサービスはRESTを採用しています。
REST ってそういう意味だっけ……?
0719デフォルトの名無しさん
2005/12/02(金) 18:52:45@aaa=(10,25,35,69,190);
@aaa2=sort(@aaa);
foreach $_(@aaa2){
print "aaa=$_<BR>";
}
実行すると
aaa=10
aaa=190
aaa=25
aaa=35
aaa=69
となってしまいます。
sort関数ではちゃんとできないんでしょうか?
0720デフォルトの名無しさん
2005/12/02(金) 18:57:380721デフォルトの名無しさん
2005/12/02(金) 19:18:25具体的に説明できる能力がない orz
ttp://rakunet.org/TSNET/TSperl/10/311.html
を見ると、0A00 が泣き別れになるのを防げばいいらしいのだけど…
UTF-16LEで読み込み>置換処理>UTF-16LEで保存って考えると、
手も足も出ない。
cygwin上では出ない症状だから、不便じゃないのだけど。
0722デフォルトの名無しさん
2005/12/02(金) 19:36:04お前はPerlよりGoogleたんの使い方からはじめるべきだ。
低脳な質問はWebProg板でしろ!!
# 数字昇順
@BB=sort{$a <=> $b}@AA;
# 数字降順
@BB=sort{$b <=> $a}@AA;
http://66.102.7.104/search?q=cache:mak05M6bOSAJ:tech-web.net/perl_memo.html+%E6%95%B0%E5%AD%97+sort+perl&hl=ja&lr=lang_ja
0723715
2005/12/02(金) 20:14:58もしかしてbinmode?
open($fh,"<:raw:encoding(utf16le)",$filename);
又は
binmode($fh,":raw:encoding(utf16le)");
あたりかと。
0724デフォルトの名無しさん
2005/12/02(金) 20:28:410725デフォルトの名無しさん
2005/12/02(金) 20:48:14>低脳な質問はWebProg板でしろ!!
ワラタ
0726デフォルトの名無しさん
2005/12/02(金) 20:59:36実際にやってみろよ
それぐらいすぐできるだろ
0727デフォルトの名無しさん
2005/12/02(金) 21:10:44それはOSによって違うかも。
UNIX系OSの場合はファイルオープン後は i-node (ファイルの内容を指す
位置情報のようなもの)しか見てないので幾らファイル名を変えようが
ハードリンク増やそうが関係ない。
0728デフォルトの名無しさん
2005/12/02(金) 21:43:57なんかバグがあるようです。
@a = ("aaa", "bbb","ccc")
ような配列をprintすると、なんか
aaa
bbb
ccc
と、変な風にズレます。(ほんとはもっと高度なスクリプト)
5.6では問題なかったです。
一応報告まで。
0729デフォルトの名無しさん
2005/12/02(金) 21:48:29aaabbbccc
になるはずだが
>(ほんとはもっと高度なスクリプト)
ここを公開しないで何の意味があるのかね
0730デフォルトの名無しさん
2005/12/02(金) 21:51:07あー、また文字列中に変数展開しているオチっぽいのがきたね。
0731デフォルトの名無しさん
2005/12/02(金) 22:13:39> (my $sec,my $min,my $hour,my $mday,my $mon,my $year) = localtime($y_modificationdate);
これは あらての つりだ
0732デフォルトの名無しさん
2005/12/02(金) 22:25:150733デフォルトの名無しさん
2005/12/02(金) 22:30:12→Perl本体のバグだ という思考回路か
0734デフォルトの名無しさん
2005/12/02(金) 22:36:23釣りか?釣りか?
$" = '';
0735デフォルトの名無しさん
2005/12/02(金) 23:47:52ウチにもいるぞー。
何かっつーとすぐOSやらGCCやら環境がバグってるって言い出すヤツ。
0736デフォルトの名無しさん
2005/12/02(金) 23:52:55> と、変な風にズレます。(ほんとはもっと高度なスクリプト)
仕様です。
きっとその高度なスクリプトには、
「chomp していない値を放り込んだ配列をダブルクォート展開する」
というのっぴきならないニーズがあるんですね。
これは恐らくあなたの Perl 歴よりも長い歴史を持つ伝統的な FAQ なので、これを機会にしっかり覚えましょう。
0737デフォルトの名無しさん
2005/12/02(金) 23:55:21久々にワラタ
0738デフォルトの名無しさん
2005/12/02(金) 23:55:49http://kage.monazilla.org/system_DOLIB100.html
を参考にして●ログインスクリプトをperlで書きましたが
ログインしようとするとエラーになります。
以下のものが作ったスクリプトです。
何かアドバイスをください。
#ログインIDとパスワードは伏字にしております。
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use HTTP::Headers;
my $ua = LWP::UserAgent->new;
$ua->default_header( 'User-Agent' => 'DOLIB/1.00'.$ua->agent );
$ua->default_header( 'X-2ch-UA' => 'kage/1.00'.$ua->agent );
$ua->default_header( 'Content-Length' => '36'.$ua->agent );
$ua->default_header( 'Content-Type' => 'application/x-www-form-urlencoded'.$ua->agent );
$ua->default_header( 'Connection' => 'Close'.$ua->agent );
# リクエストの生成
my $url = 'https://2chv.tora3.net/futen.cgi';
my %formdata = ('ID' => 'XXXX%40xxxx%2ene%2ejp', 'PW' => 'XXXXXXXX');
my $request = POST($url, [%formdata]);
0739デフォルトの名無しさん
2005/12/03(土) 00:15:430740デフォルトの名無しさん
2005/12/03(土) 00:20:03すみません。
HTTP/1.1 200 OK
Connection: close
Date: Fri, 02 Dec 2005 14:47:54 GMT
User-Agent: Monazilla/1.00
Server: Apache/2.0.49 (Unix) PHP/4.3.6 mod_ssl/2.0.49 OpenSSL/0.9.7c-p1
Content-Length: 204
Content-Type: text/plain
Client-Date: Fri, 02 Dec 2005 14:47:52 GMT
Client-Peer: 206.223.147.50:443
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /C=US/O=Equifax Secure Inc./CN=Equifax Secure Global eBu
siness CA-1
Client-SSL-Cert-Subject: /C=US/O=2chv.tora3.net/OU=https://services.choicepoint.
net/get.jsp?4135261678/OU=See www.geotrust.com/resources/cps (c)04/OU=Domain Con
trol Validated - QuickSSL(R)/CN=2chv.tora3.net
Client-SSL-Cipher: DHE-RSA-AES256-SHA
Client-SSL-Warning: Peer certificate not verified
SESSION-ID=ERROR:ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppp
0741デフォルトの名無しさん
2005/12/03(土) 00:25:52お前さん、LWP::UserAgentの使い方を間違えてないか
0742741
2005/12/03(土) 00:30:31これは経験からだが
●ログイン時の注意点
・ID/PWをエンコードして渡すとエラーになる
・返ってきたsidの最後の\nをchop()で刈り取る
コードはお前さん向けに編集するからまっとれ
0743741
2005/12/03(土) 00:36:56my($ua, $r, $sid) = ();
my($id, $pw) = @_;
$ua = LWP::UserAgent->new;
$ua->max_redirect(0);
$ua->agent('DOLIB/1.00');
$ua->default_header('X-2ch-UA' => 'Hoge/1.00');
$r = $ua->get('https://2chv.tora3.net/futen.cgi?ID=' . $id . '&PW=' . $pw);
if($r->is_success){
(undef, $sid) = split(/=/, $r->content, 2);
if($sid =~ /^ERROR/s){ return undef; }
chop $sid;
return $sid;
}else{ return undef; }
}
こんな感じかな
編集ミスとかあったらすまん
0744デフォルトの名無しさん
2005/12/03(土) 00:49:410745デフォルトの名無しさん
2005/12/03(土) 00:54:50>>743を試してみたんですが
$r->contentに
SESSION-ID=ERROR:ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppp
がはいってますね。うーん、どこが間違っているんでしょうか・・・
0746741
2005/12/03(土) 01:01:19俺の環境では正常だったが・・
print &ch2_maru_login('[email protected]', 'password');
ってやった
0747デフォルトの名無しさん
2005/12/03(土) 01:07:24あ、、、できました。
print &ch2_maru_login("[email protected]", "password");
と書いてました。。。
ありがとうございました。
0748デフォルトの名無しさん
2005/12/03(土) 01:12:37展開する必要がない場合は極力シングルクォートにしような。
0750デフォルトの名無しさん
2005/12/03(土) 01:23:57while(<>) {
if(/#BOOKTITLE#\((.+)\)/) {
print $1, "\n";
}
}
というプログラムを以下のようにテキストファイルと併せて実行すると
$ ./book.pl title.txt
Book title 03
Book title 01
Book title 14
Book title 08
:
:
:
と表示するプログラムなのですが、これを01から順にソートするにはどうすればよいのでしょうか?
マッチ後にリスト配列へ入れてソートしていけばいいらしいのですが。
0751デフォルトの名無しさん
2005/12/03(土) 01:29:38...
print join("\n", sort(@buf));
0752デフォルトの名無しさん
2005/12/03(土) 01:30:25Book title 123
とか出てこないだろうな?
0753デフォルトの名無しさん
2005/12/03(土) 01:51:09実行すると
$ ./book.pl title.txt
$
となるだけで、何も変化がありません。
0754デフォルトの名無しさん
2005/12/03(土) 02:00:35実行はできるのですがソートできていない結果が表示されてしまいます。
0755デフォルトの名無しさん
2005/12/03(土) 02:24:08my ($ref) = ¥%_;
$ref->{'fuga'} = 'World';
}
%hash = (
'hoge' => 'Hello',
'fuga' => 'Hello'
);
&test ( %hash );
print $hash{'hoge'}, $hash{'fuga'}, "¥n¥n";
# sub test に対して連想配列をリファレンスで渡し、
# 渡した元データ自体を sub test 内で直接書き換え、
# 結果として HelloWorld と表示させたい場合、
# sub test 内では、どのようにデリファレンス/代入
# すれば良いでしょうか?
# 現状のこの記述では上手くいきません。
# 力を貸してください。宜しくお願いします。
0756デフォルトの名無しさん
2005/12/03(土) 02:27:01my ($ref) = ¥%_;
$ref->{'fuga'} = 'World';
return %$ref;
}
%hash = (
'hoge' => 'Hello',
'fuga' => 'Hello'
);
%hash2 = &test ( %hash );
print $hash2{'hoge'}, $hash2{'fuga'}, "¥n¥n";
0757デフォルトの名無しさん
2005/12/03(土) 02:38:05my $ref = shift;
$ref->{'fuga'} = 'World';
}
%hash = (
'hoge' => 'Hello',
'fuga' => 'Hello'
);
&test(\%hash);
print $hash{'hoge'}, $hash{'fuga'}, "\n\n";
0758755
2005/12/03(土) 02:40:59素早い解答ありがとうございます。
実は、メモリ節約を模索しておりまして、
引数を丸ごと渡さずに済ませる方法を考えているのです。
説明足らずですいません。
配列で書くと、以下のような感じです。
これを連想配列で行いたいと思っているのです。
sub test ( ¥@ ) {
$_[1] = 'World';
}
@array = ('Hello', 'hello');
&test ( @array );
print $array[0], $array[1], "¥n¥n";
0759755
2005/12/03(土) 02:48:46まさにソレです。
ありがとうございました!
shift は、複数の引数を順に取り出す時ばかり使用していて、
頭が行きませんでした。
それから、引数を与える側の ¥ は、プロトタイプ宣言によって
解釈されるものだと、おもいっきり勘違いしておりました。
感謝です。
0760デフォルトの名無しさん
2005/12/03(土) 03:20:30while (<>) {
push @array, $1 if /#BOOKTITLE#¥((.+)¥)/;
}
print join ("¥n", sort @array), "¥n";
0761デフォルトの名無しさん
2005/12/03(土) 03:43:59>>751
解決できました。
こんな夜遅くに本当にありがとうございました。
0762デフォルトの名無しさん
2005/12/03(土) 15:14:410763デフォルトの名無しさん
2005/12/03(土) 18:54:000764デフォルトの名無しさん
2005/12/03(土) 18:56:580765デフォルトの名無しさん
2005/12/03(土) 19:01:230766デフォルトの名無しさん
2005/12/03(土) 19:38:350767デフォルトの名無しさん
2005/12/03(土) 19:51:420768デフォルトの名無しさん
2005/12/03(土) 19:54:13普通、パールはルビーより値段が安いな。
劣ってるところはそれだけw
0769デフォルトの名無しさん
2005/12/03(土) 20:01:50既にロードされたモジュールに対しては効果が無いようです。
現在はスクリプトの一番初めにロードすることで対処していますが、
後からロードしても大丈夫なような回避方法は無いでしょうか。
0770デフォルトの名無しさん
2005/12/03(土) 20:12:320771デフォルトの名無しさん
2005/12/03(土) 20:16:26環境はActivePerlです。
#! /usr/bin/perl
use utf8;
use Encode;
use File::Find;
@ARGV = ('.') unless @ARGV;
sub process_file{
$file = $File::Find::name;
open IN, "<encoding(cp932)", "$file" or die;
... 以下略
}
find(\&process_file, @ARGV);
0772デフォルトの名無しさん
2005/12/03(土) 20:20:02Pugs 入れようとしたら GHC のインスコで疲れた…
0773769
2005/12/03(土) 20:47:03現在、>>769のようなbuilt-in関数の置き換えを行う必要のあるモジュールを作っています。
現在はそのモジュールを、スクリプトの一番初めにロードすることで対処していますが、
それを後からロードしても大丈夫なような回避方法は無いでしょうか。
宜しくお願いします
0774デフォルトの名無しさん
2005/12/03(土) 20:48:31: が抜けているようだが。("<:encoding(cp932)")
use utf8;ってことはスクリプトの文字コードはUTF-8にしてるのか。
0775771
2005/12/03(土) 21:04:55その部分を修正しましたがが、: の有無は関係ないみたいです。
多言語処理を考えているので、意図的にスクリプトの文字コードをUTF-8にしています。
0776デフォルトの名無しさん
2005/12/03(土) 21:27:16Windowsなら ttp://pxperl.com/ が楽でいいですよ。
0777デフォルトの名無しさん
2005/12/03(土) 21:39:14日本語ファイル名使ってたりする?
0778771
2005/12/03(土) 21:54:02それも除外しています。色々と試しているんですが、subで
print $File::Find::name,"\n";
と追加して、
c:\home>test.pl test
とやると、
test
とのみ出力して、open INのところで落ちてしまいます。
testは同じ階層にあるフォルダで、中に処理対象のファイルを2つ入れています。
findの書き方が悪いのか?とも思っているんですが…
0779デフォルトの名無しさん
2005/12/03(土) 22:19:32> findの書き方が悪いのか?とも思っているんですが…
思ってないで調べろよ。
0780デフォルトの名無しさん
2005/12/03(土) 22:27:360781デフォルトの名無しさん
2005/12/03(土) 22:31:02じゃなくて
print $file, "\n";
0782771
2005/12/03(土) 23:28:21findがファイルもフォルダも区別してなかった。
そのため、最初に$File::Find::nameにフォルダ名が入ってopenで落ちたみたい。
ファイルかフォルダかを判別するif文追加して回避した。
0783デフォルトの名無しさん
2005/12/04(日) 00:10:35気付くの遅いよ。>>780で答え出てるのに。
しかし、use utf8;やuse encoding "cp932";すると日本語ファイル名がまともに
扱えないのはなんとかならんのかな。
0784デフォルトの名無しさん
2005/12/04(日) 01:59:080786デフォルトの名無しさん
2005/12/04(日) 16:10:35fork文を宣言するだけでコマンドプロンプトから落ちるのだけど
プログラムの問題だよね・・・?そんな仕様ないよね。
0787デフォルトの名無しさん
2005/12/04(日) 17:01:180788デフォルトの名無しさん
2005/12/04(日) 17:19:220789デフォルトの名無しさん
2005/12/04(日) 17:25:520790デフォルトの名無しさん
2005/12/04(日) 17:43:04コマンドプロンプト「から」落ちるって、どういう事?
後、forkという記述があるだけで駄目なの?
>>532,543 あたりだと、メインループが走った後の実行は駄目っぽいが...
(Windowsでのforkはスレッドによるエミュレーション)
0791デフォルトの名無しさん
2005/12/04(日) 19:26:42@aaa2=rand(@aaa);
だとうまくいきません。
教えて下さいよろしくお願いします。
0792デフォルトの名無しさん
2005/12/04(日) 19:30:20http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_do_i_shuffle_an_array_randomly
0793デフォルトの名無しさん
2005/12/04(日) 19:46:46学習能力が無いようだし、回答者への礼儀も無いようだな
0794デフォルトの名無しさん
2005/12/04(日) 20:10:340796デフォルトの名無しさん
2005/12/04(日) 22:03:590797786
2005/12/04(日) 22:22:05問題が発生したため、Perl Command Line Interpreter を終了します。 ご不便を
おかけして申し訳ありません。
とでて落ちるみたいです。原因が分かりました。
どうもです。
0798デフォルトの名無しさん
2005/12/04(日) 22:29:51PerlはCで書かれているのでそのようなものは存在しません
0799デフォルトの名無しさん
2005/12/04(日) 23:30:00配列やハッシュのPerlのイデオムは、Cの文法じゃかけない。
0800デフォルトの名無しさん
2005/12/04(日) 23:37:14メモリの確保、解放、踏み越えを気にしない事
0801デフォルトの名無しさん
2005/12/05(月) 00:00:05main()
{
perl("任意のperlプログラム");
}
とかすりゃなんでもアリだからなぁ。これをCプログラムと呼んでいいか
どうかは知らんが。
結局楽に書けるかどうかが違うだけでできることは本質的に同じなんだし。
0802デフォルトの名無しさん
2005/12/05(月) 01:05:34適当なsample.plをつくって、
main () {
perl("sample.pl");
}
として、sample.cで保存したら実行できるんですか?
0803デフォルトの名無しさん
2005/12/05(月) 02:57:12よく読め。
「perlインタプリタを全部ライブラリとして組み込ん」だ場合の話だ。
>801 とは少し違うかもしれないが
「perlcc -c sample.pl
とやると sample.c ができる」
と説明したら理解できるか?
0804デフォルトの名無しさん
2005/12/05(月) 07:38:24エラーが出てインストールできませんでした。
どうすれば正しくインストールされるのでしょうか?
0805804
2005/12/05(月) 07:46:47エラーメッセージの一部は以下の通りです。
t/t1....ok 1/6Can't exec "atq":
そのようなファイルやディレクトリはありません
at /root/.cpan/build/Schedule-At-1.06/blib/lib/Schedule/At.pm line 96.
Schedule::At: Can't exec getJobs command:
そのようなファイルやディレクトリはありません
0806デフォルトの名無しさん
2005/12/05(月) 07:46:550807デフォルトの名無しさん
2005/12/05(月) 11:13:55{RaiseError => 0,PrintError => 1});
if(!$db){
print"接続失敗\n";
exit;
}
これで、接続失敗と出てしまうんですが。文法的な間違いはありますか?
文法的な間違いがないとしたら何が原因にあげられるでしょうか?
どなたかご教授お願いします。
(サーバーにmysqlはインストールされています。ユーザ名、パス等もあってると思われます。
0808デフォルトの名無しさん
2005/12/05(月) 11:16:430809ヽ(´ー`)ノ ◆.ogCuANUcE
2005/12/05(月) 12:05:39$DBI::errstr
0810ヽ(´ー`)ノ ◆.ogCuANUcE
2005/12/05(月) 12:06:310811デフォルトの名無しさん
2005/12/05(月) 15:41:280812デフォルトの名無しさん
2005/12/05(月) 16:48:250813デフォルトの名無しさん
2005/12/05(月) 17:21:590814デフォルトの名無しさん
2005/12/05(月) 17:38:4010文字のアルファベットa,b,・・i,jを0,1,2のいずれかに変換し、すべての組み合わせ
(3の10乗通り)を配列に格納したいのですがどのように書けばいいかわかりません。
なにぶん初心者で苦戦しております。わかる方がいらっしゃいましたら教えていただきたいです。
0815デフォルトの名無しさん
2005/12/05(月) 17:47:45「a,b,・・i,jを0,1,2のいずれかに変換し」
の意味がわからんな。
つか、アルファベッと数字、独立してね?
変換する意味あんの?
0816デフォルトの名無しさん
2005/12/05(月) 18:08:39なんか宿題くさいが。
0817ヽ(´ー`)ノ ◆.ogCuANUcE
2005/12/05(月) 18:57:50use strict;
use warnings;
use Data::Dumper;
my @nPRk = ([]);
foreach (1 .. 10) {
@nPRk = map {
my $__ = $_;
map { [ @$__, $_ ] } (0 .. 2);
} @nPRk;
}
my @result = map { my %hash = (); @hash{'a' .. 'j'} = @$_; \%hash; } @nPRk;
print Dumper(@result);
適当なので真面目にやるなら Math::Combinatorics でも使った方がいいと思うがね。
0818814です
2005/12/05(月) 19:17:46変換というか、置換ですね申し訳ないです。
とくに0,1,2にこだわるわけではなく3つのグループに振り分ける組み合わせ
が知りたかったんです。
0819デフォルトの名無しさん
2005/12/05(月) 19:24:13a,b,・・i,j から3つ選んで (a, b, c) というリストを作る。
このリストのすべての組み合わせを作れ。
ってことか。
(a,a,a)とか同じ文字が入るのはだめなのか?
0820デフォルトの名無しさん
2005/12/05(月) 19:52:23何をどうしたいのか分かんねぇよ。
もうちょっと分かる様に説明しろや。
0821デフォルトの名無しさん
2005/12/05(月) 19:59:140822デフォルトの名無しさん
2005/12/05(月) 20:10:300823デフォルトの名無しさん
2005/12/05(月) 21:13:44一応、systemやopenは大丈夫だし、
予めforkしておけば、Tkを使ってない側ではforkし放題だけどね。
なぜか、スレッドは予め生成してても駄目。
>>814
ほらよ、
@table = (
{a=>0,b=>0,c=>0,d=>0,e=>0,f=>0,g=>0,h=>0,i=>0,j=>0},
{a=>0,b=>0,c=>0,d=>0,e=>0,f=>0,g=>0,h=>0,i=>0,j=>1},
{a=>0,b=>0,c=>0,d=>0,e=>0,f=>0,g=>0,h=>0,i=>0,j=>2},
{a=>0,b=>0,c=>0,d=>0,e=>0,f=>0,g=>0,h=>0,i=>1,j=>0},
:(中略)
{a=>2,b=>2,c=>2,d=>2,e=>2,f=>2,g=>2,h=>2,i=>2,j=>2} );
課題は変換表を作るコード臭いが、質問の答えならこれで充分だろ。
コピー&ペースト&置換の繰返しだと、全要素完成まで10分程度かな。
0824デフォルトの名無しさん
2005/12/05(月) 23:57:44パチスロのシミュレータを作っていまして、65536までの整数の乱数を発生させています。
(そのうちの50までが当たりなどというシステムです。)
しかし、
$rand=int(rand 65536);
では何故か片寄ってしまいます。
srand(time()^($$+($$<<15)));
を記述しても片寄ります。
どんな方法で乱数を発生させているのかは把握していないのですが、
本当にランダムな整数を発生させるような方法がわかるかたがいたら教えて下さい。
(もちろん「本当にランダム」ということはあり得ないことはわかっていますが)
0825デフォルトの名無しさん
2005/12/05(月) 23:59:530826デフォルトの名無しさん
2005/12/06(火) 00:17:500827デフォルトの名無しさん
2005/12/06(火) 00:25:23100回出力する前に同じ数字が2度出てきました。このプログラム
壊れています!!! と叫びながら下半身裸で飛び出してくる奴が。
0828814です
2005/12/06(火) 00:26:38>819さん
わかりづらくてすいませんでした。
たとえば(a,b,c,d,e,f,g,h,i,j,)→(0,1,0,0,2,2,1,2,0,2)
のようにしたかったのです。
0829デフォルトの名無しさん
2005/12/06(火) 00:27:03詳しく
0830デフォルトの名無しさん
2005/12/06(火) 01:31:55オレオレ
0831デフォルトの名無しさん
2005/12/06(火) 01:35:14高校の数学の問題なんかにあるね。
「1から10までの乱数を10個発生させたときに、同じ値がひとつも
存在しない確率はどれくらいか?」
10の階乗 ÷ 10の10乗 = 0.00036288
0832デフォルトの名無しさん
2005/12/06(火) 02:30:17randはOS依存だし、そういう偏り方を気にする場合はMT法お勧め
http://search.cpan.org/~ams/Math-Random-MT-1.04/MT.pm
0833デフォルトの名無しさん
2005/12/06(火) 02:38:52くて Time-HiRes でタイミング依存にした方が実機に近いかもしれないね。
0834デフォルトの名無しさん
2005/12/06(火) 02:52:07∧ ∧
〃⌒ ヽl|l) …ぅぉぇっぷ
/ rノ ;
Ο Ο_)***
0835デフォルトの名無しさん
2005/12/06(火) 03:29:37今、perlでgoogleを使用して検索しようとするプログラムを
作ろうとしているですが、(IEやmozillaなどのブラウザを立ち上げずに)
Googleの入力フォームに検索したい文字列を代入して、
検索させるうまい方法が思い付きません。
Yahooニュースなどから、キーワード(国内、海外、経済etc)以下の
それぞれのトッピックを抜き出したりするなど、すでに記述されて
いる文章を読み込み、出力させることなどはできるのですが、
ポータルサイトなどで、検索して、検索結果を出力させるには
どうすればいいかわからず困っているので、知識をかしてください。
0836デフォルトの名無しさん
2005/12/06(火) 03:36:43クエリを自動生成してやりゃ出来る、といいたいところだが。
Googleの利用規約読んだことあるか?
ttp://www.google.com/intl/ja/terms.html
> 自動クエリの禁止
> Google による明示的な事前の許可なくして Google のシステムに対して
> いかなる自動クエリを送信することも禁止します。 「自動クエリ」には、
> Web サイトがさまざまなクエリに対して Google のどの位置に「ランク付け」
> されるかを判定するために Google にクエリを送るソフトウェアの使用が含まれます。
GoogleAPIなんてのもあるから調べて見れ
http://pc8.2ch.net/test/read.cgi/php/1018614427/
日本語がまともに動かなかった気がするけどな
0837いつもお世話になっております
2005/12/06(火) 04:21:53頭の体操のつもりが、やっつけ仕事気味なんだけれど、
モジュールを使わず組んでみました。
このスクリプトでは、55980通りの結果が出ました。
#! /usr/bin/perl -w
$cols = 10; $total = 0; $result = '';
sub three (¥$¥@) {
my ($digits, @totals) = @_;
if (length $digits == $cols) {
if ($totals[0] > 0 && $totals[1] > 0 && $totals[2] > 0) {
$result .= $digits."¥n"; $total++;
}
return;
}
else {
for (my $i=0; $i<3; $i++) {
$totals[$i]++; &three($digits.$i, @totals); $totals[$i]--;
}
}
}
&three('',(0,0,0));
$total = "total count: $total¥n";
print $total;
open(OUT, '>'.$ENV{'HOME'}.'/result.txt');
print OUT $result, $total;
close(OUT);
0838デフォルトの名無しさん
2005/12/06(火) 04:24:52http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq7.html#what_s_the_difference_between_calling_a_function_as__foo_and_foo__
0839いつもお世話になっております
2005/12/06(火) 04:30:27ちなみに、3つのグループに分かれていない組み合わせは排除しています。
「if ($totals[0] > 0 && $totals[1] > 0 && $totals[2] > 0) {」の行と、
その2行下の「}」をコメントアウトすれば、1または2つのグループに
しか分かれなかった結果も出力します。(その場合、54049通り)
0840いつもお世話になっております
2005/12/06(火) 04:39:090841いつもお世話になっております
2005/12/06(火) 04:45:40>>839
> ×(その場合、54049通り)
> ○(その場合、59049通り)
0842デフォルトの名無しさん
2005/12/06(火) 05:34:320843デフォルトの名無しさん
2005/12/06(火) 05:45:53同じ「乱数」だからということで
パチスロの乱数ロジックを再現できると勘違いして
自己弁護している香具師発見。
0844デフォルトの名無しさん
2005/12/06(火) 06:09:390845酩酊 ◆TWARamEjuA
NGNG純粋に乱数使うとでんでん面白くない罠。
0846デフォルトの名無しさん
2005/12/06(火) 08:01:300847デフォルトの名無しさん
2005/12/06(火) 08:09:400848デフォルトの名無しさん
2005/12/06(火) 08:32:130849デフォルトの名無しさん
2005/12/06(火) 10:51:580850デフォルトの名無しさん
2005/12/06(火) 11:38:480851デフォルトの名無しさん
2005/12/06(火) 11:41:02ロジックを示せないからって
唐突に両成敗を狙うのは不自然すぎますよ(^^)
0853デフォルトの名無しさん
2005/12/06(火) 13:13:07お前ランダムの意味わかってないだろ
0854デフォルトの名無しさん
2005/12/06(火) 13:15:550855デフォルトの名無しさん
2005/12/06(火) 15:56:550856デフォルトの名無しさん
2005/12/06(火) 15:58:020857デフォルトの名無しさん
2005/12/06(火) 16:09:200858デフォルトの名無しさん
2005/12/06(火) 17:24:430859デフォルトの名無しさん
2005/12/06(火) 20:05:37ActivePerlなんですけど、ppmでモジュールをインストールして、
-----
BEGIN {
unshift (@INC, "..");
}
use 〜(インストールしたモジュール名) ;
-----
とかやっても
Can't Locate 〜(モジュール名)in @INC〜
と怒られてしまいます。
うまく行くときといかないときがあってよく分かりません。
何が原因かお分かりの方がいらっしゃいましたら、ご教授ください。
0860デフォルトの名無しさん
2005/12/06(火) 20:14:50うまく行くときと行かないときと言うのは、前にもやったんですけど
できなくてぐちゃぐちゃやってるうちに、
いつの間にかできるようになってたということです。
ファイル自体はきちんとsite/lib/に出来ています。
実行cgiと同じディレクトリわざと置いても認識しません。
0861デフォルトの名無しさん
2005/12/06(火) 20:19:01再現性の無い不具合の解決方法は君にしか分からない。
site/lib/ は始めから @INC に登録されているので、わざわざ
親ディレクトリを追加したりモジュールのファイルを移動させる
必要はない。
0862デフォルトの名無しさん
2005/12/06(火) 20:24:15レスありがとうございます
ということはBEGIN以下は不要ということですね。
(といっても変えても状況は変わりませんが・・・)
もう少しいろいろやってみます。
どうもありがとうございました。
0863デフォルトの名無しさん
2005/12/06(火) 22:40:05そのときの@INCの内容がかかれているはずだから、そこにファイルが
あるかどうか確認するのが基本。わけもわからず適当にいじっても
時間の無駄というものだ。
0864デフォルトの名無しさん
2005/12/06(火) 23:03:030865デフォルトの名無しさん
2005/12/07(水) 00:02:191)種を与える
2)種をアドレスとして適当なところを読んで乱数値とする
3)読んだデータを次の種にする
0866デフォルトの名無しさん
2005/12/07(水) 06:36:290867デフォルトの名無しさん
2005/12/07(水) 07:06:440868デフォルトの名無しさん
2005/12/07(水) 07:34:18動く人ってどう設定してるんだろう。
インストールしてそのままでも動いたためしない。
0869デフォルトの名無しさん
2005/12/07(水) 08:08:20旧版に上書きインストールしてるなら、古い設定が邪魔してないか
レジストリや %INSTALL_PATH%\site\lib\ppm-conf を確認してみ。
対話型インターフェイスで設定するより、*.cfg を直接編集した方が
楽な場合もある。
それとヴァージョンによって結構仕様が変わってるから、解説サイト
の類はアテにせず、正規のドキュメントを読むこった。
http://aspn.activestate.com/ASPN/docs/ActivePerl/5.8/faq/ActivePerl-faq2.html
0870デフォルトの名無しさん
2005/12/07(水) 08:31:43上書きインストールじゃないのは当然ですよ。
それにドキュメントとか全く関係ないレベルで動作しないんだよね。
仕方ないから普段はモヂュールは使わない、仕方なく使うときは
手動でインストールしてるよ。
0871デフォルトの名無しさん
2005/12/07(水) 08:46:500872デフォルトの名無しさん
2005/12/07(水) 08:55:160873デフォルトの名無しさん
2005/12/07(水) 09:07:570874デフォルトの名無しさん
2005/12/07(水) 09:14:15普通は上書きインストールでも問題無く動くよ。複数ヴァージョンを
同時に使う方がレジストリ設定の奪い合いでおかしくなったりする。
>>872
Perl だけの為に Cygwin 入れるなら ActivePerl の方がスマートだし、
Tk や Win32 関係のモジュールが最初から付いてくるし、コンパイラを
用意していない環境でも PPM でバイナリがインストールできる。あと
Cygwin だと改行コードの自動変換に絡む要素が一つ増えるから、
その分トラブルシューティングが面倒になる。
これらを考慮の上で Cygwin Perl を使うメリットの方が大きい人は
Cygwin Perl を使えばいいんじゃないかな。
0875デフォルトの名無しさん
2005/12/07(水) 10:51:41use strictしたらヒアドキュメントが使えなかったはずなのに
いつの間にか使えるようになってる
俺の勘違いだったのかなぁ
0876デフォルトの名無しさん
2005/12/07(水) 12:13:19( Д )゚ ゚
0877デフォルトの名無しさん
2005/12/07(水) 13:11:440878デフォルトの名無しさん
2005/12/07(水) 13:56:44んな不具合あるわけねーべ。 どう考えたっておたくの環境問題だべ。
0879デフォルトの名無しさん
2005/12/07(水) 22:35:36Wide character in subroutine entry at C:/Perl/lib/Encode.pm line 166.
とエラーが返ってくるのですが、どうも原因が分かりません。
プログラムを載せるので、原因を指摘していただけないでしょうか?
0880デフォルトの名無しさん
2005/12/07(水) 22:36:39useLWP::UserAgent;
useHTML::TokeParser;
useURI;
useencoding 'shiftjis';
binmode(STDERR, ':raw :encoding(shiftjis)');
useEncode;
my $baseURL = 'http://search.auctions.yahoo.co.jp/jp/search/auc';
my $keyword = shift @ARGV || die;
my $threshold = shift @ARGV || die;
my $ua = LWP::UserAgent->new;
my $url = URI->new($baseURL);
$url->query_form(
p=> encode('euc-jp', $keyword),
auccat=> '0',
alocale=> '0jp',
acc=> 'jp'
);
0881デフォルトの名無しさん
2005/12/07(水) 22:37:36while ($response ->is_success){
my $content = decode('euc-jp', $response->content);
my $stream = HTML::TokeParser->new (\$content) or die "\n";
while (my $tag = $stream->get_tag('td')){
last if $tag->[1]{colspan} && $tag->[1]{colspan} eq '5';
}
while (my $tag = $stream->get_tag('td')){
next unless $tag->[1]{align} && $tag->[1]{align} eq 'left';
$tag = $stream->get_tag('a');
my $descURL = $tag->[1]{href};
my $productName = decode('shiftjis', $stream->get_trimmed_text('/a'));
while ($tag = $stream->get_tag('td')){
last if $tag->[1]{align} && $tag->[1]{align} eq 'right';
}
my $currentPrice = decode('shiftjis', $stream->get_trimmed_text('/td'));
my $currentP = $currentPrice;
$currentP =~ s/[, 円]//g;
0882デフォルトの名無しさん
2005/12/07(水) 22:38:13my $description = $ua->get($descURL, 'Accept-Language' => 'ja,en');
$description = decode('euc-jp', $description->content);
my ($reservedPrice) =
$description =~ m!希望落札価格:</b></td><td bgcolor=ffffcc><b>(.*?円)!mis;
$reservedPrice = '-' unless($reservedPrice);
my ($deadline) =
$description =~ m!<tr><td>終了日時:</td><td>(.*?分)!mis;
print "$productName\n ($descURL)\n";
print " $currentPrice ($reservedPrice) : $deadline\n\n";
}
}
$content =~ m!<a href="([^"]+)">\n次の\d+件!mis;
my $nextURL = URI->new_abs( $1, $baseURL);
$response = $ua->get($nextURL, 'Accept-Language' => 'ja,en');
}
0883デフォルトの名無しさん
2005/12/07(水) 22:39:32my $self = shift;
my $old = $self->query;
if (@_) {
my @query;
while (my($key,$vals) = splice(@_, 0, 2)) {
$key = '' unless defined $key;
$key =~ s/([;\/?:@&=+,\$\[\]%])/$URI::Escape::escapes{$1}/g;
$key =~ s/ /+/g;
$vals = [ref($vals) ? @$vals : $vals];
for my $val (@$vals) {
$val = '' unless defined $val;
0884デフォルトの名無しさん
2005/12/07(水) 22:39:58my @work = unpack('C*', $val);
$val = '';
foreach my $c (@work) {
if((($c >= 0x30) && ($c <= 0x39)) ||
(($c >= 0x41) && ($c <= 0x5A)) ||
(($c >= 0x61) && ($c <= 0x7A))) {
$val .= chr($c);
} elsif ($c == 0x20) {
$val .= '+';
} else {
$val .= sprintf("%%%02X", $c);
}
}
push(@query, "$key=$val");
}
}
$self->query(join('&', @query));
}
return if !defined($old) || !length($old) || !defined(wantarray);
return unless $old =~ /=/;
map { s/\+/ /g; uri_unescape($_) }
map { /=/ ? split(/=/, $_, 2) : ($_ => '')} split(/&/, $old);
}
#終わりです。お願いします。
0885デフォルトの名無しさん
2005/12/07(水) 22:52:38>C:/Perl/lib/Encode.pm line 166.
って書いてあるんだから、Encodeの関数の使い方に問題があるってのは分かるだろ
関係ないゴミソースを延々と載せるな
0886デフォルトの名無しさん
2005/12/07(水) 22:56:140887デフォルトの名無しさん
2005/12/07(水) 23:03:44from_toでGuess使え
0888デフォルトの名無しさん
2005/12/07(水) 23:15:13すみませんが、具体的にどの場所でどう使えばよいのでしょうか?
0889デフォルトの名無しさん
2005/12/07(水) 23:16:21use Encode qw{from_to};
use Encode::Guess qw{euc-jp shiftjis 7bit-jis utf8};
0890デフォルトの名無しさん
2005/12/07(水) 23:29:38置き換えたことによって他に書き換える部分はあるのでしょうか?
0891デフォルトの名無しさん
2005/12/07(水) 23:32:58s/decode/from_to/g
しただけじゃないだろうな・・
0892デフォルトの名無しさん
2005/12/07(水) 23:46:26いちおう参考書の通りのプログラムなのですが・・・
0893デフォルトの名無しさん
2005/12/07(水) 23:54:230894デフォルトの名無しさん
2005/12/07(水) 23:55:270895デフォルトの名無しさん
2005/12/07(水) 23:56:230896デフォルトの名無しさん
2005/12/08(木) 00:06:540897デフォルトの名無しさん
2005/12/08(木) 00:54:06http://search.cpan.org/
0898デフォルトの名無しさん
2005/12/08(木) 01:00:030899デフォルトの名無しさん
2005/12/08(木) 01:12:34文字を入力するとファイルの中からそれの説明文がでてきて、対象がない場合は
ファイルに説明文を登録できるようなかたちのやつを。
0901デフォルトの名無しさん
2005/12/08(木) 02:14:46■こんなCGI作ってください■ Part.2
http://pc8.2ch.net/test/read.cgi/php/1133361560/
どうもー
0903デフォルトの名無しさん
2005/12/08(木) 03:41:05宿題は自分でやろうな、坊や
0904デフォルトの名無しさん
2005/12/08(木) 12:09:24その手の学校のテキストはまず使い物にならんよ
0905デフォルトの名無しさん
2005/12/08(木) 13:36:560906デフォルトの名無しさん
2005/12/08(木) 15:10:33恥知らず NEET ウザスwwwwwww
0907デフォルトの名無しさん
2005/12/08(木) 15:16:350908デフォルトの名無しさん
2005/12/08(木) 15:23:03http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_do_i_remove_consecutive_pairs_of_characters
0909デフォルトの名無しさん
2005/12/08(木) 15:41:58こういう質問ってなんだ?
わざとなのか?ネタなのか?
0910デフォルトの名無しさん
2005/12/08(木) 17:07:15釣りか宿題かどっちか。
0911デフォルトの名無しさん
2005/12/09(金) 00:00:30お力お貸しください。
0912デフォルトの名無しさん
2005/12/09(金) 00:02:360913デフォルトの名無しさん
2005/12/09(金) 10:27:46perl -ne 'printf "%4d|%s",$.,$_' source.c
0914デフォルトの名無しさん
2005/12/09(金) 18:37:07http://pc8.2ch.net/test/read.cgi/php/1024795138/833-
今は、こっち↑の方が質が高いぞ。
0915デフォルトの名無しさん
2005/12/09(金) 19:42:010916デフォルトの名無しさん
2005/12/09(金) 19:57:540917デフォルトの名無しさん
2005/12/09(金) 20:09:31そうやって説明を放棄するのはよくない傾向
0918デフォルトの名無しさん
2005/12/09(金) 20:09:590919915
2005/12/09(金) 20:56:310920デフォルトの名無しさん
2005/12/10(土) 00:00:130921デフォルトの名無しさん
2005/12/10(土) 02:26:230922デフォルトの名無しさん
2005/12/10(土) 07:12:39できないんですが…
0923デフォルトの名無しさん
2005/12/10(土) 07:54:160924デフォルトの名無しさん
2005/12/10(土) 08:39:32スペース要らんよ。シングルクォート→ダブルクォートに300ガバス。
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlrun.pod#%23!_and_quoting_on_non-Unix_systems
0925デフォルトの名無しさん
2005/12/10(土) 13:46:15そうカリカリすんなよ学生さん
0926デフォルトの名無しさん
2005/12/10(土) 15:46:17暇で暇でしょうがない
0927デフォルトの名無しさん
2005/12/10(土) 16:14:33>>921の発言がそんなに腹たったの?
0928デフォルトの名無しさん
2005/12/10(土) 16:18:49うん
0929デフォルトの名無しさん
2005/12/10(土) 16:24:170930デフォルトの名無しさん
2005/12/10(土) 16:25:270931デフォルトの名無しさん
2005/12/10(土) 16:59:03>perl -MCPAN -e shell
で最初に設定する事柄を、後で変更するにはどうすれば良いのでしょうか?
0932931
2005/12/10(土) 17:44:310933デフォルトの名無しさん
2005/12/10(土) 17:54:47ftp 不可、proxy経由でhttpのみ可能な環境で
perl -MCPAN -e shell
するにはどうすればよいでしょうか?
0934デフォルトの名無しさん
2005/12/10(土) 18:28:43ハッシュのキーとして.(ピリオド)と@を含む文字列、
つまるところメールアドレスを取ることはできるのでしょうか。
0935デフォルトの名無しさん
2005/12/10(土) 18:29:180936デフォルトの名無しさん
2005/12/10(土) 18:31:55ありがとうございます
0937デフォルトの名無しさん
2005/12/10(土) 18:35:02それぐらいすぐテストできるだろ!
0938デフォルトの名無しさん
2005/12/10(土) 19:14:58*.pl ファイルをダブルクリックして実行するとエラー時にDOS窓が閉じてしまって、
エラーメッセージが読めません。
dos窓を一度開いてからコマンドを入れて実行するとエラーメッセージが読めるのですが、
操作が煩雑になります。
ダブルクリックしたときにエラーメッセージを残すための良いアイディアはないでしょうか?
0939デフォルトの名無しさん
2005/12/10(土) 20:07:21`pause`;
0940デフォルトの名無しさん
2005/12/10(土) 20:16:32それでもエラー時は終了されるよ
0941デフォルトの名無しさん
2005/12/10(土) 20:46:50eval {
&your_main_routine();
}
if ($@) {
print $@;
`pause`;
}
これでどうだ。
0942デフォルトの名無しさん
2005/12/10(土) 20:55:15正確な1秒を刻んでいく関数は何があるのでしょうか
どうもsleepは正確ではないようなので
0943デフォルトの名無しさん
2005/12/10(土) 21:03:43正確って、どれくらいの正確さを求めてるんだ?
所詮、PCの時計の精度以上は出ないぞ。
0944デフォルトの名無しさん
2005/12/10(土) 21:06:24それでもだめだよ
しっかりしろ回答者!
0945デフォルトの名無しさん
2005/12/10(土) 21:07:14つ Time::HiRes
0946デフォルトの名無しさん
2005/12/10(土) 21:24:52ソースビューワー
my @work = unpack('C*', $val);
$val = '';
foreach my $c (@work) {
if((($c >= 0x30) && ($c <= 0x39)) ||
(($c >= 0x41) && ($c <= 0x5A)) ||
(($c >= 0x61) && ($c <= 0x7A))) {
$val .= chr($c);
} elsif ($c == 0x20) {
$val .= '+';
} else {
$val .= sprintf("%%%02X", $c);
}
}
push(@query, "$key=$val");
}
まるうつしでつw
0947デフォルトの名無しさん
2005/12/10(土) 22:02:52面倒くさいなあ。いいからネコミミをつけろ。話はそれからだ。
こういうバッチファイルならどうだ。
文法エラーでもdieでもきちんとpauseする。
「今度は窓が開きっぱなしになっちゃうよ!」と言う前に
エクスプローラでこのバッチファイルを右クリックして
プロパティを確認するんだ。下半身裸で。
@echo off
perl -x "%0"
if ERRORLEVEL 1 goto errorend
goto theend
#!perl
# ここらへんにperlのコードを書け
sub routine { # カッコが閉じてない文法エラー
__END__
:errorend
pause
:theend
0948939
2005/12/10(土) 22:31:40---ここから---
@echo off
"C:\Perl\bin\perl" %1
echo; & echo ---perl end---
pause>nul
---ここまで---
をperl.batとかで保存してpl,cgiを関連付けるか
ソースファイルをper.batにドラッグ&ドロップ。
エディタと連携させるとボタン一つで実行出来て便利。
0949947
2005/12/10(土) 23:48:36先頭あたりに
sub CHECK {`pause`}
と書いておく。
CHECK はコンパイル直後に実行される。
文法エラーでもきちんと動いてくれるぞ。
0950デフォルトの名無しさん
2005/12/11(日) 00:40:330951デフォルトの名無しさん
2005/12/11(日) 11:38:430952デフォルトの名無しさん
2005/12/11(日) 13:40:28不便この上ない
0953デフォルトの名無しさん
2005/12/11(日) 13:52:170954デフォルトの名無しさん
2005/12/11(日) 13:54:30ん?無くない?
0955デフォルトの名無しさん
2005/12/11(日) 13:56:270956デフォルトの名無しさん
2005/12/11(日) 14:30:27一応、ActivePerlでも非標準モジュールはsite/lib以下に配置されてる。
0957デフォルトの名無しさん
2005/12/11(日) 14:32:17ああ本当だ
ボケてたorz
0958デフォルトの名無しさん
2005/12/11(日) 14:37:00この :flock ってのはどういう意味なのでしょうか?
0959デフォルトの名無しさん
2005/12/11(日) 14:42:43http://search.cpan.org/~nwclark/perl-5.8.7/ext/Fcntl/Fcntl.pm#EXPORTED_SYMBOLS
http://search.cpan.org/~nwclark/perl-5.8.7/lib/Exporter.pm#Advanced_features
0960デフォルトの名無しさん
2005/12/11(日) 14:45:31回答ありがとうございます
下の方のページで解説されてるようなんですが
英語が読めなくて分かりません・・・
:flock
↑これの、 : が何を意味するかが分からないんですが
質問下手ですみません
0961958,960
2005/12/11(日) 14:52:420962デフォルトの名無しさん
2005/12/11(日) 15:30:28この時、('foo', 'bar')にはモジュール内からどのようにアクセスすればよいのでしょうか?
0963デフォルトの名無しさん
2005/12/11(日) 15:47:13http://www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html#Perl_Modules
http://search.cpan.org/~nwclark/perl-5.8.7/lib/Exporter.pm
0964デフォルトの名無しさん
2005/12/11(日) 20:37:070965デフォルトの名無しさん
2005/12/11(日) 21:31:21回答するのが嫌ならこのスレから出て行くがよろし
0966デフォルトの名無しさん
2005/12/11(日) 22:09:050967デフォルトの名無しさん
2005/12/11(日) 22:13:270968デフォルトの名無しさん
2005/12/11(日) 22:41:40なんで?その理屈がわからん。
0969デフォルトの名無しさん
2005/12/11(日) 23:25:12良くないからだよ。そのくらいわかれ。
0970デフォルトの名無しさん
2005/12/11(日) 23:30:520971デフォルトの名無しさん
2005/12/11(日) 23:31:010972デフォルトの名無しさん
2005/12/11(日) 23:39:500973デフォルトの名無しさん
2005/12/11(日) 23:41:35既にあるのであればそれを示すのは極めて合理的。
阿呆は無視しとけ。
0974デフォルトの名無しさん
2005/12/11(日) 23:51:01が答えになってないから言ってんじゃないの
リンク先には関係ない事しか書いてない
0975デフォルトの名無しさん
2005/12/11(日) 23:58:040976デフォルトの名無しさん
2005/12/12(月) 00:01:29google web apiをperlで使って、検索語を含むWebページのヒット数、URL
を表示するようなプログラムを作りたくて、あるサイトのプログラムを参
考にして作ったのですが、実行したら英語のサイトのURLが表示されて、
明らかに検索語を含んでいません。
もしこうした方がいいという案がありましたら、教えていただきたいです。
自分はPerlをあまり使ったことがなく記述の仕方もいまいちわかっていない
状況です。自分なり本を読んで少しプログラムも書いてみたのですが
まだまだのようです。どうかよろしくお願いします。
use SOAP::Lite;
use Jcode;
my $googleSearch = SOAP::Lite -> service("file:GoogleSearch.wsdl");
my $key='LkML035QFHLEaaFEoFDfPd2VZFDzWGCE';
my $query="とんかつ";
my $result = $googleSearch -> doGoogleSearch($key,jcode($query)->utf8, 0, 10, "false", "", "false", "", "UTF-8", "UTF-8");
#print "About ".$result->{"estimatedTotalResultsCount"}."results.\n";
printf("query=%s %d results\n",$query,$result->{estimatedTotalResultsCount});
for $i(@{$result->{resultElements}}){
printf("%s,%s\n",jcode($i->{title})->euc,jcode($i->{URL})->euc);
}
0977デフォルトの名無しさん
2005/12/12(月) 00:08:44常識として
http://pc8.2ch.net/test/read.cgi/tech/1037383722/422
0978デフォルトの名無しさん
2005/12/12(月) 00:48:34異論がなければ、そうしとくよ。
Perl言語に詳しい人に質問!
http://pc8.2ch.net/test/read.cgi/tech/1037383722/l50
超初級Perlが動きません助けてください。
http://pc8.2ch.net/test/read.cgi/tech/1106741950/l50
0979デフォルトの名無しさん
2005/12/12(月) 01:05:11http://www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html#Perl_Modules
> Perlのモジュールは
> use Module;
> とするか
> use Module LIST;
> とすることによって、プログラムに取り込まれます。これは、
> BEGIN { require Module; import Module; }
> や
> BEGIN { require Module; import Module LIST; }
> とまったく等価なものです。
http://search.cpan.org/~nwclark/perl-5.8.7/lib/Exporter.pm
> DESCRIPTION
>
> The Exporter module implements an import method which allows a module
> to export functions and variables to its users' namespaces. Many modules
> use Exporter rather than implementing their own import method because
> Exporter provides a highly flexible interface, with an implementation
> optimised for the common case.
0980デフォルトの名無しさん
2005/12/12(月) 01:08:21上は答えになってないでしょ
下は英語で読めないし
もう少し考えろよ
0981980
2005/12/12(月) 01:11:580982デフォルトの名無しさん
2005/12/12(月) 01:13:54URL出されただけじゃ答えを導くのはそう簡単じゃないので
説明付きで回答しろや、と
0983デフォルトの名無しさん
2005/12/12(月) 01:23:350984デフォルトの名無しさん
2005/12/12(月) 02:07:52URL 張るだけじゃなくてキチンと説明しろっていうなら、説明したい奴が
勝手にすればいいんでないの?
0985デフォルトの名無しさん
2005/12/12(月) 02:11:34立てるだけで誰かがテンプレ貼ってくれるなら俺が立てるけど
0986デフォルトの名無しさん
2005/12/12(月) 02:29:49クックブック: http://www.oreilly.co.jp/books/4873112028/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
0987デフォルトの名無しさん
2005/12/12(月) 03:03:580988デフォルトの名無しさん
2005/12/12(月) 03:20:550989デフォルトの名無しさん
2005/12/12(月) 03:50:430990デフォルトの名無しさん
2005/12/12(月) 04:10:56次スレ
http://pc8.2ch.net/test/read.cgi/tech/1134327348/
0992デフォルトの名無しさん
2005/12/12(月) 08:05:29質問者猛々しい
0993デフォルトの名無しさん
2005/12/12(月) 08:07:210994デフォルトの名無しさん
2005/12/12(月) 08:08:040995デフォルトの名無しさん
2005/12/12(月) 08:09:400996デフォルトの名無しさん
2005/12/12(月) 08:11:310997デフォルトの名無しさん
2005/12/12(月) 08:12:360998デフォルトの名無しさん
2005/12/12(月) 08:13:180999デフォルトの名無しさん
2005/12/12(月) 08:13:221000デフォルトの名無しさん
2005/12/12(月) 08:13:3910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。