Perlについての質問箱 29箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/12/21(木) 22:35:39"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
http://www.perl.org/get.html
● 2006/12/21現在の最新版: 5.8.8
● 2006/12/21現在の開発版: 5.9.3
前スレ
Perlについての質問箱 28箱目
http://pc8.2ch.net/test/read.cgi/tech/1162273941/
リンク集は>>2-3
過去スレは>>4
0002デフォルトの名無しさん
2006/12/21(木) 22:36:10Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/
[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/
[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.8/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0003デフォルトの名無しさん
2006/12/21(木) 22:36:40CPAN.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デフォルトの名無しさん
2006/12/21(木) 22:37:131 ttp://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 ttp://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 ttp://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 ttp://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 ttp://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 ttp://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 ttp://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 ttp://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 ttp://pc5.2ch.net/test/read.cgi/tech/1079114157/
10 ttp://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 ttp://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 ttp://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 ttp://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 ttp://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 ttp://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 ttp://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 ttp://pc8.2ch.net/test/read.cgi/tech/1117870308/
18 ttp://pc8.2ch.net/test/read.cgi/tech/1121804136/
19 ttp://pc8.2ch.net/test/read.cgi/tech/1126977805/
20 ttp://pc8.2ch.net/test/read.cgi/tech/1131286411/
21 ttp://pc8.2ch.net/test/read.cgi/tech/1134327348/
22 ttp://pc8.2ch.net/test/read.cgi/tech/1138519327/
23 ttp://pc8.2ch.net/test/read.cgi/tech/1141742901/
24 ttp://pc8.2ch.net/test/read.cgi/tech/1146022352/
25 ttp://pc8.2ch.net/test/read.cgi/tech/1149259409/
26 ttp://pc8.2ch.net/test/read.cgi/tech/1153412251/
27 ttp://pc8.2ch.net/test/read.cgi/tech/1157874614/
28 ttp://pc8.2ch.net/test/read.cgi/tech/1162273941/
0005デフォルトの名無しさん
2006/12/21(木) 22:38:300007デフォルトの名無しさん
2006/12/21(木) 23:05:10現代人なら何するの?
0008デフォルトの名無しさん
2006/12/21(木) 23:13:39前スレ>>985
一応答えておきましょう。2変数の値の交換。
($x, $y) = ($y, $x)
で$xに$yの値を代入して、$yに元の$xの値を代入
if ($x < $y) { ($x, $y) = ($y, $x) }
で、$xのほうが小さかったら$yと入れ替える。つまり$xのほうが大きくなるようにすると言う意味。
0009デフォルトの名無しさん
2006/12/21(木) 23:29:131000まで無駄なく使う、ってわざわざ言わなきゃわからないのか?
0010デフォルトの名無しさん
2006/12/21(木) 23:38:480011デフォルトの名無しさん
2006/12/21(木) 23:42:00だから空気の読めない初心者が混ざるのか。
0012デフォルトの名無しさん
2006/12/22(金) 00:03:240013デフォルトの名無しさん
2006/12/22(金) 01:30:06質問箱なんだから初心者が来るのは構わないんだけど結局>>12の言うとおりじゃない?
0014デフォルトの名無しさん
2006/12/22(金) 01:58:54コードが動かないときに自分の思いこみでコードの一部分だけ切り出して貼ったり
途中までやったけど分かりませんって書いて コードは一行もなかったり
0015GOLFer名無しさん
2006/12/22(金) 02:27:18$w=($l=@t)**2;
{$j = 0;while(1){$i=0;while(1){@t[$i,$i+1]=
([$t[$i]=>$t[$i+1]]->[$t[$i]<=$t[$i+1]]=>[$t[$i+1]=>$t[$i]]->[$t[$i]<=$t[$i+1]]);
last if$i++==$l;}last if$j++==$w;}}
print "@t";
0016デフォルトの名無しさん
2006/12/22(金) 07:52:52my @in = qw( 4 2 6 ) ;
my @new ;
for( 0..$#in ){
my $min = $in[0] ;
my $ind = 0 ;
for (0 .. $#in ){
if ( $min > $in[$_] ){
$min = $in[$_] ;
$ind = $_ ;
}
}
push @new, $min ;
splice @in, $ind, 1 ;
}
print @new , "\n" ;
0017デフォルトの名無しさん
2006/12/22(金) 12:42:52なんかエラーがでます。
そのエラーを貼れよ!!
0018デフォルトの名無しさん
2006/12/22(金) 22:16:570019デフォルトの名無しさん
2006/12/22(金) 22:20:550020デフォルトの名無しさん
2006/12/23(土) 00:05:340021デフォルトの名無しさん
2006/12/23(土) 00:12:52jcode.pm で、文字コードを自動判定させると
なんか時々変な判断しませんか。
#別に半角カタカナは使ってはいません。
例:
$szName = Jcode->new("ほげほげ")->euc;
・・・・・たっぷりと文字列処理
print Jcode->new($szName)->sjis;
# あれ? なんか化けてる。
$szName = Jcode->new("ほげほげ".'sjis')->euc;
・・・・・たっぷりと文字列処理
print Jcode->new($szName,'euc')->sjis;
# うん、これならOK. でも引数が多いのは嫌ですね。
0022デフォルトの名無しさん
2006/12/23(土) 00:19:520023デフォルトの名無しさん
2006/12/23(土) 01:01:47可能なら自動判定は避けるべき
漢字一文字だと一部の漢字は自動判定できないし
cgiの場合なら入力時の漢字コードは決まっていると思うので、元の漢字コードを指定しましょう
002418
2006/12/23(土) 01:44:44純粋なPGがいないからかもしれないが。
0025デフォルトの名無しさん
2006/12/23(土) 01:51:22$sql = "select from T_hogehoge where (判定='A')";
てのを書いてて、「あ、右端に顔文字・・・・」と思ってしまいますた。
・・・・余談でつ。
0026デフォルトの名無しさん
2006/12/23(土) 02:09:12あまり複雑な条件では使わない
my $fh = new IO::File ">hoge";
return undef unless defined $fh;
とか
$str .= "hoge¥n";
$str .= "moge¥n" if $flag;
return $str;
とか
0027デフォルトの名無しさん
2006/12/23(土) 03:25:00後者は同意だけど、前者は
my $fh = new IO::File ">hoge"
or return;
と書くおいら
perlstyleに言及があるとおり、場面に合わせて読みやすいであろう方を選択だよね。
0028デフォルトの名無しさん
2006/12/23(土) 08:33:59利用する(ある意味 next とかの積極利用なんだけど )
0029デフォルトの名無しさん
2006/12/23(土) 08:54:26while ( <> ){
next if !/^(\S+)\s+(\S+)$/ ;
#ここで$1, $2 の処理をする
}
みたく書いてあったときはある意味衝撃だったw
ええ知らなかっただけですともorz...
0030デフォルトの名無しさん
2006/12/23(土) 10:12:420031デフォルトの名無しさん
2006/12/23(土) 10:21:08Safari厨だと思われ。
0032デフォルトの名無しさん
2006/12/23(土) 12:21:420033デフォルトの名無しさん
2006/12/23(土) 13:43:42ならない。
0034デフォルトの名無しさん
2006/12/23(土) 16:33:52どのようにしたらよろしいでしょうか?
モジュールには手を加えたくないのですが。。
0035デフォルトの名無しさん
2006/12/23(土) 16:59:53003634
2006/12/23(土) 17:21:35質問文が分かりにくくてすみません;
#program start
use hogehoge 'hoge';
print hoge('unko');
#program end
例えば、上記のプログラムを実行して標準出力に出力される、
"Use of uninitialized value in %s at hogehoge.pm line 30."
というエラーの出力を止めたいのです。。
0037デフォルトの名無しさん
2006/12/23(土) 17:52:44つまり何か。hogehogeモジュールがその中でwarningsプラグマを有効にしているにも拘らず、
正常な処理の範囲内でundefinedな値のチェックを怠っていて、しかも、
他の人が作ったモジュールだから触るわけには行かない。とそういう状況なわけか。
0039デフォルトの名無しさん
2006/12/23(土) 19:03:35一応、思いついたDirty Hack二通り
1.
BEGIN { local *warnings::import;
require hogehoge; import hogehoge 'hoge'; }
2.
{ use IO::Null;
tie local *STDERR, 'IO::Null';
print hoge('unko'); }
0040デフォルトの名無しさん
2006/12/23(土) 19:37:17use hogehoge qw/hoge/;
package hogehoge;
no warnings qw/uninitialized/;
package main;
print hoge('unko');
試してないからわからん。
0041デフォルトの名無しさん
2006/12/23(土) 20:11:47The routine indicated by $SIG{__WARN__} is called when a warn-
ing message is about to be printed. The warning message is
passed as the first argument. The presence of a __WARN__ hook
causes the ordinary printing of warnings to STDERR to be sup-
pressed.
004234
2006/12/23(土) 23:26:18ありがとうございます _ _
>>39さんの1の方法を使わせていただきました。
>>40
no useは地の文での解釈となってしまうようでした。
0043デフォルトの名無しさん
2006/12/24(日) 12:18:300044デフォルトの名無しさん
2006/12/24(日) 12:34:08たくさんあるんじゃね?
0045デフォルトの名無しさん
2006/12/24(日) 12:36:07ありがとう。
0046デフォルトの名無しさん
2006/12/24(日) 15:04:19Jcode.pmと新しいEncode.pmとEUCJPMSをインストールしようとしましたが、
Jcode.pm以外はインストールできませんでした。
Encode.pmの場合は
NMAKE : fatal error U1077: 'C:\MSVSEE\VC\bin\cl.EXE' : リターン コード '0x80'
Stop.
NMAKE : fatal error U1077: 'C:\MSVSEE\VC\bin\nmake.exe' : リターン コード '0x2'
Stop.
EUCJPMSの場合は
NMAKE : fatal error U1077: 'C:\MSVSEE\VC\bin\cl.EXE' : リターン コード '0x80'
Stop.
このようになり、Makefileからmakeできませんでした。
ほかにインストールする方法はないものでしょうか。
0047デフォルトの名無しさん
2006/12/24(日) 17:36:550048デフォルトの名無しさん
2006/12/24(日) 17:51:58if ($num % 4 == 0)
0049デフォルトの名無しさん
2006/12/24(日) 18:18:20ppm install
005046
2006/12/24(日) 19:14:23vcのincludeやlibへのパスがうまく通っていなかったようです。
設定しなおしたらmakeできました。
>>49
ppmでやろうと思ったらそんなもんねーよとppmに怒られてしまいました。
005147
2006/12/24(日) 20:06:57上記のようなものはどう表示すればよいのでしょうか?
0052デフォルトの名無しさん
2006/12/24(日) 20:14:04005347
2006/12/24(日) 20:25:260054デフォルトの名無しさん
2006/12/24(日) 20:27:39if(2で割り切れる? = はい){
if(50で割り切れる? = いいえ){
print "2で割り切れるけど、50で割り切れないよ。";
}
}
0055デフォルトの名無しさん
2006/12/24(日) 20:35:28解決して何より。
だけどppmはリポジトリを追加するともっと強力になるよん。
Encodeの最新版はTheoryx5リポジトリにある。
Encode-EUCJPMSは検索したらパッケージを作ってる人がいました。
ttp://asakura.g.hatena.ne.jp/asakura-t/20061102/1162451401
0056デフォルトの名無しさん
2006/12/24(日) 21:02:59ppm では
search hoge* してからにすべし
Foo::bar というモジュール名は
経験上、ppm では install Foo-Bar の名称で指定することが多し。
<ちらしの裏>
追記すると、最新の ActivePerl (Win32) では
ppm だと GUIウインドウが開く。
ppm-shell だと、従来通りのコマンドライン版が起動する。
</ちらしの裏>
0057デフォルトの名無しさん
2006/12/24(日) 23:13:43結局はWeb関連だったらツマランわ
0058デフォルトの名無しさん
2006/12/24(日) 23:17:020059デフォルトの名無しさん
2006/12/24(日) 23:35:41VBAコードを仕込んでおきたかったんだけど、なんかうまい方法はないでしょうか。
Linuxサーバ上でやりたいため、WIn32::OLEという解は使えません…。
0060デフォルトの名無しさん
2006/12/25(月) 13:28:50Perl is a programming language for getting your job done.
0061デフォルトの名無しさん
2006/12/25(月) 18:56:23コード値を文字にしたいのですが、日本語はどのようにしたらよろしいのでしょうか?
chrは2バイト文字はだめってのはわかったんですが。
ちなみにシフトJISのコードを変換したいです。
例 0x82A0 → あ
0062デフォルトの名無しさん
2006/12/25(月) 19:17:21006361
2006/12/25(月) 19:22:37ありがとうございます!
packの奥は深いっすね〜
もっと勉強します!
0064デフォルトの名無しさん
2006/12/25(月) 21:15:28ワロタ
0065デフォルトの名無しさん
2006/12/26(火) 01:22:43来月から仕事で使いそうなんで・・・
0066デフォルトの名無しさん
2006/12/26(火) 01:33:160067デフォルトの名無しさん
2006/12/26(火) 01:39:300068デフォルトの名無しさん
2006/12/26(火) 03:21:37文字化けする理由を教えてください。
スクリプト
-------------------
$str="あー";
print $str;
print "\n";
$tmp="−";
$str =~ s/$tmp//g;
print $str;
--------------------
実行結果
--------------------
あー
あ[
--------------------
006968
2006/12/26(火) 03:24:04環境Windowsで.plファイルのエンコードはShift-JISです。
実行結果はコマンドプロンプトでの実行結果です。
0070デフォルトの名無しさん
2006/12/26(火) 03:58:22| = 7c
より、$str =~ s/$tmp//g;は
$str =~ s/(文字コード81)|//g;とPerlに解釈されています。
つまり、$str内の文字コード81か、空文字にマッチングしそれが削除されます。
あー = 82 a0 81 5b内の81を削除すると82 a0 5bとなり
これをShift_JISで表示すると[ = 5bよりあ[となります。
007168
2006/12/26(火) 04:50:18丁寧な解説ありがとうございました。
$tmp="−";
$str =~ s/$tmp//g;
を
$str =~ s/\x81\x7c//g;
とすることによって解決できました。
0072デフォルトの名無しさん
2006/12/26(火) 10:26:520073デフォルトの名無しさん
2006/12/26(火) 11:46:160074デフォルトの名無しさん
2006/12/26(火) 16:00:24http://search.cpan.org/dist/HTML-TableExtract/lib/HTML/TableExtract.pm
↑のREGULAR METHODSにあるdepths()メソッドの文字を変数に代入したいんです。。
然るべき手順を踏んで、
print $te->depths();
するときちんとdepths()メソッドの文字が表示されるのですが、
my $test = $te->depths();
print $test;
すると"Use of uninitialized value in print"というエラーが出てしまいます。。
全く訳が分からず打ち間違えを確認したりして同じ事を何回も繰り返したりしたのですが、
訳が分からないです。。どなたがご助言お願いいたします _ _
0075デフォルトの名無しさん
2006/12/26(火) 16:03:36r;ァ'N;:::::::::::::,ィ/ >::::::::::ヽ
. 〃 ヽル1'´ ∠:::::::::::::::::i
i′ ___, - ,. = -一  ̄l:::::::::::::::l
. ! , -==、´r' l::::::/,ニ.ヽ
l _,, -‐''二ゝ l::::l f゙ヽ |、
レー-- 、ヽヾニ-ァ,ニ;=、_ !:::l ) } ト
ヾ¨'7"ry、` ー゙='ニ,,,` }::ヽ(ノ 2ちゃんはみんなの日記帳だから
:ーゝヽ、 !´ " ̄ 'l,;;;;,,,.、 ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{ __)`ニゝ、 ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ , な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
007674
2006/12/26(火) 16:04:220077デフォルトの名無しさん
2006/12/26(火) 16:26:50use utf8を使えば文字を直接置換できるかな?
0078デフォルトの名無しさん
2006/12/26(火) 16:43:49http://pc8.2ch.net/test/read.cgi/php/1164519503/498-512
0079デフォルトの名無しさん
2006/12/27(水) 02:04:440080デフォルトの名無しさん
2006/12/27(水) 23:00:18WindowsのActive Perl v5.5.8です。
UTF16の日本語ファイルを開いて処理させようとすると
処理結果のテキストが文字化けしてしまいます。
Shift JISとUTF8形式だと問題なく処理できるのですが…。
UTF16でうまく処理できる方法はないでしょうか?
0081デフォルトの名無しさん
2006/12/28(木) 01:01:06シフトJISのファイルを扱うとき、
binmode STDOUT, ":encoding(cp932)";
binmode STDERR, ":encoding(cp932)";
binmode STDIN, ":encoding(cp932)";
use open IO => ":encoding(cp932)";
とか書かなかった?
cp932 を例えば、UTF-16LE に変えれば済むことと思われるが。
0082デフォルトの名無しさん
2006/12/28(木) 01:12:53前スレがまだ残っているので、前スレ 694 からの流れを参照。
対策としては、前スレ 703 のリンク先にある方法が無難だと思う。
0083デフォルトの名無しさん
2006/12/28(木) 01:24:39シフトJISのときは何も指定せずにいけました。
>>82さん
ありがとうございます。
明日頑張ってみます。
0084デフォルトの名無しさん
2006/12/28(木) 11:31:19するプログラムを書いています。タイムアウトした場合にはIPアドレスを
返そうと思います。そこで以下のようなサブルーチンを書いたのですが、
タイムアウトしません。古いActiveperlではalarmがないとの情報があった
のですが、sleep行で確認した所、5.8.8では問題ないようです。
お知恵を拝借頂ければ幸いです。
sub resolv_host {
my ($ip)=@_; my $timeout=2; my $host;
$SIG{ALRM} = sub { die 'TIMED OUT' };
eval {
alarm($timeout);
# ホスト名を逆引きする。
#sleep 5;
$host = gethostbyaddr(pack("C4", split(/\./, $ip)), 2);
alarm(0);
};
alarm(0);
if ( $@ =~ /TIMED OUT/ ){ $host = $ip;}
return ($host);
}
※実行環境は以下の通りです。
Windows XP SP2
Activeperl 5.8.8
0086デフォルトの名無しさん
2006/12/28(木) 17:31:04use IO::Socket;
my $sock = IO::Socket::INET->new(
PeerAddr => $ip,
PeerPort => $port,
Proto => 'tcp',
Timeout => $TIMEOUT,
);
if ($sock) {
#接続成功
} else {
#タイムアウト
}
今現在のコードがこんな感じでして、繋がる繋がらないは分かるのですが、
接続に要する時間を調べたいもののその方法がわかりません。
SOCKETを触るのが今回初めてでして、
そもそもにおいて根本的な過ちを犯してる場合はそちらも併せて、
何かよい方法がありましたら、ご教授いただけると幸いです。
0087デフォルトの名無しさん
2006/12/28(木) 17:43:140088デフォルトの名無しさん
2006/12/28(木) 17:58:48ありがとうございました。
sub resolv_host {
use Net::DNS;
my ($ip)=@_; my $timeout=2; my $host;
my $res = Net::DNS::Resolver->new(
tcp_timeout => $timeout, udp_timeout => $timeout
);
my $query = $res->query("$ip");
if ($query) {
foreach my $rr ($query->answer) {
next if $rr->type ne "PTR";
$host=$rr->ptrdname;
}
}
else { $host=$ip; }
return ($host);
}
0089名無しさん@Linuxザウルス
2006/12/28(木) 18:54:03$str = aaaa bbbb ccc http://ddd.vv.vv hhhh rrrr http://ff.ff.mm
という文字列から「http://ddd.vv.vv」「http://ff.ff.mm」を切り出す方法です
0090デフォルトの名無しさん
2006/12/28(木) 18:59:420091デフォルトの名無しさん
2006/12/28(木) 19:05:180092デフォルトの名無しさん
2006/12/28(木) 19:53:46>>56
遅くなりましたが、ありがとうございました。
レポジトリを追加したらだいぶ便利になりました。
パッケージをダウンロードしてきてそのまま追加することもできるようになりました。
0093名無しさん@Linuxザウルス
2006/12/28(木) 20:04:48サンクス
0094デフォルトの名無しさん
2006/12/28(木) 20:45:12s/s$/z/;
s/s([^t])/z$1/g;
s/st([^r])/zt$1/g;
s/str([^i])/ztr$1/g;
...
s/string/(あり得なさそうな文字列)/g;
s/s/z/g;
s/(あり得なさそうな文字列)/string/g;
0095デフォルトの名無しさん
2006/12/28(木) 20:48:34先読み否定。色々仲間があるので詳細はperlre参照。
s/s(?!tring)/z/g;
0096デフォルトの名無しさん
2006/12/28(木) 21:14:01どうすればいいでしょうか?
0097デフォルトの名無しさん
2006/12/28(木) 21:16:21すいません m(__)m
0098デフォルトの名無しさん
2006/12/28(木) 21:17:16ありがとうございました。
0099デフォルトの名無しさん
2006/12/29(金) 05:18:57ローカルとリモートで同名だけどリモートの方がファイルサイズ小さい場合
差分のみ転送にしたいのですがレジュームはどうやればできますでしょうか?
perldoc Net::FTP
でresumeをキーに検索したのですが見当たりませんでした。
よろしくお願いします。
010099
2006/12/29(金) 08:20:07FTP resume perlをキーにググッたら下記の情報見つけた
http://www.garayed.com/perl/215162-net-ftp-resume-file-transfer.html
perldoc Net::FTPでWHEREを見ろって書いてあったので見たら
ダウンロードはgetメソッドの第3引数でオフセット値が指定できるみたいだけど
アップロードはrestartってメソッドでオフセット値をセットしてから
putメソッドで転送すればいいのかな。
しかしputメソッドは第3引数でオフセット値を指定できないんだ???
0101デフォルトの名無しさん
2006/12/29(金) 08:59:14レジュームって普通クライアントから要求するようになってると思うよ。
0102デフォルトの名無しさん
2006/12/29(金) 09:29:59Net::FTPだったらputじゃなくてappendにしないと上書きされちゃうよ
>>101
99は具体的なやり方聞いてるのにそんな回答しても意味ネェだろw
0103デフォルトの名無しさん
2006/12/29(金) 12:03:500104デフォルトの名無しさん
2006/12/29(金) 12:08:27Encode::EUCJPMS
をインストールした後
use Jcode::CP932とするとエラーになってしまいます。
エラー内容
Jcode::CP932 is not an object at (eval 2) line 234
Jcode::AUTOLOAD('Jcode::CP932', 'sjis', 'cp932', 'euc', 'cp51932', 'jis', 'cp50221', 'iso_2022_jp', 'cp50220', ...) called at c:/usr/local/site/lib/Jcode/CP932.pm line 39
main::BEGIN() called at c:/usr/local/site/lib/Jcode/CP932.pm line 0
eval {...} called at c:/usr/local/site/lib/Jcode/CP932.pm line 0
Jcode.pmのAUTOLOADでconfessしてるっぽいんですが、何故動かないのでしょうか?
ちなみにWinXP、ActivePerl 5.8.7.813です
0105SONY
2006/12/29(金) 15:18:48仕様です
0106デフォルトの名無しさん
2006/12/29(金) 16:12:310107デフォルトの名無しさん
2006/12/29(金) 17:03:26これhttp://www.example.com/1.txt とttp://www2.example.com/2.txt これ
-----------------
この上の文を下の文に変換する"スマートな"方法としてはどのようなやり方がありますでしょうか?
-----------------
これ<a href="http://www.example.com/1.txt">http://www.example.com/1.txt</a> と<a href="http://www2.example.com/2.txt">ttp://www2.example.com/2.txt</a> これ
-----------------
仕様としましては
(1)http://またはhttps://またはttp://またはttps://で始まる場所をURL先頭とする
(2)半角空白または全角空白の登場、または文の末尾でURLの最後判定をする
(3)一行に複数のhttp://〜やttp://〜があっても全てにAタグを付ける
(4)Aタグをつけること以外の文章の加工をしない
です。
100stepくらい使えば書けないことはないと思うのですが、
スマートな方法は全く思いつきませんorz
0108デフォルトの名無しさん
2006/12/29(金) 17:17:46実は、オレもJperl から Active Perl に移行するとき、
これが解るまでかなり時間がかかった覚えがあるんだけど。
---------------------------------------------------------
# 【Perl 日本語処理の基礎の基礎】
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま(シフトJIS形式の)ソースファイルに保存して下さい。
# 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。
# 文字コードの条件が異なる場合には編集が必要です。
# 編集の仕方はご自分で勉強するか、このスレで質問して下さい。
# まず、以下の行を先頭に入れて下さい。
use encoding "cp932";
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
# 次に、あなたが実行したい処理の内容を入れて下さい。
print "やあ!\n";
sleep(1);
0109デフォルトの名無しさん
2006/12/29(金) 17:24:210110デフォルトの名無しさん
2006/12/29(金) 17:26:35要するにhttp urlの正規表現が解ればいいわけね。
http://www.din.or.jp/~ohzaki/perl.htm#httpURL
0111デフォルトの名無しさん
2006/12/29(金) 17:31:39>要するにhttp urlの正規表現が解ればいいわけね。
違うッスorz
(1)(2)だけなら $line =~ /(h?)(ttps?:\/\/[^ |^ ]+)/ で。。。
0112デフォルトの名無しさん
2006/12/29(金) 17:34:07use strict;
use warnings;
while (<DATA>) {
s{(h?ttps?://([^\s ]+))}{<a href="http://$2">$1</a>}g;
print $_;
}
__DATA__
これhttp://www.example.com/1.txt とttp://www2.example.com/2.txt これ
URLのパターンマッチはこれだと甘いけど。
>108
use encodingはきちんと理解して使わないとバグの元にしかならないから反対。
0113デフォルトの名無しさん
2006/12/29(金) 17:35:35ごめん、間違えた。
0114デフォルトの名無しさん
2006/12/29(金) 17:37:130115108
2006/12/29(金) 17:43:36確かにね。
これから始める人なら、ソースはUTF-8に統一して
もらったほうがいいかもね。これでいいかな?
---------------------------------------------------------
# 【Perl 日本語処理の基礎の基礎】
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。
# 文字コードの条件が異なる場合には編集が必要です。
# 編集の仕方はご自分で勉強するか、このスレで質問して下さい。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
# 次に、あなたが実行したい処理の内容を入れて下さい。
print "やあ!\n";
sleep(1);
0116109
2006/12/29(金) 18:24:42乙!
WindowsのActivePerl初心者による
似たようなQ&Aの再生産を回避するために
テンプレートを設置しようというのはとてもすばらしいッス!
でも、
・テキストモードとバイナリモード
・ASCIIとマルチバイトコード
・日本でのマルチバイトコードは複数の種類が存在すること
・UTF-8以外でのマルチバイトコードの扱い
を理解してないと結局はすぐにつまづくと思う。
でも、これを丁寧に説明してるとテンプレートで紙面が足りないから
結局「http://〜を読んで」、「binmode, Encodeでググると吉」
ってなっちゃうんだよね。。。
次ぎスレに115のテンプレを追加して様子を見るのがいいのかな。
0117デフォルトの名無しさん
2006/12/29(金) 18:40:570119デフォルトの名無しさん
2006/12/29(金) 21:10:130120デフォルトの名無しさん
2006/12/29(金) 21:15:520121デフォルトの名無しさん
2006/12/29(金) 21:24:28スルー力身につくまでおまえがROMるかwebprog行ってろ
0122デフォルトの名無しさん
2006/12/29(金) 22:30:03Jcode.pmにパッチあててなくね?
0123デフォルトの名無しさん
2006/12/29(金) 22:46:19スルメイカかよ
0124デフォルトの名無しさん
2006/12/29(金) 23:08:30どうも「スルーする力(ちから)」という意味みたいだな。
それより、>>117にぴったりのスレがあるぞ。こっちで活躍したらどうだ
【Perl上級者コーナーPart01】
http://pc8.2ch.net/test/read.cgi/php/1024741312/l50
0125デフォルトの名無しさん
2006/12/29(金) 23:24:050127デフォルトの名無しさん
2006/12/30(土) 09:48:58スルーカ の検索結果 約 173,000 件中 1 - 10 件目 (0.03 秒)
0128デフォルトの名無しさん
2006/12/30(土) 09:53:090129デフォルトの名無しさん
2007/01/01(月) 03:05:23記事番号が奇数番号のときと偶数番号のときとで、
交互に違う情報を入れたいと思っているのですが、
perl で偶数と奇数を判別するのってどうやればいいんでしょうか?
0130デフォルトの名無しさん
2007/01/01(月) 03:07:150131デフォルトの名無しさん
2007/01/01(月) 03:14:400132デフォルトの名無しさん
2007/01/01(月) 03:22:342で割った余りが0なら偶数、1なら奇数と判定すればOK
0133デフォルトの名無しさん
2007/01/01(月) 07:26:190134デフォルトの名無しさん
2007/01/01(月) 15:02:29例文でお願いしますです。orz
0135デフォルトの名無しさん
2007/01/01(月) 15:12:55この程度のこともわからないのに
>kent-web の sunbbs.cgi を改造しまくって使っています。
なのか
0136デフォルトの名無しさん
2007/01/01(月) 15:22:34%2
0137デフォルトの名無しさん
2007/01/01(月) 18:38:54$a = 234;
if ( $a & 1) { print "奇数" }
else { print "偶数" }
0138デフォルトの名無しさん
2007/01/02(火) 00:43:33をかったんだよお年玉で
0139デフォルトの名無しさん
2007/01/03(水) 10:43:45WINDOWS鯖の場合だと
if (-w $write_file_path) { print "書き込み可能\n"; }というプログラムがが使えないんです
0140デフォルトの名無しさん
2007/01/03(水) 11:06:17マルチなので放置しましょう
0141デフォルトの名無しさん
2007/01/03(水) 11:20:32>use encodingは弊害がでかすぎるかと…。
kwsk.
今まで、Jcode->new($hogehoge)->sjis; でちまちま変換していた者としては
use encoding という技は新味ですyo.
0142デフォルトの名無しさん
2007/01/03(水) 14:25:47$y=1900;
if($y %4==0){
print "$y is a leap year.\n";
}elsif(($y %4==0) && ($y %100==0)){
print "$y is a common year.\n";
}elsif(($y %100==0) && ($y %400==0)){
print "$y is a leap year.\n";
}else{
print "$y is a common year.\n";
}
これで1900を$yに入れても、うるう年になってしまいます。
1900をcommon year.にするには、どうすればよいのでしょうか?
0143デフォルトの名無しさん
2007/01/03(水) 14:35:27そういうのは400,100,4の順番に判定するんだよ
0144デフォルトの名無しさん
2007/01/03(水) 14:45:240145デフォルトの名無しさん
2007/01/03(水) 14:52:270146デフォルトの名無しさん
2007/01/03(水) 15:09:31最初の条件 $y %4==0 が、「4で割り切れたら」だから、4で割り切れる数字は、
全てここで引っかかっちゃうよ。
0147デフォルトの名無しさん
2007/01/03(水) 17:45:100148デフォルトの名無しさん
2007/01/03(水) 20:54:190149デフォルトの名無しさん
2007/01/03(水) 20:55:00それは冗談で言っているんだよな。
0150デフォルトの名無しさん
2007/01/03(水) 21:13:580151デフォルトの名無しさん
2007/01/03(水) 21:22:42my $y = 1900;
if (DateTime->new(year => $y)->is_leap_year) {
print "$y is a leap year.\n";
} else {
print "$y is a common year.\n";
}
こうですか? よくわかりません><
0152デフォルトの名無しさん
2007/01/03(水) 21:25:310153デフォルトの名無しさん
2007/01/03(水) 21:27:16反則です
0154デフォルトの名無しさん
2007/01/03(水) 21:31:37まあ冗談だろうけど、実際に閏年の判定を書くとしたら >>151 なんだよなぁ・・・。
0155デフォルトの名無しさん
2007/01/03(水) 21:41:17まあ、今後 90年以上は >>148 が正しいわけだが。
0156デフォルトの名無しさん
2007/01/03(水) 21:41:240157デフォルトの名無しさん
2007/01/03(水) 21:50:310158デフォルトの名無しさん
2007/01/03(水) 22:00:080159デフォルトの名無しさん
2007/01/03(水) 22:20:400160デフォルトの名無しさん
2007/01/03(水) 22:34:26どんだけ先の話やねん
0161デフォルトの名無しさん
2007/01/03(水) 22:51:300162デフォルトの名無しさん
2007/01/03(水) 22:59:361993年使われ続けることも考慮しとくべきだな
0163デフォルトの名無しさん
2007/01/03(水) 23:02:58$j = shift() + 660;
unless ($j % 4) {
unless (($j - 660) % 100) {
return 0 unless ((($j - 660) / 100) % 4);
}
return 1;
}
return 0;
}
どぞ。
0164デフォルトの名無しさん
2007/01/03(水) 23:04:310165デフォルトの名無しさん
2007/01/03(水) 23:08:42地球の自転が遅くなるからとか言うが。小賢しい。
0166デフォルトの名無しさん
2007/01/03(水) 23:10:06だいたい時間を1970/01/01 00:00からの32bit整数であらわすのも心配だな。やっぱり64bitはほしいところだ。
0167デフォルトの名無しさん
2007/01/03(水) 23:20:410168デフォルトの名無しさん
2007/01/03(水) 23:26:13だと「Tue Jan 19 12:14:07 2038」って出るが
perl -e "print scalar(localtime(0xffffffff/2+1));"
だと何も表示されないな
perlは普通にでかい値扱えるから
localtime関数も符号付32bitの上限超えても平気かと思ってたがだめなのか
0169デフォルトの名無しさん
2007/01/04(木) 00:32:150171デフォルトの名無しさん
2007/01/04(木) 09:43:47原子時計の精度が1ピコ秒なんだぜ。
どうやって計るんだぜ?
0172デフォルトの名無しさん
2007/01/04(木) 13:46:03表示はされたけど1901年だったわさ
0173デフォルトの名無しさん
2007/01/04(木) 19:54:0710E-16sオーダの時間の計測に成功したっていうニュースなら見た気がするが。
0174デフォルトの名無しさん
2007/01/04(木) 20:23:270175デフォルトの名無しさん
2007/01/04(木) 20:34:090176デフォルトの名無しさん
2007/01/04(木) 23:41:55全角スペースを半角スペースに置き換えたく、
~s/\xA1\xA1/\x20/g
としています。スペースの置き換え動作自体はするんですが、「ァー」や「ぁ!」などの文字列が文字化けするようになりました。
文字コードはEUCです。
コードを調べてみると「ぁ!」は
A4 A1 A1 AA となっており、全角スペースと誤認してしまうようでした。
どのように解決したら良いのでしょうか、教えてください。
0177デフォルトの名無しさん
2007/01/04(木) 23:49:59use encoding 'euc-jp';
0178デフォルトの名無しさん
2007/01/04(木) 23:50:190179176
2007/01/05(金) 00:12:360180デフォルトの名無しさん
2007/01/05(金) 13:30:32Windows XP ActivePerl の環境で、system コマンドで呼び出したプログラムをバック グラウンド で動かしたい。どうすればよい? 例えば、スクリプトはこんな感じ。
---
my $IE = "c:\\Program Files\\Internet Explorer\\IEXPLORE.EXE";
system ($IE, "http://www.hotmail.com");
---
例えば、上記を test.pl としてセーブし、これを DOS 窓から呼びだすと、こんな感じでとまり、別プロセスとして実行してない。
---
C:\Documents and Settings\takasaks>perl e:/work/0my/scripts/test.pl
_
---
別プロセスで動かしたい、どうれすればよいのでしょうか?
0181デフォルトの名無しさん
2007/01/05(金) 13:41:21ActivePerl限定だった希ガス
0182デフォルトの名無しさん
2007/01/05(金) 13:45:210183180
2007/01/05(金) 14:54:17>>182
確かに今読み直すと変だね。
0184デフォルトの名無しさん
2007/01/05(金) 21:25:20突然もう1度見たいのですが、どなたか知っている方居ませんか?
1行に出来るんだから行数関係ないっていわれそうですが6行くらいで、掲示板として機能していたPerlのプログラムでした。
2chのどこで見たんだったかなぁ、、
0185デフォルトの名無しさん
2007/01/05(金) 21:26:55http://pc10.2ch.net/test/read.cgi/tech/1142467359/
0186デフォルトの名無しさん
2007/01/05(金) 21:32:38http://pc10.2ch.net/test/read.cgi/php/1036141603/
0187デフォルトの名無しさん
2007/01/05(金) 22:38:22それっぽいです。
ありがとうございました。
0188デフォルトの名無しさん
2007/01/06(土) 02:56:25$s に 3d20+10 のような文字が入ってたら、20面ダイスを3回振って結果に10を足す、ような。
$s に複数入っててもちゃんと計算してくれるのが良いです。更に言うと 1d6+5-4 のように加算減算も複数扱えると尚良いです。
自作しようかと思ったら結構フクザツで・・・。
0189デフォルトの名無しさん
2007/01/06(土) 03:32:00こんなんあったよ。
あとはsplitしたり調整したりするラッピングするだけで実装できるんじゃない?
そんなマニアックなものあるかよ!と思ったらあったw
恐るべしCPAN
0190デフォルトの名無しさん
2007/01/06(土) 03:37:50CPANスゲー
0191188
2007/01/06(土) 04:23:08最近 Perl と離れてたんですが、やっぱり便利だ!
ありがとうございました。
0192デフォルトの名無しさん
2007/01/06(土) 21:10:420193デフォルトの名無しさん
2007/01/06(土) 21:13:440194デフォルトの名無しさん
2007/01/06(土) 21:14:04つperlre
0195デフォルトの名無しさん
2007/01/06(土) 21:34:41ありがとうございます
0196デフォルトの名無しさん
2007/01/06(土) 21:39:550197デフォルトの名無しさん
2007/01/06(土) 21:48:35お騒がせしてすみません
>>196 ありがとうございます
0198デフォルトの名無しさん
2007/01/06(土) 22:19:53Perl モジュールをCPANに登録して公開するときって、
GPLライセンスでいいんですか?
http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%BB%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9
それとも、この Artistic License ですか?
0199デフォルトの名無しさん
2007/01/06(土) 22:26:32Apache Licenseとかも混じってるし
http://www.google.co.jp/search?num=50&q=site%3Acpan.org+license
なんでもいいんじゃない?
0200デフォルトの名無しさん
2007/01/06(土) 23:42:21GNUプロジェクトによれば、首尾一貫性と均一性のためにperlと同じライセンス
(GPLとArtistic Licenseのデュアルライセンス)を適用することを推奨されている。
<blockquote cite="http://www.gnu.org/licenses/license-list.ja.html">
Perl のライセンス
このライセンスでは、Artistic ライセンス とGNU GPLのどちらかを選択できるとしています。
言い換えれば、あなたはこれらの2ライセンスのどちらかから選べるということです。
フリーソフトウェアのライセンスに要求される条件は満たしますが、本物のコピーレフトとは言えないかも知れません。
選択肢の一つとして GNU GPLがありますので、GNU GPLとは矛盾しません。
Perl 4 や Perl 5 用のパッケージを書く場合には、Perl プログラミングの世界における首尾一貫性と均一性を促進するために、
このライセンスを適用されることをお勧めします。Perl 以外の分野では、単に GNU GPL を使う方が好ましいので、
このライセンスを使わないよう強くお勧めします。
</blockquote>
が、好きなライセンスにすりゃ良いんじゃない?
ついでにperlmodstyleには
<blockquote>
Licensing
Make sure that your module has a license, and that the full text of it is included in the distribution
(unless it's a common one and the terms of the license don't require you to include it).
If you don't know what license to use, dual licensing under the GPL and Artistic licenses
(the same as Perl itself) is a good idea. See perlgpl and perlartistic.
</blockquote>
とある
0201デフォルトの名無しさん
2007/01/07(日) 02:04:430202デフォルトの名無しさん
2007/01/07(日) 05:25:31if ( $text =~ "[1-9.]" ) {
print "$text \n";
}
だとうまくいきません。
どのように修正すればいいですか?
0203デフォルトの名無しさん
2007/01/07(日) 05:25:420204デフォルトの名無しさん
2007/01/07(日) 05:28:070205デフォルトの名無しさん
2007/01/07(日) 05:32:00一つだけなら
/[1-9.]+/
すべてなら
print(join(',', /[1-9.]+/g));
0206デフォルトの名無しさん
2007/01/07(日) 06:01:09#!usr/bin/perl ←だとアクセ500のエラーがでます。
3時間探しましたが答えが見つかりませんでした。
よろしくお願いします。
os:win2000
webserver:apache 2.059
active perl
0207デフォルトの名無しさん
2007/01/07(日) 06:04:39#!/usr/bin/perl
0208デフォルトの名無しさん
2007/01/07(日) 06:05:19×#!usr/bin/perl
○#!/usr/bin/perl
0209デフォルトの名無しさん
2007/01/07(日) 06:09:07いろいろやっていくうちに"/"が消えてました。
やっとゴールにたどり着きました。ありがとうございました。
0210デフォルトの名無しさん
2007/01/07(日) 06:25:02説明不足ですみません。
$text = "12:24" なら $textの表示そのものをしない
$text = "3.142" なら表示する
というような不要な文字が1つでもあれば
無視するといった感じのものが作りたかったのです。
よろしくお願いします。
0211デフォルトの名無しさん
2007/01/07(日) 06:30:580212デフォルトの名無しさん
2007/01/07(日) 06:32:140213デフォルトの名無しさん
2007/01/07(日) 06:35:490214デフォルトの名無しさん
2007/01/07(日) 06:40:16無事作成できました。ありがとうございました。
0215デフォルトの名無しさん
2007/01/07(日) 07:26:190216デフォルトの名無しさん
2007/01/07(日) 08:09:310217デフォルトの名無しさん
2007/01/07(日) 14:11:53sub func(\[$@]) {
my $class = shift;
my $arg = shift;
}
として、$arg に配列もしくはスカラのリファレンスを受け取りたいのですが、
$arg にはスカラしか入ってくれません。
どう書くのが正解でしょうか?
0218デフォルトの名無しさん
2007/01/07(日) 15:06:23\. じゃなくてええの?
0219デフォルトの名無しさん
2007/01/07(日) 15:44:04自分でちょっと試せばいいだろ
print "Matchn" if 'ABC' =~ /[.]/;
0220デフォルトの名無しさん
2007/01/07(日) 17:38:56文字クラスの中だから
0221デフォルトの名無しさん
2007/01/07(日) 20:45:01prototypeに頼らないのが正解。
そのprototype、第一引数について書かれてないけど。
0222デフォルトの名無しさん
2007/01/07(日) 22:45:16どうすればこのエラーが出なくなるんでしょう。
0223デフォルトの名無しさん
2007/01/07(日) 23:28:080224デフォルトの名無しさん
2007/01/08(月) 00:48:56入ってます。
0225デフォルトの名無しさん
2007/01/08(月) 01:27:070226デフォルトの名無しさん
2007/01/08(月) 01:49:50ためしに再インストールしようとしたArchive::Zipで出てます。。。
何処のレポジトリかはどうやってわかるんでしょうか。
0227デフォルトの名無しさん
2007/01/08(月) 08:59:59「ー」を含む言葉だと検索結果で出力されません
「。」「・(半角)」「・(全角)」とか色々やったんですが、どうやら「ー」だけのようです
解決方法をよろしくお願いします
open(IN,"$file");
while(1) {
$line = <IN>;
@data = split(/,/ ,$line);
if ( $line eq "" ) { last;}
if ( $data[0] =~ /$in{'test'}/ ) {
print "$data[1]\n";
}
}
close(IN);
0228デフォルトの名無しさん
2007/01/08(月) 11:44:40CSVファイルを扱うならば、Text::CSV をお使いください。
(Text::CSV_XS かもしれない、手元にソースがない)
0229デフォルトの名無しさん
2007/01/08(月) 12:25:03返信ありがとうございます
Text::CSVモジュールを使わないと対処できないということでしょうか?
フリーのwebスペースを利用したいので、モジュールはインストール出来ないです
Text::CSV自体は優れものみたいですね
0230デフォルトの名無しさん
2007/01/08(月) 12:27:20えっと、ppmシェルで、
search Archive-Zip
って入力して。
Searching in Active Repositories
1. Archive-Zip [1.18] Archive-Zip
こんな感じに出てくると思う。仮に1番なら
desc 1
って入力したときなんて表示されてる?
0231デフォルトの名無しさん
2007/01/08(月) 13:21:02つShift_JISの罠
/\Q$in{'test'}\E/
Text::CSVはマルチバイト文字通ったっけ?
Text::CSV_XSでbinaryオプションを与えない駄目だったような記憶が
0232デフォルトの名無しさん
2007/01/08(月) 14:02:13Text::CSV_XSでbinaryオプションつけないとダメだ。
0233デフォルトの名無しさん
2007/01/08(月) 14:07:57返信ありがとうございます。おかげで解決することができました
ただ、「\Q」が「\Eまでのメタ文字をリテラルとして判断する」のは別ったのですが
「/$in{'test'}/」←これのどこにメタ文字があるのかが分らないです
解決はしたけど理解出来てない…
0234デフォルトの名無しさん
2007/01/08(月) 14:25:47「ー」はShiftJISで0x81 0x5Bと表される。この2バイト目が'[' = 0x5B
他にもソ('\')とか+('{')とか色々。
文字コードの割り当て参考資料
ttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html
ASCIIコード表
ttp://adlib.rsch.tuis.ac.jp/~akira/lect/softa/ascii.html
0235デフォルトの名無しさん
2007/01/08(月) 14:31:01「$in{'test'}」自体がメタ文字を含むってことじゃなくて、
実行時に変数$in{'test'}にメタ文字を含むShiftJIS文字が入る可能性があるってこと。
0236デフォルトの名無しさん
2007/01/08(月) 14:51:17かなり見当違いな考えをしてたみたいですね
「ー」以外にも注意しなければいけない文字が結構ありますね
ご丁寧にありがとうございました
0237デフォルトの名無しさん
2007/01/08(月) 16:52:091: Archive-Zip
Provide an interface to ZIP archive files.
Version: 1.18
Author: Ned Konz <[email protected]>
Provide: Archive::Zip version 1.18
Require: File-Which
Require: PathTools
Repo: trouchelle
CPAN: http://search.cpan.org/dist/Archive-Zip-1.18/
Installed: 1.18 (perl)
2: Archive-Zip
Provide an interface to ZIP archive files.
Version: 1.18
Author: Adam Kennedy ([email protected])
Provide: Archive::Zip version 1.18
Provide: Archive::Zip::BufferedFileHandle
Provide: Archive::Zip::MemberRead
Provide: Archive::Zip::MockFileHandle
Require: File-Which
Repo: ActiveState Package Repository
CPAN: http://search.cpan.org/dist/Archive-Zip-1.18/
Installed: 1.18 (perl)
3: Archive-Zip
Provide an interface to ZIP archive files.
Version: 1.18
Author: Ned Konz ([email protected])
Require: Compress-Zlib
Repo: bribes
CPAN: http://search.cpan.org/dist/Archive-Zip-1.18/
Installed: 1.18 (perl)
こんな感じです。
0238デフォルトの名無しさん
2007/01/08(月) 17:32:10おもったが、他の文字コードに変換してsplitするのはどうよ。
いちばんお手軽。
open(IN,"$file");
while(1) {
$line = <IN>;
$line=Jcode->new($line)->euc;
@data = split(/,/ ,$line);
if ( $line eq "" ) { last;}
if ( $data[0] =~ /$in{'test'}/ ) {
print Jcode->new("$data[1]\n")->sjis;
}
}
close(IN);
0239デフォルトの名無しさん
2007/01/08(月) 17:41:21"$file" とかって、ダブルクォートで括って書くの無駄だよね。
全く同じ内容の、新しい文字列を生成してる訳でしょ?
だったら単に $file って書いた方が効率良いのに。
KENTとか、どっかのサンプルでわざわざ括るようになってるのかな。
こういう書き方してる人が、どこで習ってくるのか知りたい。
0240デフォルトの名無しさん
2007/01/08(月) 17:51:09$in{'test'}が正規表現の場合の話か。
EUCにするくらいなら、変換に多少コストが掛かるがUTF-8にして処理したほうがいいと思う。
今度は>>176こういう問題が発生する。SJISでも率は低いが起こるけれどね。
ってもしかして元質問も正規表現を入力する質問だったんだろか…
indexの代わりにマッチングを行ってるだけかと思って\Q\Eで答えちゃったけれども
>>239
最近は見ないけれど
print "@hoge";
とやっておいてなんか表示が変だと質問してくる人までいるから困る。
ついでにperlfaq
ttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#What_s_wrong_with_always_quoting
0241デフォルトの名無しさん
2007/01/09(火) 00:43:01あ、それ昔やってた。
なんかprint = ダブルクォート括らないと不安、みたいな気がしてたような。
0242デフォルトの名無しさん
2007/01/09(火) 00:46:26print $a, $b; #とすればいいところを
print $a . %b; #としていた時代や
print "$a$b"; #としていた時代があったなあ
0243デフォルトの名無しさん
2007/01/09(火) 01:05:55そっちの方が速いんだけどね。
0244デフォルトの名無しさん
2007/01/09(火) 01:39:08オブジェクトじゃなくてその文字列表現だけ保持したい場合とかあるでしょ。
0245244
2007/01/09(火) 01:46:320246デフォルトの名無しさん
2007/01/09(火) 12:09:24散々既出だが、一応突っ込んどく。カンマの方が遲い
use Benchmark ;
my ( $hoge, $moge ) = ( 'hoge', 'moge' ) ;
sub dot { print STDERR $hoge . $moge . "\n" ; }
sub dq { print STDERR "$hoge$moge\n" ; }
sub comma{ print STDERR $hoge , $moge , "\n" ; }
timethese ( 1000000, { op1 => 'dot', op2 => 'dq', op3 => 'comma' } ) ;
$ perl Bench.pl 2> /dev/null
Benchmark: timing 1000000 iterations of op1, op2, op3...
op1: 15 wallclock secs ( 7.67 usr + 4.81 sys = 12.48 CPU) @ 80128.21/s (n=1000000)
op2: 12 wallclock secs ( 7.37 usr + 4.67 sys = 12.04 CPU) @ 83056.48/s (n=1000000)
op3: 22 wallclock secs ( 9.13 usr + 11.23 sys = 20.36 CPU) @ 49115.91/s (n=1000000)
0247243
2007/01/09(火) 13:10:54初心者でゴメン。Windowsだから、nulに出力して実行してみた。
(Windows XP SP2 ActivePerl5.8)
Benchmark: timing 10000000 iterations of op1, op2, op3...
op1: 12 wallclock secs (11.02 usr + -0.02 sys = 11.00 CPU) @ 909173.56/s
(n=10000000)
op2: 12 wallclock secs (10.87 usr + 0.00 sys = 10.87 CPU) @ 919540.23/s
(n=10000000)
op3: 8 wallclock secs ( 7.02 usr + 0.00 sys = 7.02 CPU) @ 1425516.75/s
(n=10000000)
あれ?最初自分の考えでは関数を二回使ってるカンマの方が遅いと思ってたんだけど、
ベンチしたらドットの方が速いんで>>243を書いた。
なんで結果違くなっちゃうのか誰か教えて〜。
0248243
2007/01/09(火) 13:29:23systemのIOでのオーバーヘッドで結果的にdotの方が速いという寸法か。>>246
Windowsで実際にファイルに出力して計測してみると大体同じ(わずかにcommaが速い)になった。
ここらへんはLinuxとWindowsで違うんだろうね。
0249デフォルトの名無しさん
2007/01/09(火) 14:06:58うんにゃ。
8Bのメモリ確保なら大してコストかからんからサンプルとして不十分じゃないか?。
$hogeが十キロの単位になってくるとカンマが追い抜くんじゃないだろうか。
0250デフォルトの名無しさん
2007/01/10(水) 01:42:28いや、>>246はSTDERRに出力してるからカンマ区切りが遅くなっているだけ。
STDERRはperl内部でも特別扱いされていて、カンマで区切られた要素毎に fflush される。
なので、STDERRへ出力する場合はカンマ区切りの方が(fflushの増える分だけ)遅くなる。
他のハンドルだと($|=1でも)、普通はカンマ区切りの方が速くなる。
0251デフォルトの名無しさん
2007/01/10(水) 04:22:120252デフォルトの名無しさん
2007/01/10(水) 15:25:22多いように感じるんだけど、これってどうなんだろう。
掲示板だったら、表示.cgi 書込み.cgi とか分けた方が保守しやすいのでは、と。
意見求みまする。
0253デフォルトの名無しさん
2007/01/10(水) 15:43:02インスコするファイルがたくさんあるとお子様が混乱してしょうもない
質問で邪魔してくるので、ソースメンテする手間はかかるけどトータル
では得らしい。
0254デフォルトの名無しさん
2007/01/10(水) 15:51:55今、plファイルのwindows向けのアイコンを何となく作っていますが、
真珠っぽいのがファイルについたアイコンか、らくだの絵のアイコンかどちらがふさわしいと思いますか?
0255デフォルトの名無しさん
2007/01/10(水) 16:07:310256デフォルトの名無しさん
2007/01/10(水) 16:18:380257デフォルトの名無しさん
2007/01/10(水) 16:25:410258デフォルトの名無しさん
2007/01/10(水) 20:00:56現在、perl(HPUX)とNet-Telnet-3.03を利用してtelnet接続しているのですが、
telnet中にESCキーを入力させる事は可能なのでしょうか?
perl:v5.8.0 built for PA-RISC1.1-thread-multi
telnet:Net-Telnet-3.03
対話式なプログラムを実行していき、途中で
どうしてもESCキーが必要になりました。
$telnet->print("\x1B");
こんな感じで文字コード入力でもダメでした。。
0259韋駄天はふと考えた
2007/01/10(水) 23:02:232回もパソコンをウイルスによって不調になり使えなくなりました。
私達はパソコン製造業者及び修理業者とパソコン関連で商売をしている業者を
あまりにも野放にしすぎました。
その結果が自作自演ウイルスバラ撒きの悪徳商法です。
703 :韋駄天はふと考えた :2007/01/10(水) 22:11:17 ID:ZKnpXOph
ノートンがウイルスを検出しました。
あなたのパソコンを60日間に渡り78250個ものウイルスから守ってきました。
もうすぐ無料期間が終わりますので、ウイルス対策有料ソフトを購入してください。
はぁ????なにいってんの?なんで、たった60日間で78250個ものウイルスが進入してくんだよ?
明らかに自作自演目的の業者の仕業じゃねえか?
犯人はおまえらだろが!この犯罪者かぶれの集団が!!
あちこちのサイトを開く度にコンピューターウイルスがパソコンにバンバン進入してくる。
おまえらな!自分で作ったサイトにコンピューターウイルスを混ぜて、他人の
何十万台ものパソコンを不調にさせたり故障させて、ウイルス対策ソフトを
高額で売りつけてまで儲けたいのかよ?
自転車屋が地域の自転車をパンクさせて回ったり、消防士が管轄地域で放火して
回るのと同じ犯罪をおまえらがやっているんだよ!
てめえらで新たなコンピューターウイルスを次々に作ってはバラ撒いては、ウイルス対策ソフトを
高値で売りつける自作自演商売しやがって!
この腐れ外道共が! 恥知らずの犯罪者共めが!
0260デフォルトの名無しさん
2007/01/10(水) 23:06:09でっかく「PL」とか「Perl」の文字が入ってるアイコンとか……。(聞いてない)
0261デフォルトの名無しさん
2007/01/11(木) 00:08:30公式のらくだの絵をちょっと使って作ってみました。
>>256
あれはそのままでも結構かっこいいのですが、ちょっと抵抗があったので。。
>>260
一応Perlの文字を入れました。
どうもでした。
0262デフォルトの名無しさん
2007/01/11(木) 01:01:46seek , getc等で1文字単位で読むしかないかな?
0263デフォルトの名無しさん
2007/01/11(木) 01:09:57つFile::ReadBackwards
0264デフォルトの名無しさん
2007/01/11(木) 01:15:30ありがとうございます。
0265デフォルトの名無しさん
2007/01/11(木) 17:03:13aを1文字の文字列、$bを数字とし、上の行から$aを$b回と表示していき、3角形を描くプログラム。
というのが出ています。
print "a? ";
chomp($a=<stdin>);
print "b? ";
chomp($b=<stdin>);
でaに+をいれ、bに5といれると
+
++
+++
++++
+++++
こんな感じで表示させたいです。
for文の入れ子でやると思うのですが、表記がわかりません。
ヒントだけでもいただけないでしょうか?
0266デフォルトの名無しさん
2007/01/11(木) 17:09:130267デフォルトの名無しさん
2007/01/11(木) 17:19:33おぞましいコードを期待してるかもしれないんだけど
for (my $line=1; $line <= $b; ++$line) {
for (my $num=1; $num <= $line; ++$num) {
print $a;
}
print "\n";
}
こういう風に簡潔にかける。
for my $num (1..$b) {
print $a x $num, "\n";
}
0268デフォルトの名無しさん
2007/01/11(木) 17:21:580269265
2007/01/11(木) 17:33:51できました。ありがとうございます。
入れ子でわけわからない長いプログラムを作っていた自分がアホらしくなりましたw
もし入れ子でやるとしたら
入れ子の方の後半部分の
print $a;
}
print "\n";
}
はどういうことでしょうか?
0270デフォルトの名無しさん
2007/01/11(木) 17:34:370271デフォルトの名無しさん
2007/01/11(木) 17:54:510272デフォルトの名無しさん
2007/01/11(木) 18:12:08お決まりなんだけどね。
0273デフォルトの名無しさん
2007/01/11(木) 18:21:320274デフォルトの名無しさん
2007/01/11(木) 18:58:59いっそのことCPANで(笑
0275267
2007/01/11(木) 19:02:50(${a}x(($b*$b+$b)/2))=~m{((??{++$t;".{$t}"}))(?{print"$^N\n"})}g;
こうですか?わかりません><
0276デフォルトの名無しさん
2007/01/11(木) 19:17:380277デフォルトの名無しさん
2007/01/11(木) 19:26:010278デフォルトの名無しさん
2007/01/11(木) 20:25:300279デフォルトの名無しさん
2007/01/11(木) 20:27:110280デフォルトの名無しさん
2007/01/12(金) 02:12:36不毛だ…
0281デフォルトの名無しさん
2007/01/12(金) 02:31:38以下のコードだと、$_が"病院"(0x95,0x61,0x89,0x40)とかの場合でも
データを取得してしまいます。
このような2バイト文字を取得しないようにするには
どの様に修正すればいいですか?
if ( $_ =~ "@" ) {
$data[$i++] = $_;
}
0282デフォルトの名無しさん
2007/01/12(金) 03:56:45当方、Perlは殆どいじった事がなく、
HSPやCを少々組んだ事がある程度の知識で質問しているため、
常識的な事や的外れな事を質問していたら申し訳ありません。
google等で調べても何やっても上手くいかなかったので、
どうか皆様の力をお貸し下さい。orz
CGIで生成したページから別サイトへのリンクをクリックした時に、
「このURLへアクセスします。よろしいですか?」
と言ったような確認ページを挟んでアクセスするようにしようとしています。
具体的書くと、元ページの別サイトへのリンクは、
xxx.cgi?url=http://www.xxx.com/index.php?%A5%AC%A5
と言うように、リンク先のURLを<a>タグに埋め込んで自身のCGIに返すようになっています。
URL=の部分を取得し、そのまま確認ページの<a>タグに埋め込みたいのですが、
実際にやってみると?以降のURLエンコードされた部分が漢字や化けた文字として表示されてしまい、
綺麗なURLになってくれません。
渡されてきたURLを「http://www.xxx.com/index.php?%A5%AC%A5」のように、
そのまま表示するにはどうしたらいいでしょうか?
一応書いておくと、スクリプトはUTF-8Nで書いています。
0283デフォルトの名無しさん
2007/01/12(金) 04:00:480284デフォルトの名無しさん
2007/01/12(金) 04:08:40orz
CGIはスレ違いだったんですね。本当にごめんなさい。
一日考え続けてて疲れてたのか、>>1を確認するのを失念してました。
向こうの初心者質問スレで質問してくる事にします。
スレ汚し失礼しました。
0285デフォルトの名無しさん
2007/01/12(金) 04:14:03まず始めに。
当方、Perlは殆どいじった事がなく、
HSPやCを少々組んだ事がある程度の知識で質問しているため、
常識的な事や的外れな事を質問していたら申し訳ありません。
google等で調べても何やっても上手くいかなかったので、
どうか皆様の力をお貸し下さい。orz
CGIで生成したページから別サイトへのリンクをクリックした時に、
「このURLへアクセスします。よろしいですか?」
と言ったような確認ページを挟んでアクセスするようにしようとしています。
具体的書くと、元ページの別サイトへのリンクは、
xxx.cgi?url=http://www.xxx.com/index.php?%A5%AC%A5
と言うように、リンク先のURLを<a>タグに埋め込んで自身のCGIに返すようになっています。
URL=の部分を取得し、そのまま確認ページの<a>タグに埋め込みたいのですが、
実際にやってみると?以降のURLエンコードされた部分が漢字や化けた文字として表示されてしまい、
綺麗なURLになってくれません。
渡されてきたURLを「http://www.xxx.com/index.php?%A5%AC%A5」のように、
そのまま表示するにはどうしたらいいでしょうか?
一応書いておくと、スクリプトはUTF-8Nで書いています。
0286デフォルトの名無しさん
2007/01/12(金) 04:20:09ありえない誤爆・・・。
ほんっとうにごめんなさい・・・。
0287デフォルトの名無しさん
2007/01/12(金) 04:23:330288281
2007/01/12(金) 04:29:08おさわがせしました。
0289デフォルトの名無しさん
2007/01/13(土) 00:44:28うーんうーん悩んでいた時のことを思い出した。
そういや、半角英字を全角英字に置換することってできるの?
0290デフォルトの名無しさん
2007/01/13(土) 00:53:020291デフォルトの名無しさん
2007/01/13(土) 01:42:350292デフォルトの名無しさん
2007/01/13(土) 22:09:16こちらでお聞きします。
キー入力を待って、キー入力があれば処理を次に進める、ということをやりたいのですが、
C言語でいうところの、getch() に相当する関数はないでしょうか?
0293デフォルトの名無しさん
2007/01/13(土) 22:10:05そのころと比べるとかなりPerlは寂れた?
0294デフォルトの名無しさん
2007/01/13(土) 22:34:22Term::Getch
0295デフォルトの名無しさん
2007/01/14(日) 00:42:13ここから、1位=N、2位=S、3位=E、4位=W、という結果を出したいと思っています。
得点が同点の場合、E→S→W→Nの順で優先となります。
とりあえず、$rank{E}='15000',$rank{S}='20000',,,として、
if(($rank{E}>=$rank{S})&&($rank{E}>=$rank{W})&&($rank{E}>=$rank{N})){
#E=1位
#SとWとNで2位以下の判別
#何かと何かで3位と4位の判別
} elsif (($rank{S}>=$rank{W})&&.......
#S=1位
#EとWとNで2位以下の判別
#何かと何かで3位と4位の判別
}elsif(..
と、やり始めましたが、とてつもない作業になりそうです。
何か、よい解決法がございましたらご示唆お願いします。
0296デフォルトの名無しさん
2007/01/14(日) 00:49:18@result= sort {(split/:/,$b)[1]<=>(split/:/,$a)[1]} @result;
0298デフォルトの名無しさん
2007/01/14(日) 01:06:36# こんな配列
my @results = ("E:15000", "S:20000", "W:15000", "N:50000");
# 得点が同点の場合の順
my %prio_of = (
E => 0, S => 1, W => 2, N => 3,
);
my @s_results = map { $_->[0] }
sort { $b->[2] <=> $a->[2] || $prio_of{$a->[1]} <=> $prio_of{$b->[1]} }
map { [ $_, (split/:/=>$_)] } @results;
0299デフォルトの名無しさん
2007/01/14(日) 01:23:07随分長い間Perlから離れてるので間違ってるかも知れないけど
$foo = '2000';
と文字列にしておいて、その後で $foo を数値として使った場合、
スカラ変数の構造体は、
文字列型のものから、数値も文字列も両方入る奴に切り替わる。
構造体切り替えの手間もあるし、構造体のサイズも大きくなるから非効率
…だったような気がする。
0300295
2007/01/14(日) 01:43:35>>296 様
すみません、説明が不足していました(ということに気づくのに、いただいた式を
眺めながらかなり時間がかかりました・・・)。実は、EやSが変数の中に出てくる
順番は毎回変わる可能性がありました。申し訳ありません。
>>298 様
欲しい結果が出せました。ただ、内容の理解には私にはまだまだ時間がかかりそうです・・
なんとか少しずつ、吟味していきたいと思います。
>>297 様
わかりましたか。そのとおりです。
皆様、すばらしいご教授、どうもありがとうございました。
0301デフォルトの名無しさん
2007/01/14(日) 01:59:22perl は型はなしでしょ。
$foo = '2000';
も
$foo = 2000;
は同じでしょ。
0302デフォルトの名無しさん
2007/01/14(日) 02:13:38つ [perlguts]
つ [Devel::Peek]
0303デフォルトの名無しさん
2007/01/14(日) 02:45:43もちっと教えてくれんかのう。
perldataには
「あるスカラー変数が、“文字列”型、“数値”型、“ファイルハンドル”型、
あるいはその他の型であるように宣言する方法はありません。」
とあるかんだけど、それとは違うレベルで何かあるのか?
0304デフォルトの名無しさん
2007/01/14(日) 03:03:20> Double-Typed SVs
> スカラー変数は通常、整数、倍精度、ポインタ、リファレンスのうちの いずれか一つの型をとります。Perl は実際のデータに対して、
> 蓄積されている型から要求されている型へ、自動的に変換を行ないます。
0306303
2007/01/14(日) 03:57:55どうもありがとう。
文脈によってperl内部で数値と評価されたり文字列として評価されたりすることは分かっています。
しかし、シンタックス上
$foo = '2000';
と
$foo = 2000;
に違いがあるとは読み取れませんでした。
#$foo = '2000' . '';
#と
#$foo = 2000 + 0;
#が違うのはわかりますよ。
0307303
2007/01/14(日) 04:24:03$foo = 2000;
の場合数値コンテキストになるんだ。(そりゃそうか)
0308デフォルトの名無しさん
2007/01/14(日) 13:40:27ワロタ
なんていわれたの?w
0309デフォルトの名無しさん
2007/01/14(日) 14:38:20先生がこのスレを見ていたか
どっちかな
0310デフォルトの名無しさん
2007/01/14(日) 14:54:53>半角数字を全角数字に置換することはできても、半角英字を全角英字に置換することが難しいことに、
>うーんうーん悩んでいた時のことを思い出した。
>そういや、半角英字を全角英字に置換することってできるの?
次スレのテンプレ予定の>>115に忠実に従えば、
tr/a-zA-Z/a-zA-Z/
でできる。
0311デフォルトの名無しさん
2007/01/14(日) 14:58:44こういうテクニック(?)を思い出したんですけど、どこに書かれていたものでしょうか。
0312デフォルトの名無しさん
2007/01/14(日) 15:01:00use Devel::Peek;
$foo1 = '2000';
Dump $foo1;
$foo2 = 2000;
Dump $foo2;
↓
SV = PV(0x363bc) at 0x18aef9c
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x3dc2c "2000"\0
CUR = 4
LEN = 8
SV = IV(0x18a68b8) at 0x18af02c
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 2000
0313299
2007/01/14(日) 20:42:44use Devel::Peek;
$foo = '2000';
Dump $foo;
$foo += 1;
Dump $foo;
SV = PV(0x1801660) at 0x180b5a8
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x300c70 "2000"¥0
CUR = 4
LEN = 5
SV = PVIV(0x1801a20) at 0x180b5a8
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 2001
PV = 0x300c70 "2000"¥0
CUR = 4
LEN = 5
この状態でFLAGSをC側からいじると、
文字列として表示した時と、数値として使った時で別の値を出すスカラ
とか作れちゃうんだよね。
0314デフォルトの名無しさん
2007/01/14(日) 22:35:50実はoverloadがあればxsを使わずともそういうのが作れちゃったりするのですよ。
ttp://search.cpan.org/~dconway/Contextual-Return-v0.1.0/lib/Contextual/Return.pm
use Contextual::Return;
$contextual = NUM { 10 } STR { 'abc' };
print $contextual . '';
print $contextual + 0;
0315314
2007/01/14(日) 22:43:39313はスカラを作ると言うことで代入した別の値を保持まで出来たりするのかな
0316デフォルトの名無しさん
2007/01/14(日) 23:55:020317デフォルトの名無しさん
2007/01/14(日) 23:56:11ttp://search.cpan.org/~gbarr/Scalar-List-Utils-1.19/lib/Scalar/Util.pm
0318デフォルトの名無しさん
2007/01/14(日) 23:59:37スルーしてた。xs を使って実現したのが Scalar::Util の dualvar ってことっすね。
0319デフォルトの名無しさん
2007/01/15(月) 00:09:24作った後で代入し直したら、片方だけ(数値だけ or 文字列だけ)になっちゃった。
ということは、xsでフラグいじって IOK, POK 両方立てても
代入したら片方になっちゃうということか。
オブジェクトにして代入まで見張れば良いんだろうけど。
0320デフォルトの名無しさん
2007/01/15(月) 01:57:29method=getで受けとった部分が文字化けしてしまいます。method=postは大丈夫でした。
よろしくお願いします。
↓の一番下の部分も参考にしましたが直りませんでした。
http://tech.bayashi.net/pdmemo/chara2.html
apache perlは↓のサイトを参考に構築してあります。
http://www.y-kit.jp/saba/
------------------------------
環境
Apache/2.0.59 (Win32) PHP/5.1.4
------------------------------
コード例
require './jcode.pl';
#GET用
$myindata=$ENV{'QUERY_STRING'};
#POST用
#read( STDIN, $myindata, $ENV{ 'CONTENT_LENGTH' } );
#$myindata =~ tr/+/ /;
#$myindata =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;
&jcode'convert( *value, 'sjis' );
print "Content-type: text/html\n\n";
print $myindata;
------------------------------
getデータ
http://localhost/bbsmt/write.cgi?name=a&mail=&message=あいうえお&a=11
表示データ
name=a&mail=&message=???¢???|?¨&ip=&a=11
0321デフォルトの名無しさん
2007/01/15(月) 02:03:070322デフォルトの名無しさん
2007/01/15(月) 12:39:35そのまま別のサーバに移動したら読み込めなくなりました。
dbmファイルは.dirと.pagの2つじゃない方(1つのファイル)です。
古いサーバはもう使えません。新しいサーバでdbmファイル
を読む方法はないでしょうか…。
0323デフォルトの名無しさん
2007/01/15(月) 14:43:05質問する時はまず環境を説明しろ!
(古い方と新しい方それぞれのOSの種類とバージョン,Perlのバージョン)
あと、読めなくなったってのはどんなエラーメッセージが来てるのかも報告汁
0324デフォルトの名無しさん
2007/01/15(月) 19:18:22ヒントになるかわからんが
NDBM_File
DB_File
GDBM_File
SDBM_File
ODBM_File
0325320
2007/01/15(月) 20:46:350326322
2007/01/15(月) 20:58:26dbmファイルはテキストなどに書き出しておかないとバイナリでサーバを移しても
読めないのだと思っていました。dbmopen()で読み書きしていたので、どの
形式のDBMかわからなかったのです。
0327デフォルトの名無しさん
2007/01/16(火) 05:56:00指定されたディレクトリのディレクトリハンドルを開いて
ディレクトリ内のファイル名を取得するスクリプトを書いたのですが
名前が長いファイルがあるとそのファイルと、それ以降のエントリが
ディレクトリハンドルから取得できないんだけど
なんで?これどうすれば回避できる?
環境: Windows XP + ActivePerl5.8.8 build819
0328デフォルトの名無しさん
2007/01/16(火) 07:04:48お前の書いたスクリプトを透視した上で回答してくれるのを待つことだ
0329327
2007/01/16(火) 10:55:47再現スクリプトを下記に示します。
DirHandle以外にopendirでディレクトリハンドル開いたり、
globを使ってみたけど結果はおんなじでした。
----
#!/usr/local/bin/perl
use strict;
use utf8;
use warnings;
use FindBin;
use DirHandle;
use Data::Dumper;
my $dh = DirHandle->new($FindBin::Bin) or die $!;
my @entries = $dh->read;
print Dumper(\@entries);
__END__
----
0330デフォルトの名無しさん
2007/01/16(火) 10:58:290331デフォルトの名無しさん
2007/01/16(火) 11:02:27foreach( sort(glob("*")) ){
if(-d){
@local_dir = (@local_dir,$_) ;
}elsif(-f){
@local_file = (@local_dir,$_) ;
}else{
print "Not Support Format -> $_\n" ;
}
}
ファイルとディレクトリに分けたいのですが、
ローカルだと上記のようにできますが、(他にスマートなやり方があるかもしれませんが。。)
ftp上のファイルを区別する方法はありますでしょうか。
以下ではどちらも同じファイルを取得してしまいます。
use Net::FTP;
my $ftp = Net::FTP->new($host);
$ftp->login($user, $pass);
foreach( $ftp->ls("./") ){
print "$_\n" ;
}
foreach( $ftp->dir("./") ){
print "$_\n" ;
}
$ftp->quit;
0332327
2007/01/16(火) 11:19:46全角数字0から9を繰り返すのを160文字 + .txt
のファイル名を用意したら再現しました。
全角数字100文字の場合はファイル名が取得できました。
パスは
D:\test
で実験しました。
95系は絶対パスで255byte以下、
NT系は絶対パスで255文字以下と認識してるのですが
このへんの絡みですかね?
0333327
2007/01/16(火) 11:26:39Net::FTP::Fileにisfileとisdirってメソッドあるよ。
インスコするかインスコできないならCPANでソース閲覧して参考にすればいけるのでは
0334327
2007/01/16(火) 12:18:54ActivePerlのバグ?
http://www.namazu.org/ml/namazu-win32-users-ja/msg01954.html
0335デフォルトの名無しさん
2007/01/16(火) 12:31:39WinAPIでも使っとけ。
0337327
2007/01/16(火) 13:44:46もめでとう! こっちはいまだにはまり中 orz
>>335
バグじゃなくて仕様なの?
ちなみにWin32::APIを使ってみたけどなぜか取得できない。。。
0338327
2007/01/16(火) 13:51:26----
#!/usr/local/bin/perl
use strict; use utf8; use warnings;
use Data::Dumper; use Encode; use File::Spec; use FindBin; use Win32::API;
Win32::API::Struct->typedef('FILETIME', qw(
DWORD dwLowDateTime; DWORD dwHighDateTime;)) or die $!;
Win32::API::Struct->typedef('WIN32_FIND_DATA', qw(
DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow;
DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[260];
TCHAR cAlternateFileName[14];)) or die $!;
my $FindFirstFile = Win32::API->new('kernel32', 'FindFirstFile', 'PS', 'N') or die $!;
my $FindNextFile = Win32::API->new('kernel32', 'FindNextFile', 'NS', 'I') or die $!;
my $FindClose = Win32::API->new('kernel32', 'FindClose', 'N', 'I') or die $!;
my $path = File::Spec->catdir($FindBin::Bin, '*');
my $FindData = Win32::API::Struct->new('WIN32_FIND_DATA') or die $!;
my $hFind = $FindFirstFile->Call($path, $FindData);
$hFind == -1 and die $!;
my @list = ($FindData->{cFileName});
push @list, $FindData->{cFileName} while $FindNextFile->Call($hFind, $FindData;
$FindClose->Call($hFind);
print Dumper(\@list);
__END__
0339327
2007/01/16(火) 13:56:10FindNextFileの閉じ括弧までまちがえて削っちゃった orz
>>338のソースは
×push @list, $FindData->{cFileName} while $FindNextFile->Call($hFind, $FindData;
○push @list, $FindData->{cFileName} while $FindNextFile->Call($hFind, $FindData);
でお願いします。 m(_ _)m
0340デフォルトの名無しさん
2007/01/16(火) 13:56:31この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、
パスの前に "\\?\" という接頭辞を追加してください。
詳細については、MSDN ライブラリの「File Name Conventions」(ファイル名の規則)を参照してください。
0341327
2007/01/16(火) 14:45:03どもです、自分もおんなじ情報に行き当たりました ;p
http://mag.autumn.org/Content.modf?id=20050930181032
Find(?:First|Next)FileじゃなくてFind(?:First|Next)FileWを使えってことなんですね。。。
ディレクトリのファイル一覧を取得する部分だけで苦労するな。。。
0342デフォルトの名無しさん
2007/01/16(火) 14:51:49http://msdn2.microsoft.com/en-us/library/aa365740.aspx
typedef struct _WIN32_FIND_DATA {
...
TCHAR cFileName[MAX_PATH];
0343デフォルトの名無しさん
2007/01/16(火) 23:00:35__
| |
| | ___ ___
| | . / | __ _____ / _ \
| | / /| | / / / ____/ / / > l
| |. / / .| |. / / / /.. _ /  ̄ /
| |/ / | |/ / /  ̄ ̄_/ / \
| /. | / / / ̄ ̄ __ / / ̄ ̄> |
| / |___/ ./  ̄ ̄ ̄ / /  ̄ ̄ /
 ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ _____ ___ ___ ___
______ /__ __/ [][] _| |_| |__ _| |_
| ___ \ / / | _ | |_ レ'~ ̄|
| | \ l | |_  ̄| | / / / /| |
| |____/ / \__| | |  ̄ /_ /. | |_
| ____/ ___ __ __/ヽ |_|. |__|. \/
| | /`、_/_/ / _ ヽ / _ /
| | ヽ / | l l l | l l l
| | | l ヽ  ̄ / ,ヽ  ̄ /
 ̄  ̄  ̄ ̄ / __ ヽ
| l l l
ヽ  ̄ ̄ /
~ ̄ ̄~
0344デフォルトの名無しさん
2007/01/16(火) 23:04:280345327
2007/01/17(水) 01:05:42http://aspn.activestate.com/ASPN/Mail/Message/libwin32-perl/2995279
0346327
2007/01/17(水) 06:15:16こちらのやり方で取得出来ました。
何度も自己レスすみませんでした m(_ _)m
0347デフォルトの名無しさん
2007/01/17(水) 18:25:14█ █ █ █ █▀▀▀▅
▀▅ ▅▀▅ ▅▀ ▅▅▅ █▅▅▅ █ █ ▅ ▅ ▅▅▅ ▅▅▅▅
█ █ █ █ █▅▅▅█ █ █ █▀▀▀ █▀ █ █ █▅▅█
▀▅▀ ▀▅▀ █ ▅ █ █ █ █ █ █ █▅▅▅
▀ ▀ ▀▀▀ ▀▀▀▀ ▀ ▀ ▀▀▀ ▀▅▅▅▀
▅▅▅▅▅▅ ▅ ▅ █
▀▀▀▀ ▅▀ ▅ █ ▅▅▅█▅▅ ▀▀█▀▅▀▀▀▅
█ █ ▀ ▀▀▀█ █ ▅█▀ █
█ █ ▅▅▅▀ ▅▀█ █
▀▅ █ ▀ █ █ ▅
▀▀▀ ▀ ▀ ▀
0348デフォルトの名無しさん
2007/01/17(水) 19:19:36どうすればファイルハンドルをサブルーチンに局所化できますか?〜
の項目にあるサンプルコードの
local $_; # ← とても重要
の意味は一体なんでしょうか。
0349デフォルトの名無しさん
2007/01/17(水) 19:31:19# local $_;
$_ = "\(^o^)/";
}
$_ = "/(^o^)\";
owata;
print;
local $_; の行をコメントアウト/インして実行してみよう!
0350デフォルトの名無しさん
2007/01/17(水) 19:48:51実はこんなコード書いて試してみたんですがlocal $_;あっても無くても同じように動くんですよね
# lstはファイル名のリスト
open (FH, '< lst') or die;
while (<FH>) { print; &localtest }
close FH;
sub localtest
{
local *FH;
open (FH, $_) or die;
#local $_;
while (<FH>) { print }
}
何が違うのかも教えていただけたらうれしいです。
0351デフォルトの名無しさん
2007/01/17(水) 19:58:12左辺値でないもののaliasだったりすると値を書き換えることも
できないしな。
foreachのときは暗黙にlocalにしてくれるけど。
0352デフォルトの名無しさん
2007/01/17(水) 21:12:34localtest 呼び出しの後 $_ は書き換わってるけど、
すぐに次のループに入るので問題がないだけ。
while (<FH>) { print "begin: $_"; &localtest; print "end: $_" }
とかやってみると、違いがわかると思うよ。
0353350
2007/01/17(水) 23:02:32しかし350のコードはアホですね…何をやっているんだか
この分じゃ他にもいろいろ勘違いしていることありそうで怖いです。
とりあえずほとんど理解せず使ってる型グロブをもうちょっと調べてみよう…
0354デフォルトの名無しさん
2007/01/18(木) 00:01:12open my $fh, '<', 'filename' or die;
0355デフォルトの名無しさん
2007/01/18(木) 02:29:270356331
2007/01/18(木) 09:36:42また壁にぶち当たりました。
ftpしたあとのファイル、ディレクトリの日付、サイズを取得したいので調べてましたが
use Net::FTP::File;のNet::FTP::fstatは作りかけのようで使用出来ませんでした。
$ftp->dir(./)で拾って日付を抜こうと思いましたが、日本語環境と英語環境で
表示が異なるので断念しました。
何か取得方法はないでしょうか。
use Net::FTP;
my $ftp = Net::FTP->new($host);
$ftp->login($user, $pass);
0357デフォルトの名無しさん
2007/01/18(木) 09:45:05> 何か取得方法はないでしょうか。
マニュアルを見ると分かるんじゃないでしょうか
0358デフォルトの名無しさん
2007/01/18(木) 12:07:320359デフォルトの名無しさん
2007/01/18(木) 12:20:56あるバイト列の文字コードがunicode由来のものであることを知りたいのか
(エンコーディングの仕方が何通りもあるので)
→ Encode::Guess。ただし完全な判定は無理。
UTF-8フラグが立った文字列であることを知りたいのか
→Encode::is_utf8(あるいはutf8::is_utf8)
それともぜんぜん別のことなのか
0360デフォルトの名無しさん
2007/01/18(木) 12:45:35unicode由来のもであるかどうかです
それと環境はPerl5.0でJcode.plです
0361356
2007/01/18(木) 13:54:08書いてみましたがエラーが出ました。
使い方が間違えているのでしょうか。
$host = "***" ;
$user = "***" ;
$pass = "***" ;
use Net::FTP;
my $ftp = Net::FTP->new($host);
$ftp->login($user, $pass);
foreach($ftp->ls()){
$aaa = $ftp->mdtm($_) ;
print "$aaa\n" ;
}
0362デフォルトの名無しさん
2007/01/18(木) 16:20:51Net::FTPの使い方としては間違ってないよ。
エラーってnot a plain fileのことか?
とりあえずエラーの理由知りたけりゃDebug=>1設定しなさい。
0363デフォルトの名無しさん
2007/01/18(木) 16:24:58jcode.pl は Unicodeには対応していないはず。
Perl 5.0 なんて時代遅れなもの使うのやめたら?
0364デフォルトの名無しさん
2007/01/18(木) 16:29:490365361
2007/01/18(木) 16:36:17#!/usr/local/bin/perl -w -- # -*-Perl-*-
use strict;
use warnings;
use Net::FTP;
my $host = "txfs02" ;
my $user = "g-fan" ;
my $pass = "fan" ;
my $aaa ;
my $ftp = Net::FTP->new($host);
$ftp->login($user, $pass);
foreach($ftp->ls()){
$aaa = $ftp->mdtm($_) ;
print "$aaa\n" ;
}
---------------------------------------------------------------------------
↑これを実行すると一つのファイルにつき↓このメッセージが出ます。
色々試してはいますが詰まっていますorz
Use of uninitialized value in concatenation (.) or string at bbb.pl line 15.
0366デフォルトの名無しさん
2007/01/18(木) 16:47:09>Use of uninitialized value in concatenation ...
何も無いものをprintしようとしたからwarningsが出たわけ
print "$aaa\n";
を
print "$aaa\n" if $aaa;
で
0367361
2007/01/18(木) 16:52:50そうなんです。
全てのファイルのmdtmがundefになってるんですよね。
だいたい”foreach($ftp->ls()){”でファイルを拾っているので
ファイル名を間違えているとかそういうのは無いはずなんですが。
0368デフォルトの名無しさん
2007/01/18(木) 17:03:16ディレクトリはエラーでnot a plain fileを返してる(undef)
ファイルはtimeを返してる
0369デフォルトの名無しさん
2007/01/18(木) 17:07:02> ファイル名を間違えているとかそういうのは無いはずなんですが。
「はず」じゃなく確認しる。
とはいえ、手元で動かしてみたところ、同じエラーが出て失敗したり
成功したりする。なんじゃらほい。
0370デフォルトの名無しさん
2007/01/18(木) 17:15:03> とはいえ、手元で動かしてみたところ、同じエラーが出て失敗したり
> 成功したりする。なんじゃらほい。
急いで捕捉すると、テストに使った対象ftpサーバが、複数個をラウンドロビン
していたようた。要するに、ftpサーバソフトウェアによって成功したり
失敗したりしていたようだ。
0371361
2007/01/18(木) 17:17:49すみません。
Debug=>1の意味が理解できていませんでした。
今調べてDebug=>1で流したらこんなメッセージになっています。
Net::FTP=GLOB(0x15ecd4)>>> MDTM xxx.log
Net::FTP=GLOB(0x15ecd4)<<< 500 'MDTM xxx.log': command not understood.
Use of uninitialized value in concatenation (.) or string at bbb.pl line 16.
MDTMというコマンドがないみたいですが↓このファイル見たら_MDTMならあるけど
MDTMはありませんでした。
/usr/local/lib/perl5/5.8.6/Net/FTP.pm
>>369
調べましたがちゃんと見れていました。
0372デフォルトの名無しさん
2007/01/18(木) 17:36:30> Net::FTP=GLOB(0x15ecd4)>>> MDTM xxx.log
> Net::FTP=GLOB(0x15ecd4)<<< 500 'MDTM xxx.log': command not understood.
> Use of uninitialized value in concatenation (.) or string at bbb.pl line 16.
これはひどい(笑) MDTMコマンドが実装されていないのだろうか。
手元でやった例だと
失敗例
Net::FTP=GLOB(0x8212d38)>>> MDTM pub
Net::FTP=GLOB(0x8212d38)<<< 550 Could not get file modification time.
成功例
Net::FTP=GLOB(0x8212d38)>>> MDTM pub
Net::FTP=GLOB(0x8212d38)<<< 212 20060419172149
となります。
0373デフォルトの名無しさん
2007/01/18(木) 17:45:44MDTMはFTPの拡張仕様だから対応してない鯖が多いみたいだ
MDTM対応してない鯖は気合でLISTの結果を解析するしかなさそうな感じ
0374デフォルトの名無しさん
2007/01/18(木) 18:02:460375デフォルトの名無しさん
2007/01/18(木) 18:56:34#暇なときにffftpのソース眺めてみよう
0376デフォルトの名無しさん
2007/01/18(木) 19:01:19ttp://support.microsoft.com/kb/834577/ja
かなり大変そうだな・・・
0377デフォルトの名無しさん
2007/01/18(木) 19:37:54ttp://search.cpan.org/~gaas/libwww-perl-5.805/lib/File/Listing.pm
0378デフォルトの名無しさん
2007/01/18(木) 20:47:53悲惨なものよ
0379デフォルトの名無しさん
2007/01/19(金) 00:21:38ttp://internet.watch.impress.co.jp/cda/news/2007/01/17/14478.html
>Winny特別調査員は、フォレンジック技術を応用した検査により、Winnyなどのファイル交換ソフトを利用した最終日時を調査するソフト。
これ、デモ版とはいえPerl(PAR)で書かれている珍しい製品
exeの拡張子をzipにして解凍すればソースを取り出すことが可能。
このソースを見てフォレンジック技術と"売り物"のクォリティを感じろ、おまいら
0380デフォルトの名無しさん
2007/01/19(金) 00:33:42@KINTAMA_STRとかあってワロス
0381361
2007/01/19(金) 09:54:34拡張なんですね。。
>>372->>380
$ftp->dir("./")で取得するとサーバによってこんな風になるんですよね。
表示が英語か日本語だけならまだ対応出来るんですが
日本語で去年のファイルになると時間が年表記になって
時間が取り出せないorz
drwxrwxr-x 2 user group 1024 Dec 5 00:03 dir_name
drwxr-xr-x 5 user group 512 3月 29日 2006年 dir_name
何か他に日付とサイズ取得できるのないかな。
0382デフォルトの名無しさん
2007/01/19(金) 10:18:31> 日本語で去年のファイルになると時間が年表記になって
> 時間が取り出せないorz
いや、UNIXのlsコマンドの詳細表示は、半年以上過ぎるとそういう表示になる
仕様だというだけ。それを反映しているのでしょう。英語でもそうなるはず。
っていうか、そうなるのがある、か。
0383デフォルトの名無しさん
2007/01/19(金) 13:16:05これぐらいの物ならPerlで作らなかった方が良かったのにね。。
コメントとテストコードが残っている事以外に関して言えば
別に酷いコードじゃないと思うけど、フォレンジック技術について言えば;;
文字連結が好きだって事は分かった。
0384デフォルトの名無しさん
2007/01/19(金) 14:01:44マジで?
0385デフォルトの名無しさん
2007/01/19(金) 14:07:39sub pf_check_p2p{
if ($_[0]=~/winny\.exe/i){add_ctime($_[0],$WINNY,"WINNY");}
if ($_[0]=~/winnyp\.exe/i){add_ctime($_[0],$WINNYP,"WINNYP");}
if ($_[0]=~/Share\.exe/i){add_ctime($_[0],$SHARE,"SHARE");}
if ($_[0]=~/PERFECT DARK\.EXE/i){add_ctime($_[0],$PD,"PD");}
if ($_[0]=~/cabos\.exe/i){add_ctime($_[0],$CABOS,"CABOS");}
if ($_[0]=~/limewire\.exe/i){add_ctime($_[0],$LIMEWIRE,"LIMEWIRE");}
if ($_[0]=~/BITTORRENT\.EXE/i){add_ctime($_[0],$BIT,"BIT");}
if ($_[0]=~/BITCOMET\.EXE/i){add_ctime($_[0],$BIT,"BIT");}
}
(;^ω^)
139 :番組の途中ですが名無しです [sage] :2007/01/17(水) 15:35:19 ID:p3fP2iOG0
なんか製品版も同じな気がする…
だってp2ptest.plの30行辺り見ると…
my $kin="\x5b\x90\x6d\x8b\x60\x82\xc8\x82\xab\x83\x4c\x83\x93\x83\x5e\x83\x7d\x5d";
ついでにこれってShift_JISで見ると [仁義なきキンタマ] なんだよね
0387デフォルトの名無しさん
2007/01/19(金) 15:04:42これだけ見ても何が面白いのかワカランだろ。まぁ、十分ヘタクソなコードだけど。
これが商用のソフトのファイル共有ソフトの検出処理だってのが凄い。
http://72.14.253.104/search?q=cache:82TAp8C1ZsUJ:news20.2ch.net/test/read.cgi/news/1169012146/+pf_check_p2p&hl=ja&ie=UTF-8
0388デフォルトの名無しさん
2007/01/19(金) 15:15:480389デフォルトの名無しさん
2007/01/19(金) 15:37:59ニュー速だぞ?w
0390デフォルトの名無しさん
2007/01/19(金) 16:29:43調査員が、PC操作してる俺の隣に座って
監視するわけじゃないのか。 じゃイラネ。
0391デフォルトの名無しさん
2007/01/19(金) 16:41:480392デフォルトの名無しさん
2007/01/19(金) 17:08:450393デフォルトの名無しさん
2007/01/19(金) 17:12:31どんだけ2ch初心者なんだよ
0394デフォルトの名無しさん
2007/01/19(金) 17:19:270395デフォルトの名無しさん
2007/01/19(金) 17:56:46vipに帰りな
0396デフォルトの名無しさん
2007/01/19(金) 18:00:16いい加減自演疲れただろうパトラッシュ
0397デフォルトの名無しさん
2007/01/19(金) 19:04:24熟練の方ですか?wwww
0398デフォルトの名無しさん
2007/01/19(金) 19:05:06w w _ _ w w
w ヽ(・ω・)ノ w w
w .(( ノ( )ヽ )) w
wwwwwwwww..............┛┗...........wwwwwwwww
0399デフォルトの名無しさん
2007/01/19(金) 20:11:440400デフォルトの名無しさん
2007/01/20(土) 00:53:18●ログインは出来るものの、肝心の過去ログが取得できません。gzip圧縮された「-ERR もう つかえません」と言うメッセージが取得されるだけです。
●アカウントそのものは既成の専用ブラウザ(OpenJane 0.1.12.6b)で生きていることを確認しています。
コーディングの問題なのか、2chの●過去ログ取得の仕様にあっていないための不都合なのか、自分では切り分けが出来ませんでした。
ソースはこれです。 http://sub.jetabbs.org/upload2/upload/upz043.zip (コメント・メッセージがキモくてごめんなさい)
スレ違いでしたら誘導をお願いします。
0401デフォルトの名無しさん
2007/01/20(土) 15:39:22ソースは読んでいないけど、
それって、Perlの問題というより、2ちゃんねるの認証の問題だね。
専用ブラウザ以外のソフトで過去ログを取得しようとすると、拒否する
ように設定していると聞いた覚えがある。
あとは、こちらのスレで聞いたほうがいいよ ↓
monazilla Part 5
http://pc10.2ch.net/test/read.cgi/tech/1057329161/l50
0402デフォルトの名無しさん
2007/01/20(土) 15:51:03暗号化されてたらシラネ
0403401
2007/01/20(土) 15:51:23あと、Snifferというソフトを使って、専用ブラウザが出しているIPパケットと、
自作のスクリプトが出しているIPパケットとを比べれば解決するかもしれないよ。
0404デフォルトの名無しさん
2007/01/20(土) 22:02:59use threads;
use threads::shared;
# 終了の合図
my $kill:shared = 0;
# スレッド作成
my $thread = threads->new(\&loop);
処理...
$kill = 1;
$thread->join;
sub loop {
while (!$kill) {
処理...
sleep(60);
}
}
少し長くてすみません…。
マルチスレッドでwaitを挟みつつ処理を行い
任意のタイミングで終了させるプログラムを組んでいるのですが、
このコードだと終了用の変数をセットしてから処理が戻るまで60秒もかかってしまいます。
何かいい方法はないでしょうか
よろしくお願いします。
0405デフォルトの名無しさん
2007/01/20(土) 22:24:10UAをMonazilla/1.00にするとか
0406デフォルトの名無しさん
2007/01/20(土) 22:47:00threads::sharedにcond_ナントカというのがいくつかあるので
よく説明読め。たぶんお前が求めているものはそれだ。
0407デフォルトの名無しさん
2007/01/20(土) 22:55:23ありがとうございます
調べてみます
0408デフォルトの名無しさん
2007/01/20(土) 23:33:03ttp://www.amazon.co.jp/dp/4873113148/
これ今日発売だけど買った奴居る?
中身どうですか?
0409デフォルトの名無しさん
2007/01/20(土) 23:57:590410デフォルトの名無しさん
2007/01/21(日) 00:14:29cond_timedwait
cond_signal
を併用する事でできました
昨日からずっと悩んでいたので助かりました
ありがとうございました
0411デフォルトの名無しさん
2007/01/21(日) 00:19:55O'Reillyで目次見れるから、だいたい判断つくんじゃない?
俺は英語版持ってるから買わないけど。
ttp://www.oreilly.co.jp/books/9784873113142/toc.html
0412デフォルトの名無しさん
2007/01/21(日) 00:54:410413デフォルトの名無しさん
2007/01/21(日) 01:23:230414デフォルトの名無しさん
2007/01/21(日) 01:24:15俺はsleipnirもfirefoxもCPAN検索できるようにしてある。
あとはローカルにppmリポジトリを立てればすごく便利。
0415デフォルトの名無しさん
2007/01/21(日) 05:57:20買った買った。ペラペラとめくってからほぼ衝動買い。
お前も買え。
0416デフォルトの名無しさん
2007/01/21(日) 12:10:31@week = ("Sun","Mon","Tue","Wed","Thr","Fri","Sat");
$i = 0;
for($i=0; $i <= 7; $i++){
print $week[${i}];
}
このソースで-wオプション付けて実行すると
Use of uninitialized value in print at ./hairetu.pl line 7.
と警告が出るのですが何故でしょうか?
見たところ変数はきちんと初期化していると思うのです。
0417デフォルトの名無しさん
2007/01/21(日) 12:12:557じゃなくて6ですた…
自己解決染ました
0418デフォルトの名無しさん
2007/01/21(日) 12:41:03> 7じゃなくて6ですた…
植木算のミスといいます。そして Perl では「必要がなければ添え字を扱わない」ことで、このリスクを回避できます。
foreach my $wday (@week) {
print $wday;
}
あるいは、
print for @week;
0419デフォルトの名無しさん
2007/01/21(日) 13:30:560420デフォルトの名無しさん
2007/01/21(日) 16:25:18いろいろ言われるところもあるけど、ラリー・ウォール先生もPGは傲慢であれとおっしゃっていることだし。
うん。大丈夫。半年前に書いたスクリプトがさっぱり分からなくても大丈夫。泣くことなんて無いよ。
0421デフォルトの名無しさん
2007/01/21(日) 16:39:35> print $wday;
> }
"my" なんて入れる必要ないだろ
0422デフォルトの名無しさん
2007/01/21(日) 16:45:320423デフォルトの名無しさん
2007/01/21(日) 18:36:44ひとつの変数に入れる方法を教えてください
open(IN,"< foo.txt");
foreach(IN){ ・・・
}
のように一行づつ処理ではなく、全部の行をまとめて処理したいのです。
(正規表現で複数の行に渡って処理したいため)
何かいい方法はないでしょうか?
よろしくお願いします
0424デフォルトの名無しさん
2007/01/21(日) 18:40:530425デフォルトの名無しさん
2007/01/21(日) 18:47:460427デフォルトの名無しさん
2007/01/21(日) 19:00:130428デフォルトの名無しさん
2007/01/22(月) 23:22:290429デフォルトの名無しさん
2007/01/22(月) 23:25:53てか自分で試せばよかった・・・
0430デフォルトの名無しさん
2007/01/23(火) 17:27:38教えてください。
my @aaa = () ;
my @bbb = () ;
for(my $i=0;$i<5;$i++) {
@aaa = ($i,$i+1) ;
@bbb = (@bbb,\@aaa) ;
}
foreach(@bbb){
print "$_\n" ;
}
foreach(@bbb){
foreach(@$_){
print "$_\n" ;
}
}
上を実行すると下の結果になります。
ARRAY(0x13c93c)
ARRAY(0x13c93c)
ARRAY(0x13c93c)
ARRAY(0x13c93c)
ARRAY(0x13c93c)
4 5
4 5
4 5
4 5
4 5
>>↓に続く
0431430
2007/01/23(火) 17:28:11出力させたい結果は以下なのですがどうも
リファレンスの中がARRAY(0x13c93c)で全て同じになってしまっているようです。
(同じ@aaaという配列名をリファレンスしているせい?)
ループさせてリファレンスを増やしていきたいのですが
どのようにしたら下記のような出力結果に出来ますでしょうか。
0 1
1 2
2 3
3 4
4 5
0432デフォルトの名無しさん
2007/01/23(火) 17:40:060433デフォルトの名無しさん
2007/01/23(火) 17:41:40ループのなかでmyするようにする。
my @aaa = ($i,$i+1) ;
若しくは無名配列のコンストラクタを使う。
@bbb = (@bbb,[@aaa]) ;
ループの外では@aaaを使っていないのだから、
スコープをループ内に縛る前者をお勧めする。
0434デフォルトの名無しさん
2007/01/23(火) 17:48:50テキストファイルから顔文字を除去しようと考えていますが、いい方法がみつかりません。
正規表現でうまく除去する方法というのはないでしょうか?
現在考えていますのが、括弧の中に記号あると顔文字であると判断するとしています(例=(゜Д゜) (ノ∀`*) など。
この正規表現を書く場合全ての記号を書かないといけないでしょうか?
質問が2つとなりましたが、よろしくお願いします
0435デフォルトの名無しさん
2007/01/23(火) 17:52:37まず正規表現を勉強しろ。
顔文字のリスト作ってそれと比較するのが単純で速いと思うが。
0436デフォルトの名無しさん
2007/01/23(火) 17:55:52(TへT)これもおkだね
0437434
2007/01/23(火) 17:57:28リスト作ったほうが早いですか。
その場合、リストにない顔文字は一致しませんけど、しょうがないか…
全部の顔文字をうまく除去するなんて、難しいですよね
0438デフォルトの名無しさん
2007/01/23(火) 18:01:19テンプレート・ツールキット(TT)
なんて文脈じゃ誤判定は避けられないな
0439デフォルトの名無しさん
2007/01/23(火) 18:04:54"ヽ(`Д´)ノ"
とかが、"ヽノ"になってもいいのかってこったわな。
結局は、顔文字の辞書ファイルを保守するしかないだろ。
0440434
2007/01/23(火) 18:18:05まぁ、ノのほうが記号じゃないんで、残りますが。
顔文字の辞書作ってるけど。結構メンドクセ
0442デフォルトの名無しさん
2007/01/24(水) 01:40:36$str = "ABCDEF";
$str =~ s/(B)/&conv($1)/;
のように、マッチした文字列を、関数を使って、返り値で置換したいのですが・・・
(ちなみの、このコードだと、
A&conv(B)CDEF
という文字列になってしまいました。。。)
0443デフォルトの名無しさん
2007/01/24(水) 02:25:100444デフォルトの名無しさん
2007/01/24(水) 04:16:240445デフォルトの名無しさん
2007/01/24(水) 06:30:30Windowsならコマンドプロンプト開いて
perldoc perlre
でperlの正規表現のドキュメント読めるよ。
ドキュメントにざっと目を通してれば人に質問するような内容じゃないぞ。
04464442
2007/01/24(水) 07:16:24>445
ありがとうございます。 /e で、できました。
ドキュメントを確認せずに質問してしまって
済みませんでした。
プログラミングPerlにも、 /e が載ってました・・・
0447デフォルトの名無しさん
2007/01/24(水) 14:10:56例えばどんな仕事でどう使うとか教えてほしい
0448デフォルトの名無しさん
2007/01/24(水) 14:14:36スクリプトとして使えるじゃん。 バッチ処理とかさ。
0449デフォルトの名無しさん
2007/01/24(水) 14:26:58CGIと関係なく、データベースとのやりとりとか。
0450デフォルトの名無しさん
2007/01/24(水) 14:27:35えーと、えーと
0451デフォルトの名無しさん
2007/01/24(水) 14:29:520452デフォルトの名無しさん
2007/01/24(水) 14:31:220453デフォルトの名無しさん
2007/01/24(水) 14:32:400454デフォルトの名無しさん
2007/01/24(水) 15:02:24>>452
漏れ以外にPerlをエロ収集に使おうと考える奴がいるとは・・・
0455デフォルトの名無しさん
2007/01/24(水) 16:01:07あれ、俺が何人もいる…
0456デフォルトの名無しさん
2007/01/24(水) 17:03:320457デフォルトの名無しさん
2007/01/24(水) 17:06:36エロパワーは絶大だな
0458デフォルトの名無しさん
2007/01/24(水) 17:31:07▀▄ ▀▄ ▄▀█ ▄▀█ ▄▀
▄▀ ▄▀ ▄▀ █ ▄▀ █ █
▄▀ ▄▀ ▀▀▀█▀ ▀▀▀█▀ █
▀ ▀ ▀ ▀ ▀
█ ▄▄▄ █ ▀▀▀▀ ▄ ▄█ █
█ █▄▄ █ █ ▄▄▄▄▄▄▄ █ ▄▄▄▄█▄▄
▀█ ▄█ █ █ █ ▄▀ █ █
█ ▀ █▀ █ █ ▄▀▀▄ █ ▄▄▄█
█ ▄▀ █ ▄▀ █ █ █ █▀▄
▀ ▀ ▀▀ ▀ ▀▀▀ ▀ ▀▀▀
こんなスレアラシに使える。
0459デフォルトの名無しさん
2007/01/24(水) 18:27:19でもCUIなのがなぁ
0460デフォルトの名無しさん
2007/01/24(水) 18:34:47しかしてないが
Unicode対応がボミョウなので、たまに困ったことになる
use encoding('cp932')とかって、-n/-pスイッチとかと一緒に使うと
うまく動かなくね?つか、これって基本的に非推奨なんだべ?
Unicode文字列のリテラルや正規表現を直接記述できないので、
use encoding()しないとなると途端にウザい事態になるわPerlは
0461デフォルトの名無しさん
2007/01/24(水) 18:39:550462460
2007/01/24(水) 18:43:07それはスクリプトも入力もUTF-8を仮定できるときだけだべ?
少なくともWindows環境でそれは仮定できないなぁ
UTF-8なファイル名でファイル開いたりできないし
0463デフォルトの名無しさん
2007/01/24(水) 19:11:420464デフォルトの名無しさん
2007/01/24(水) 21:44:41ttp://aspn.activestate.com/ASPN/Mail/Message/2996684
0465460
2007/01/24(水) 23:34:35-pスイッチや-nスイッチを使わない場合はそれで上手く行くようです。
そもそも毎度毎度こんなに長いのではワンライナーは書けませんし、
簡単な仕事を簡単にやっつけられないのなら、Perlとしての魅力は
激減ですが。
やっつけ仕事によく使う-pスイッチや-nスイッチと
use utf8を共存させる方法はありますか。
#!/usr/bin/perl -pi.bak
なスクリプトで>>115の方法を試すと全くおかしなことになります。
>>464
なるほど、便利なモジュールがあるのですね。
0466デフォルトの名無しさん
2007/01/25(木) 00:31:18煽りとかではなく。
別の言語にしたほうが幸せになれるとおもうよ。
0467デフォルトの名無しさん
2007/01/25(木) 01:21:170468デフォルトの名無しさん
2007/01/25(木) 02:46:480469デフォルトの名無しさん
2007/01/25(木) 09:55:07use strict; warn $c;
だとstrictが効くのに
use strict; warn $a;
だとstrictが効かないのはなぜ?
$bも効かない
0470デフォルトの名無しさん
2007/01/25(木) 10:04:09perlvar嫁
0471デフォルトの名無しさん
2007/01/25(木) 10:16:32for(my $i=0;$i<=$#aaa;$i++){
$out = $aaa[$i] ;
if( $aaa[$i+1] ){
while($aaa[$i+1] =~ /^\+/){
$i++ ;
$out = "$out $aaa[$i]" ;
}
}
print "$out\n" ;
}
これのforをforeachで書いたらどんな記述でかけますでしょうか。
やりたいことは、ある要素のアタマに"+"があれば
その要素は一つ前の要素とつなげようとしています。
foreachで回している最中に強制的に次の要素にアクセスすることは出来るのでしょうか。
0472デフォルトの名無しさん
2007/01/25(木) 10:18:14perldoc perlvar
$a
$b Special package variables when using sort(), see "sort" in perlfunc. Because of this specialness $a and $b don’t need to
be declared (using use vars, or our()) even when using the "strict ’vars’" pragma. Don’t lexicalize them with "my $a" or
"my $b" if you want to be able to use them in the sort() comparison block or function.
thx!
0473デフォルトの名無しさん
2007/01/25(木) 10:27:06foreachでは今アクセスしている要素が何番目かを知ることはできない。
もちろん、中で別に変数を$i++とかすりゃ別。
俺ならこんな感じに書く。
foreach (@aaa) {
if (/^\+/) {
$out[-1] .= " $_";
} else {
push @out, $_;
}
}
0474デフォルトの名無しさん
2007/01/25(木) 10:34:48printだとこうかな。printが2つあるのがいまいち気に入らないが...
my $buf = undef;
foreach (@aaa) {
if (/^\+/) {
$buf .= " $_";
} else {
print $buf, "\n" if defined $buf;
$buf = $_;
}
}
print $buf, "\n" if defined $buf;
0475デフォルトの名無しさん
2007/01/25(木) 10:38:17print map { "$_\n" } @out; でもすりゃいいんだから別にいいんじゃ
0476デフォルトの名無しさん
2007/01/25(木) 15:20:56このほうが短い。
0477デフォルトの名無しさん
2007/01/25(木) 15:30:03の方がわかり安い
0478デフォルトの名無しさん
2007/01/25(木) 15:49:570479デフォルトの名無しさん
2007/01/25(木) 16:05:03ダウト。それだと最後の要素の後に改行が出ない。
0481デフォルトの名無しさん
2007/01/25(木) 16:40:25そういう細かい部分ってすっごい大事だよね
後で泣き見たりする
しかし「ダウト」って使う人はあんまり見たことが無い
0482デフォルトの名無しさん
2007/01/25(木) 18:24:14正解したら各問ごとに正解数をカウントしていってりうのですちゃんとカウントされません。
perlはテキストでも作ってそれに書き込んでそのあと読み込んでしないと記憶した
変数が消えるのですか・・・?
変な質問ですみません。HSPからperlに乗り換えてみたんですが混乱してしまって
0483デフォルトの名無しさん
2007/01/25(木) 18:28:08日本語でおk
HSPで作ったほうがいいんじゃね?
0484デフォルトの名無しさん
2007/01/25(木) 18:30:01perlの勉強をしてみたいと思いましたので・・・
myで定義をしてるんですけど、なんかいろいろと定義の仕方があるみたいですねperlは
0485デフォルトの名無しさん
2007/01/25(木) 18:32:170486デフォルトの名無しさん
2007/01/25(木) 18:45:37if($toi eq "t"){
$sum=$seikai+1;
}
&mon0;
}
if($tugi eq "Q2"){
if($toi eq "t"){
$sum=$seikai+1;
}
&mon1;
}
if($tugi eq "Q3"){
if($toi eq "t"){
$sum=$seikai+1;
}
&goukei;
}
sub goukei{
print "正解は"+$sum+"個";
}
0487デフォルトの名無しさん
2007/01/25(木) 18:45:400488デフォルトの名無しさん
2007/01/25(木) 18:47:08sub mon0{
print "<P>";
print "<SELECT name='answer' size='3'>";
print "<OPTION value='true'>みかん</OPTION>";
print "<OPTION value='false'>アップル</OPTION>";
print "<OPTION value='false'>ばなな</OPTION>";
print "</SELECT>";
print "</P>";
print "<INPUT type=hidden name=tugi value=Q2>";
print "<P><INPUT type='submit' value='次の問いへ'></P>";
}
sub mon0{
print "<P>";
print "<SELECT name='answer' size='3'>";
print "<OPTION value='false'>インコ</OPTION>";
print "<OPTION value='true'>ふくろう</OPTION>";
print "<OPTION value='false'>鳩</OPTION>";
print "</SELECT>";
print "</P>";
print "<INPUT type=hidden name=tugi value=Q3>";
print "<P><INPUT type='submit' value='次の問いへ'></P>";
}
こんな感じです
0489デフォルトの名無しさん
2007/01/25(木) 18:48:040490487
2007/01/25(木) 18:49:27> $sum=$seikai+1;
0491デフォルトの名無しさん
2007/01/25(木) 18:49:59じゃないの?
0492デフォルトの名無しさん
2007/01/25(木) 18:53:22そこは修正しました。
上のほうで
my $sum;
と定義してるのが問題なんでしょうか?
0493デフォルトの名無しさん
2007/01/25(木) 18:57:380494デフォルトの名無しさん
2007/01/25(木) 18:58:390495デフォルトの名無しさん
2007/01/25(木) 18:59:02http://pc10.2ch.net/test/read.cgi/php/1164519503/
0496デフォルトの名無しさん
2007/01/25(木) 19:08:30ここに書き込むと長いのでアップしてきました
0497デフォルトの名無しさん
2007/01/25(木) 19:19:260498デフォルトの名無しさん
2007/01/25(木) 19:22:300499デフォルトの名無しさん
2007/01/26(金) 05:44:42効率よくないんでない?
0500デフォルトの名無しさん
2007/01/26(金) 07:40:350501デフォルトの名無しさん
2007/01/26(金) 11:44:01どういう方法が良いでしょうか。
青木 -> @AGyou へ
斉藤 -> @SaGyou へ
という感じにしたいとおもいます。
0502デフォルトの名無しさん
2007/01/26(金) 12:04:330503デフォルトの名無しさん
2007/01/26(金) 12:07:36お返事ありがとうございます。やっぱり難しいですね orz
別の手段を考えて見ます。
0504デフォルトの名無しさん
2007/01/26(金) 12:10:01> 別の手段を考えて見ます。
なんで? 読みがなつければいいじゃん。
0505デフォルトの名無しさん
2007/01/26(金) 12:13:15表現が悪くてすいません。別の手段 → 読み仮名をつけることです。
0506デフォルトの名無しさん
2007/01/26(金) 12:32:13mecabにぶっ込めば一発か?
0507デフォルトの名無しさん
2007/01/26(金) 12:35:47あ〜それ欲しいですね。
0508デフォルトの名無しさん
2007/01/26(金) 13:24:240509デフォルトの名無しさん
2007/01/26(金) 14:09:40読みがアンビなのもあるから、必要なのは、読みがなふり支援ツール
じゃなかんべか。
0510デフォルトの名無しさん
2007/01/26(金) 15:48:49ある程度は自動化できるが
同じ字で読みが違う場合もあるので(ex.徳沢 => とくさわ,とくざわ etc.)
完全な精度では無理。
0511デフォルトの名無しさん
2007/01/26(金) 18:19:13684万人を調べて、約7万8千種の名字ランキングを公開している人がいるぞ。
そのデータを使うのが手っ取り早いと思われる。
....しかし、ヒマ人だな〜。
0512デフォルトの名無しさん
2007/01/26(金) 19:17:30↑のデータ使ってもやっぱ無理っしょ
0513デフォルトの名無しさん
2007/01/26(金) 20:45:140514デフォルトの名無しさん
2007/01/26(金) 20:52:490515デフォルトの名無しさん
2007/01/26(金) 20:57:04学習リモコンのクロッサム2+USBとデータをやりとりしたいんですが。
0516デフォルトの名無しさん
2007/01/26(金) 21:07:32----
名字 ふりがな 人数 順位 累積人数 累積比率
鈴木 スズキ 139,627 1 139,627 2.04029%
鈴木 ススギ 25 13,107 6,517,718 95.2398%
鈴木 ススキ 7 27,840 6,723,557 98.2476%
鈴木 スズノキ 3 41,426 6,795,040 99.2922%
鈴木 スズ 2 47,333 6,812,494 99.5472%
鈴木 スズシ 2 47,333 6,812,506 99.5474%
鈴木 スヅキ 2 47,333 6,812,518 99.5476%
鈴木 スス 1 56,150 6,832,142 99.8343%
鈴木 ススヘキ 1 56,150 6,832,147 99.8344%
鈴木 ススリキ 1 56,150 6,832,148 99.8344%
鈴木 スズギ 1 56,150 6,832,151 99.8344%
鈴木 ズスキ 1 56,150 6,832,308 99.8367%
鈴木 ズズキ 1 56,150 6,832,309 99.8367%
鈴木 ヌズキ 1 56,150 6,836,957 99.9047%
----
姓しかわからない状況で確実に読み仮名をつける方法は
>>513のAIじゃなく >>514のエスパーだな。
AIについて無知な>>513はAIと書けばかっこいいと思ってるのか?
0517デフォルトの名無しさん
2007/01/26(金) 21:11:14あ、ヌズキさん見てたらごめんなさい><
0518ヌズキ
2007/01/26(金) 21:24:520519デフォルトの名無しさん
2007/01/26(金) 21:26:36自動化なんてとても無理。 入力補助が限界でしょうね。
0520デフォルトの名無しさん
2007/01/26(金) 21:50:28濁点のあるなしの組み合わせがそろうのにな
0521デフォルトの名無しさん
2007/01/26(金) 22:00:020522デフォルトの名無しさん
2007/01/27(土) 00:46:22漢字だけからは読み方は判別できない。
そのため、正しい読み方は、本人にしかわからない。
0523デフォルトの名無しさん
2007/01/27(土) 00:52:270524デフォルトの名無しさん
2007/01/27(土) 01:09:35おまえ、ひょっとして1年2組の時の近藤(こんどう)か?
おれ隣のクラスの権藤(ごんどう)だよ。おぼえてるか?
0526デフォルトの名無しさん
2007/01/27(土) 15:01:28キミの質問は、2つに切り分けないといけない。
1.クロッサム2のDLLのインターフェースが公開されているかどうか。
2.ActivePerl から DLLを呼び出せるかどうか。
両方とも「YES」だからできるのだが、質問の切り分けができず、
「1」の当否を回答者に調べさせるキミには無理だ。
0527デフォルトの名無しさん
2007/01/27(土) 15:20:23スーパーハッカーキタ━━━━━━(゚∀゚)━━━━━━ !!
0528デフォルトの名無しさん
2007/01/27(土) 16:01:58姓しかわからないデータと住基ネットのデータをどうリンクするんだよ。
>>525=>>527か?
くだらないネタにみんなスルーしてるわけだが、
自作自演するほど反応してほしかったのか?
0529デフォルトの名無しさん
2007/01/27(土) 16:22:13まぁ大方、真相がネタでもマジでも恥かかないよう工夫したら前後で矛盾が出たってとこか。
0530デフォルトの名無しさん
2007/01/27(土) 17:17:340531デフォルトの名無しさん
2007/01/27(土) 18:02:01もちろんDLLとかWindowsの約束とかよく分かっておりません。
そのあと、mrccom.dllを見つけてWin32::APIでimportを試すところまで来ましたが、
unknown errorでimport出来ず\(^o^)/。どなたか気が向いたら教えてください。
0532デフォルトの名無しさん
2007/01/27(土) 20:09:12サブイ
0533デフォルトの名無しさん
2007/01/27(土) 22:26:03ここはvipでも口論・議論ではなくperlの質問箱スレだ。
前日の終わったネタをいつまでも引きずったり、
指摘されて逆切れして粘着するぐらいならほかのスレ行けよ
0534デフォルトの名無しさん
2007/01/27(土) 22:45:22頓珍漢レスを>>529に指摘されて逆ギレしてる張本人乙にしかみえないよ?w
0535デフォルトの名無しさん
2007/01/27(土) 22:52:37PerlのスレでPerlの話をしないやつはすべて平等に価値がない
0536デフォルトの名無しさん
2007/01/27(土) 23:29:550537デフォルトの名無しさん
2007/01/28(日) 00:35:56>どなたか気が向いたら教えてください。
まず、C++を勉強しろ。C++でDLLを扱えるようになること。
PerlでDLLを扱う話はそれからだ。
0538デフォルトの名無しさん
2007/01/28(日) 01:35:42ここはvipでも口論・議論ではなくperlの質問箱スレだ。
前日の終わったネタをいつまでも引きずったり、
指摘されて逆切れして粘着するぐらいならほかのスレ行けよ
0539デフォルトの名無しさん
2007/01/28(日) 02:58:29| |
| | ___ ___
| | . / | __ _____ / _ \
| | / /| | / / / ____/ / / > l
| |. / / .| |. / / / /.. _ /  ̄ /
| |/ / | |/ / /  ̄ ̄_/ / \
| /. | / / / ̄ ̄ __ / / ̄ ̄> |
| / |___/ ./  ̄ ̄ ̄ / /  ̄ ̄ /
 ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ _____ ___ ___ ___
______ /__ __/ [][] _| |_| |__ _| |_
| ___ \ / / | _ | |_ レ'~ ̄|
| | \ l | |_  ̄| | / / / /| |
| |____/ / \__| | |  ̄ /_ /. | |_
| ____/ ___ __ __/ヽ |_|. |__|. \/
| | /`、_/_/ / _ ヽ / _ /
| | ヽ / | l l l | l l l
| | | l ヽ  ̄ / ,ヽ  ̄ /
 ̄  ̄  ̄ ̄ / __ ヽ
| l l l
ヽ  ̄ ̄ /
~ ̄ ̄~
0540デフォルトの名無しさん
2007/01/28(日) 03:41:100541デフォルトの名無しさん
2007/01/28(日) 04:14:20でやれ
Prog
0542デフォルトの名無しさん
2007/01/28(日) 04:16:240543デフォルトの名無しさん
2007/01/28(日) 21:16:33どうやればいいか教えてください。
0544デフォルトの名無しさん
2007/01/28(日) 21:39:34convertで24bit Raw RGBで出力して
それを再度pngで出力すればいいんでね?
0545543
2007/01/29(月) 00:12:46$im->Set(matte => 0);
で解決できました。スレ汚しごめんなさい。
0546デフォルトの名無しさん
2007/01/30(火) 20:26:33例) $var : shared;
と言うのは、文法的にどういう意味なのでしょうか?
threadsだけに許された特殊な文法なのでしょうか?
0547デフォルトの名無しさん
2007/01/30(火) 21:18:540548デフォルトの名無しさん
2007/01/30(火) 22:02:55ありがとうございます
CPANで見ても英語がさっぱりで…
分かり易く解説されているページ等はないでしょうか
はてなのは見ましたがさっぱりです
0549デフォルトの名無しさん
2007/01/31(水) 17:01:01UNIX系OSやWindowsで
.soや.dllを利用したいのですが、
どうするのが一般的でしょうか?
出来れば日本語の解説ページをお願いします
0550デフォルトの名無しさん
2007/01/31(水) 23:53:20コマンドラインでカウントダウンってできますか?
C:\>perl hoge.pl
次の処理まで待ち時間: 5秒...
のところ “5”の部分のみが 4 3 2 1... と更新されていくようにしたいのです
いちおー system "cls (もしくは) clear "でスクリーンごと更新とかは なしで
Activeperlですが cpanで解決するなら cpanでも結構です
よろしく〜
0551デフォルトの名無しさん
2007/02/01(木) 00:00:31¥b
0552デフォルトの名無しさん
2007/02/01(木) 00:05:34うおっ! ありがとうございます!!
さっそくそのキーワードで調べてみます!!
0553デフォルトの名無しさん
2007/02/02(金) 13:47:58一通りCPANしたりぐぐったりしてみたが見つからなかったんだけど。
0554デフォルトの名無しさん
2007/02/02(金) 15:02:25項目数(列数)が多いCSVのデータを読み込んで処理するとき、皆さんはどうしてますか?
私は10項目くらいでしたら
my($id, $name, $age, ..) = split /,/;
と、それぞれ変数を用意するのですが、
100項目を超えるような場合、項目名を要素とする配列を用意しておき
@col_name = qw(id name age ..);
連想配列に格納して
my @array = split /,/;
my %hash = ();
for(0..$#col_name) {
my $key = $col_name[$_];
my $val = $array[$_];
$hash{ $key } = $val;
}
$tel = $hash{tel};
今扱ってるCSVはデータの件数(行数)が500件あって、上記の連想配列の格納をその件数分繰り返し行なっています。
0555554
2007/02/02(金) 15:03:04%col_no = (
id => 0,
name => 1,
...,
);
$tel = $array[ $col_no{tel} ];
↑ちょっと読みづらいかなとも思います。
項目数・項目名が変わる可能性は低いです。
効率よりも読みやすさ重視です。
よろしければ、ご意見お聞かせください。
0556デフォルトの名無しさん
2007/02/02(金) 15:07:300557デフォルトの名無しさん
2007/02/02(金) 15:09:34これでいいのか
入れ方は任せる
0558デフォルトの名無しさん
2007/02/02(金) 18:22:13$_ = "1,hiroyuki,30"; # csv
@$record{@col_name} = split /,/;
#
print $$record{id},"\n";
print $$record{name},"\n";
print $$record{age},"\n";
0559デフォルトの名無しさん
2007/02/02(金) 21:32:19配列でやりたいなら、こんなことしちゃったり:
my $r = MyRecord->new(split /,/);
print("$r->name\n");
package MyRecord;
BEGIN {
my $i = 0;
my @col_name = qw(id name age); # カラム名を設定。
for my $n (@col_name) {
eval qq{ sub $n :lvalue { \$_[0][$i] }};
$i++; }}
sub new { bless [@_[1..$#_]], $_[0]; }
0560デフォルトの名無しさん
2007/02/02(金) 21:34:18print("$r->name\n")
修正 → print($r->name, "\n")
0561デフォルトの名無しさん
2007/02/02(金) 22:02:33evalで作るのと、*{...} = sub{}で作るのどっちがスマートなんだろ。
0562デフォルトの名無しさん
2007/02/02(金) 22:22:43通常の定義と見た目が一貫してるから読みやすいかも。
シンボルテーブル+クロージャだと、クロージャ作る側のレキシカルな環境?も意識しないとならないし、ちょっと嫌。
0564デフォルトの名無しさん
2007/02/04(日) 09:24:15いけないのですが、元のソースにエラー時の処理が全く入っていません。
$ftpcmd = ○○○ #<-ftpコマンドが記述されたテキストファイル
system("ftp -n < $ftpcmd);
対象ファイルは複数あって mget logfile*.* で取って来ています。
ファイルが取って来れなかったり、相手に接続できなかったりといったような
エラーが起きた事を判定するにはどのようにすればいいのでしょうか?
PerlもLynuxも初めてなので、出来るだけ簡単な方法を教えていただけると
ありがたいです。
よろしくお願いします。
0565デフォルトの名無しさん
2007/02/04(日) 13:04:460566デフォルトの名無しさん
2007/02/04(日) 15:35:04Net::FTPでスクリプト書く例
http://search.cpan.org/~gbarr/libnet-1.20/Net/FTP.pm
モジュールが入ってなかったら「perl CPAN」でググってCPANの使い方覚えていれろ
0567デフォルトの名無しさん
2007/02/04(日) 16:26:220568デフォルトの名無しさん
2007/02/04(日) 17:13:07そのやり方で書き直してみます。
ありがとうございました。
>>567
Linuxの打ち間違いですね。
0569デフォルトの名無しさん
2007/02/05(月) 23:30:35教えていただいた方法で組んでみたのですが、複数のファイルをワイルドカードで
指定して取って来るにはどうしたらよいのでしょう?
対象のファイル名には出力された日付と時刻が含まれていて、個数も名前も不定
なのです(○○○YYYYMMDDHHMM.logのようなファイル名で、日付部分が
当日のものだけ取って来たいのです)。
何度もすみませんがよろしくお願いします。
0570デフォルトの名無しさん
2007/02/06(火) 01:45:03my($ftp,$pattern) = @_;
foreach my $file ($ftp->ls($pattern)) {
$ftp->get($file) or warn $ftp->message;
}
}
0571デフォルトの名無しさん
2007/02/06(火) 23:22:19どうもありがとうございます。
上手く持ってこれました。
0572デフォルトの名無しさん
2007/02/07(水) 11:31:08以下のソースで実行結果になることは納得できるのですが、
希望結果を得るためにはどうすれば良いのでしょうか?
●ソース
@$data=(
{'name'=>'test1','pay'=>'1000','cancel_flg'=>'0','create_date'=>'20070131','cancel?date'=>''},
{'name'=>'test2','pay'=>'2000','cancel_flg'=>'1','create_date'=>'20070110','cancel_date'=>'20070120'},
{'name'=>'test3','pay'=>'100','cancel_flg'=>'0','create_date'=>'20070201','cancel_date'=>''},
);
foreach(@$data){
push(@lst,$_);
if($_->{cancel_flg}){
$_->{create_date}=$_->{cancel_date};
$_->{pay}="-".$_->{pay};
push(@lst,$_);
}
}
print "$_->{name}\t$_->{pay}\t$_->{create_date}\n" foreach(@lst);
●実結果
test1 1000 20070131
test2 -2000 20070120
test2 -2000 20070120
test3 100 20070201
●希望結果
test1 1000 20070131
test2 2000 20070110
test2 -2000 20070120
test3 100 20070201
0573デフォルトの名無しさん
2007/02/07(水) 11:44:59push(@lst, {%$_});
0574デフォルトの名無しさん
2007/02/07(水) 11:55:08ありがとうございます
希望どおりの結果を得られました
ハッシュ内のデータを1つずつ別のハッシュに移し替えることで回避していましたが
これからはソースがスマートになりそうですw
私が無知なだけだと言う話かも知れませんが、勉強になりました
0575デフォルトの名無しさん
2007/02/07(水) 12:23:24$X = ['A'];
$Y = $X; #リファレンスデータのポインタ(?)だけをコピーして、データそのものはコピーしてない。
$X->[0] = 'B';
print $Y->[0];
結果「B」
0576デフォルトの名無しさん
2007/02/07(水) 12:36:30Clone(::More/Fast/PP/Any...)とかなんかたくさんあるんだけど
どれを使うのがいいんだよ
0577デフォルトの名無しさん
2007/02/07(水) 12:39:190578デフォルトの名無しさん
2007/02/07(水) 13:56:18こんな感じで。
<midashi>kuki</midashi>
茎とはクキである。・・・・・
<midashi>kuki</midashi>
茎とはクキである。・・・・・
見出し部分タグ内が同じ場合のみ、一つ残してダブりのぶんは見出しも本文も消す、
という作業を行いたいのですが、perlで出来ますか?
何を勉強すればよいのか、示唆頂ければありがたいです。
0579デフォルトの名無しさん
2007/02/07(水) 14:05:520580デフォルトの名無しさん
2007/02/07(水) 16:05:05機械読み取りを考慮した仕様になってればいいんだが
0581デフォルトの名無しさん
2007/02/07(水) 22:15:16引き渡したパスにあるファイル名を配列に入れて、そのファイル1つ1つを順繰りに
処理していきたいのですが、1度処理をした後でもう1度処理を行うと、最初に配列
にセットしたファイル名が配列に残ってしまっています。
下のソースだと、「1回目」と「2回目」のところでは同じ内容のファイル名が表示
されます(2回目では何も表示されないで欲しいです)。
どこがおかしいのでしょうか?ご指導を宜しくお願いします。
sub aa{
($path) = @_;
@localfl;
@dir;
opendir(DIR,$path) || return(-1);
@dir = readdir(DIR);
foreach $f (@dir){
if($f =~ /^\.\.?/){ next;}#親&カレントフォルダ(.と..)を除外
$localfl{$f} = $f;
}
foreach $f (sort(keys(%localfl))){
print("1回目 $f\n");
}
undef @localfl;#これでクリア?
@localfl = ();#これでクリア?
foreach $f (sort(keys(%localfl))){
print("2回目 $f\n");
}
}
0582デフォルトの名無しさん
2007/02/07(水) 22:20:070583デフォルトの名無しさん
2007/02/07(水) 22:55:59変数全部グローバルだし
0584デフォルトの名無しさん
2007/02/07(水) 23:05:43@localflには最初から何も入ってなくて、%localflをクリアしてないから
前の中身が残ってるということでしょうか?
%localflの中身をクリアすればOKですか(%localfl=""; とか・・?)
>>583
すみません、まだPerl触り出して1週間のド素人なもので・・。
0585デフォルトの名無しさん
2007/02/07(水) 23:30:020586582
2007/02/07(水) 23:36:52バグの温床になるのを防ぐために use strict; と use warnings; をお薦めします
変数を宣言するときは my を使ってください
適当に書き直したらこんな感じでしょうか
use strict;
use warnings;
sub aa {
my ($path) = @_;
opendir(my $dh, $path) or return -1;
my @localfl = sort grep { ! /^\.\.?/ } readdir($dh);
foreach my $f (@localfl) {
print("1回目 $f\n");
}
}
0587デフォルトの名無しさん
2007/02/08(木) 00:19:07>>586
丁寧に教えていただきありがとうございました。
参考にさせていただきます。
0588デフォルトの名無しさん
2007/02/08(木) 20:09:30なんとか試行錯誤しながらやってるんですが、
Data::Dumper がやたら文字化けします。
Dumper無しで出力すると化けないので
エンコードの部分は間違ってないと思うのですが。
0589デフォルトの名無しさん
2007/02/08(木) 20:16:37use utf8;
use Data::Dumper;
binmode STDOUT,":encoding(cp932)";
my $str="あああ";
print Dumper $str;
print $str;
以上をutf8で書いて実行すると
$VAR1 = "\x{3042}\x{3042}\x{3042}";
あああ
となります
どうにかして日本語をDumperする方法はないでしょうか?
0590578
2007/02/08(木) 20:17:25XML エディタ で検索してみましたが、どうもよく分かりませんでした。
ちなみに見出しは全部でaからzまで数十万あります。
ダブり語は多分、数千種類が各2〜7個くらいダブっています。
差し支えなければ、使えそうな専用エディタを教えて頂けないでしょうか?
ファイルのパースさえ出来れば楽勝だろうとおっしゃるのは素晴らしいです。
ちなみに楽勝というのはperl で、ですか?
機械で読むというのがよく分からないのですが(すみません)、多分txt形式で
50MBくらいのファイルになりそうで、そこまでは出来ます。
0591588=589
2007/02/08(木) 20:19:080592デフォルトの名無しさん
2007/02/09(金) 02:39:44WEBの掲示板などでよく、特定のタグだけ書き込み許可してますよね。それを実現するのに
下記のようなコードを書きました。最近、WEBに限らず、テキスト系の処理は何するにも
こんな感じでsplitして再帰する書き方に固執してしまってます。
字ヅラ的には短くて気に入ってるんですが、処理的には効率悪い気がしてならないのです。
もっとうまい方法があるでしょうか。
sub escape_limited {
my %args = (str => '', @_);
$exception = q!</?(?:a|img|blockquote|pre|code|span)(?:\s[^>]*)?>!;
my @scraps = split(/($exception)/im, $args{'str'}, 2);
if ((scalar @scraps) == 3) {
return &escape(%args, str => $scraps[0]). $scraps[1]. &escape_limited(%args, str => $scraps[2]);
}
else {
return &escape($args{'str'});
}
}
0593デフォルトの名無しさん
2007/02/09(金) 04:00:04my %args = (
str => '',
allowed => qr{a|img|blockquote|pre|code|span},
@_
);
my $text = $args{str};
$text =~ s{( < (?! /? (?:$args{allowed}) \b ) [^>]* > )}{ escape($1) }iegx;
return $text;
}
とかでどう?
0594デフォルトの名無しさん
2007/02/09(金) 09:53:04$LT = quotemeta escape("<");
$GT = quotemeta escape(">");
($str = escape($str)) =~s/$LT\/?(a|img|b|blockquote|pre|code|span)\b.*?$GT//ig;
とかねー。多分軽いよ。
タグ内に'<' '>' が無いことを前提にしてるみたいだけど、大丈夫?
属性も調べないと、スタイルシートとかスクリプトとか埋め込まれる可能性もあるし。
0595デフォルトの名無しさん
2007/02/09(金) 10:35:31s/$LT(\/?(?:a|img|b|blockquote|pre|code|span))\b(.*?)$GT/<$1$2>/ig
だわな。スマソ
0596デフォルトの名無しさん
2007/02/09(金) 13:59:17592(私):スプリット型
593:一発置換型
594:例外事後処理型
マッチングがひとつもない場合
592:速い
593:圧倒的に遅い
594:速い
マッチングがある場合
592:圧倒的に遅い(しかも多重再帰の警告でまくり)
593:少し速い
594:速い
一旦、なりふり構わず置換してから例外を元に戻すってのは、
分かりやすいだけで処理的に気持ち悪いと思ってましたが、
意外と効率いいんですね。
0597デフォルトの名無しさん
2007/02/09(金) 14:07:03ひとつ、事後処理型の場合、対象文字列に最初からエスケープ文字が
含まれてるケースを考慮する必要がありますね。これが一番やっかいかなあ。
0598デフォルトの名無しさん
2007/02/09(金) 14:10:29混乱してきたので仕事に戻ります。
0599デフォルトの名無しさん
2007/02/09(金) 15:02:53テキスト読み込んで処理はPerlの得意とする分野なので楽勝
タグは<midasi></midasi>だけなのか?その他のタグがあったとして処理する必要はないのか?
複数の同じ見出しに対し残す本文はどれでもいいのか?
本文中にタグや特殊文字があったりした場合は?一意に判別できるエスケープの仕様はある?
あたりの仕様さえ確定できればファイル読み込みのやりかた、正規表現、ハッシュあたり覚えればできるっしょ
ちゃんとしたXML形式になってるなら専用のパーサ使えば楽が出来るが、正規表現でも十分なように思える
0600デフォルトの名無しさん
2007/02/09(金) 23:36:510601デフォルトの名無しさん
2007/02/10(土) 03:35:34ファイルと同名のフォルダをつくりたいのですがなぜかうまくいきません。
my $filename = $saveasdialog->GetPath;
$this->{text_ctrl_1}->SaveFile($filename);
mkdir($filename);
このスクリプトで、一行目でwxperl filedialogオブジェクトにより
ファイル名が取得され$filenameに入ります。2行目でsavefileメソッドで
テキストが$filenameの通りに名前がつけられ保存されます。これは正常にいきます。
しかし、3行目のコードではフォルダが作成されません。
wxperl固有というよりもperlのコードの書き方に問題があるような気がするのですが、
アドバイスがあったらお願いします。
0602デフォルトの名無しさん
2007/02/10(土) 03:46:04なんじゃそりゃ??
0603デフォルトの名無しさん
2007/02/10(土) 03:54:30例えば Windows では同名のファイルとフォルダは作れない。
0604601
2007/02/10(土) 04:31:21すみませんでした。windows xp, active perl環境です。
>例えば Windows では同名のファイルとフォルダは作れない。
これは知りませんでした。というか大昔に聞いたことがあるような気がしますが
盲点でした。
mkdir($filename."Folder");
のようにしたら("作成したファイル名"Folder)という名前でフォルダが出来ました。
自分の考えている機能としてはこれで十分先に進めそうです。
ありがとうございました。
0605デフォルトの名無しさん
2007/02/10(土) 13:39:410606デフォルトの名無しさん
2007/02/10(土) 13:43:460607デフォルトの名無しさん
2007/02/10(土) 15:15:31むかし、「同名のファイルとディレクトリ作れるんじゃねえ!!」と怒った記憶がある。
0608デフォルトの名無しさん
2007/02/10(土) 17:42:010609デフォルトの名無しさん
2007/02/10(土) 18:27:55やったUNIXの弊害か……
0610デフォルトの名無しさん
2007/02/10(土) 18:44:58下記のような問題にぶつかるもどうにも解決方法がわかりません。
どうすればよいか教えてください。よろしくお願いします。
【やりたいこと】
投票CGIの改造で、イエスノーの2択の選択肢の投票に応じて、表示されて
いる数字も増減されるようにしたい。 数字の増減はカウンタスクリプトを流用し
ています。
【現在書いているスクリプト(抜粋)】
open(FILE, "+<./count.dat") or die("エラー:カウントファイルが開けません");
eval { flock(FILE, 2); };
$counta = <FILE>;
seek(FILE, 0, 0);
if($item == 1 ){ print FILE $counta+1 } else { print FILE $counta-1 }
close(FILE);
【問題点】
例えば現在の$countaの値が100で、値が-1される場合、結果は99となって欲しいのに、990と
なって返ってきます。1000から999の場合なども同じです(どうも桁数が減る場合にうまく動作し
てくれない模様)。
【解決したいこと】
100が99になって欲しい場合、その動作が990とならず希望どおり表示されるようにしたいです。
【その他】
同じ桁数が変わる場合でも、99→100など、桁数が増える場合は問題が発生しないです。
0611デフォルトの名無しさん
2007/02/10(土) 18:45:26そちらの方が異常だと思うが。
そもそもそいった実装のOSはあるんかえ?
0612デフォルトの名無しさん
2007/02/10(土) 18:58:46最近それで頭に来てる。百万個を越えるファイルを持つ非常に巨大なファイルツリーを
トラバースするのにリソース食いまくり。
やっぱり分けてあるシステムってあるんだ。
0613デフォルトの名無しさん
2007/02/10(土) 19:19:45use Fcntl qw/:flock/;
open my $fh, '+<', './count.dat' or die $!;
eval { flock $fh, LOCK_EX };
$count = <$fh>;
seek $fh, 0, 0;
print $fh $item == 1 ? $count + 1 : $count -1;
truncate $fh or die $!;
close $fh;
0615610
2007/02/10(土) 21:14:23早速アドバイスを実装したところ、思った通りに動いてくれました。
どうもtruncateがポイントだったようですね。ありがとうございました。
0616デフォルトの名無しさん
2007/02/11(日) 04:18:34後で取り出すことって出来るのでしょうか?
マッチした順に$1や$2ではなく、(.*?>$name)とかした時、
(.*?)のマッチを$nameで受け取れると非常に嬉しいのですが。。
どなたかアドバイスいただけると嬉しいです。。
0617デフォルトの名無しさん
2007/02/11(日) 05:58:10マッチした後に代入しておくんじゃなんで駄目なんだ?
if (/(.*?)/) {
$name = $1;
}
0618デフォルトの名無しさん
2007/02/11(日) 06:01:14マッチしたもののリストが返ってくるのでそれを受け取る
($a, $b) = /^(.)(.)/;
0619616
2007/02/11(日) 09:49:39返信ありがとうございます _ _
なぜエイアリアスに結びつけたいかというと
βのウェブサービスのラッパーを作っていて、
正規表現がころころ変わる可能性がある(欲しい文字列が前後する可能性がある)からです。
欲しい文字列が前後してしまうと正規表現だけでなく、
その後の正規表現を受け取るコードも変更しなければならなくなってしまうので。。
# 正規表現を正規表現で自動生成するスクリプトを作っていたら、
# 文字列が前後した場合その部分は自動化できなくなってしまうことに気づき、
# 質問させて頂きました。
0620デフォルトの名無しさん
2007/02/11(日) 11:04:20それは文字化けでなく、エスケープされてるだけ。
Data::Dumper の仕様
0621デフォルトの名無しさん
2007/02/11(日) 11:30:06(.*?)(?{ $name = $^N })
0622592
2007/02/11(日) 15:22:43ちょっと込み入っている場合、例外事後処理だと信じられないほど遅くなりました。
コーディングに問題があったかも知れませんが。
という訳でスプリット型に戻しました・・。もっとうまい方法があるでしょうか。
sub escape_limited {
my %args = (str => '', exception => [], exception_block => [], @_);
my @regexp_array;
(scalar @{$args{'exception_block'}}) and push(@regexp_array, sprintf(q!<(%s)\b.*?>.+?</\2>!, join('|', @{$args{'exception_block'}})));
(scalar @{$args{'exception'}}) and push(@regexp_array, sprintf(q!</?(?:%s)\b.*?>!, join('|', @{$args{'exception'}})));
return &loop($args{'str'}, join('|', @regexp_array));
sub loop {
if ($_[1]) {
my @scraps = split(/($_[1])/is, $_[0], 2) ;
return &escape($scraps[0]). $scraps[1]. &loop(pop(@scraps), $_[1]) if ((scalar @scraps) >= 3);
}
return &escape($_[0]);
}
}
0623デフォルトの名無しさん
2007/02/11(日) 18:28:22たぶんアプローチが根本的に間違ってる。
0624616
2007/02/11(日) 19:05:54ありがとうございます!知らなかったです使わせて頂きます。
http://search.cpan.org/dist/perl/pod/perlre.pod
>>623
良くあるので、今回もそうかもしれないのですが;
http://www.nicovideo.jp/の検索のラッパーとして、
http://www.kiseki.info/niko-per/matome_search.cgiを作りました。
そして、上記ラッパーの正規表現生成に、
http://www.kiseki.info/niko-per/regexNikoniko.txt
というコードを使っていました。(>>621さんのアドバイス未導入コード)
お暇があればアドバイスいただけると幸いです。
0625デフォルトの名無しさん
2007/02/11(日) 22:38:26$input = 'hoge';
$output = $input;
$output =~ s/ho/ha/g;
return $output;
これを$outputを使わずにreturn &func($input, /ho/, 'ha');
みたいに表現することはできないんでしょうか。
0626デフォルトの名無しさん
2007/02/11(日) 22:54:33join('ha', split(/ho/, $input))
0627デフォルトの名無しさん
2007/02/11(日) 23:09:340628デフォルトの名無しさん
2007/02/11(日) 23:11:41どこの国のPHPだよ
0629デフォルトの名無しさん
2007/02/12(月) 00:06:590630592
2007/02/12(月) 00:10:16遅くなったのはバグでした。スレ汚しすみません。
0631デフォルトの名無しさん
2007/02/12(月) 02:58:080632631
2007/02/12(月) 03:15:00http://search.cpan.org/~mlfisher/pmtools-1.01/pmeth
サブクラスなどにもぐっていく処理もありますが、どうもこの行がミソのようでした。
keys %{ "$module::" }
0633デフォルトの名無しさん
2007/02/12(月) 07:44:44GDモジュールとArchive::Zipモジュールが活用できそう、
と調べたのですが不明点があります。
Archive::ZipモジュールのaddFileメソッドは引数としてファイル名が必要ですが、
GDモジュールのpngメソッドで動的に生成されたPNG画像データをzip圧縮するにはどうしたら良いでしょうか。
生成されたPNGデータをbinmodeを使用して画面表示するサンプルは見かけたのですが・・・
Perlを勉強し始めたばかりで基本事項も良く分からず五里霧中です。
アドバイスのほど、よろしくお願いいたします。
0634デフォルトの名無しさん
2007/02/12(月) 09:40:250635デフォルトの名無しさん
2007/02/12(月) 13:43:39必ずしもその場所にファイルがあるとは限らないので、ファイルが無かった時と
接続出来ないなどで取ってこれなかった時を判定したいのですが、どうすれば
よいのでしょうか?
0636デフォルトの名無しさん
2007/02/12(月) 13:47:370637デフォルトの名無しさん
2007/02/12(月) 14:20:49ありがとうございます。
やってみましたが、ファイルが無かった時も接続できなかった時も、戻り値は
256となるので区別がつかないです・・。
0638デフォルトの名無しさん
2007/02/12(月) 14:21:07だけならLWP使う方がその辺のエラー処理は書きやすいと思うけどな。
0639デフォルトの名無しさん
2007/02/12(月) 14:39:33すみません、wgetを使わないといけないので別の方法で取ってくるというのは
出来ないのです。
0640デフォルトの名無しさん
2007/02/12(月) 15:06:350641デフォルトの名無しさん
2007/02/12(月) 15:11:25それがOKならwgetで取ってくるってのはどうだ?
0642デフォルトの名無しさん
2007/02/12(月) 15:59:14ありがとうございます。>>640さんの方法の方が簡単そうなのでこちらで
いこうと思うのですが、
open(STDERR, ">> errmsg.txt");
$ret = system("wget 〜");
close(STDERR);
とやって、$ret が256 だったらerrmsg.txtを1行づつ読み込んで
[ 404 Notfound ]という文字列が見つかったらファイルなし、無い
ならその他のエラー、という感じでいいのでしょうか?
0643デフォルトの名無しさん
2007/02/12(月) 16:27:24# wget -q http://www.google.com/ && echo ok
ok
# wget -q http://www.google.com/nonexist || echo ng
ng
#
0644デフォルトの名無しさん
2007/02/12(月) 16:28:390645デフォルトの名無しさん
2007/02/12(月) 20:57:32書いてくれてありがとな。
0646デフォルトの名無しさん
2007/02/13(火) 00:23:46perldoc IPC::Open3
0647デフォルトの名無しさん
2007/02/14(水) 00:10:021〜〜,11〜〜,2〜〜,23〜〜・・・
という風になってしまいます。
これを数字順
1〜〜,2〜〜,11〜〜,23〜〜・・・
にするにはどうすればいいのでしょうか??
0648デフォルトの名無しさん
2007/02/14(水) 00:17:12@dst = sort { $a <=> $b } @src; # 数値ソート
@dst = sort { $a cmp $b } @src; # 文字列ソート(こっちは略せる)
0649デフォルトの名無しさん
2007/02/14(水) 00:39:50それ試したんですけど、数字順にならないんです・・orz
とかとか♪
0651デフォルトの名無しさん
2007/02/14(水) 00:53:47Sort subroutine didn't return a numeric value
ってエラーがががorz
0652脱帽
2007/02/14(水) 00:59:09@dst = sort { ($a =~ /(\d+)/)[0] <=> ($b =~ /(\d+)/)[0] } @src;
0653デフォルトの名無しさん
2007/02/14(水) 00:59:591aa, 2cc, 5b, 11b, 13e, 21d
ちゃんとなってるけどなあ
0654デフォルトの名無しさん
2007/02/14(水) 01:08:03いろいろ試したらできました。
splitを何回か使って要素の中の数列にまで要素を分割して比較したらうまくいきました。
俺なんかに付き合ってくれてありがとうございましたm(_ _m)
0655デフォルトの名無しさん
2007/02/14(水) 05:36:070656デフォルトの名無しさん
2007/02/14(水) 06:05:370657デフォルトの名無しさん
2007/02/14(水) 06:25:240658デフォルトの名無しさん
2007/02/14(水) 06:31:03ソースをテキストで保存したくて
open(IN,"http://****・・・") or die "無理";
ってやってみたら無理でした。
0659デフォルトの名無しさん
2007/02/14(水) 06:56:37print int rand 10;
のようなコードを入れたtest.plをrequireして実行すると
↓↓httpdプロセス番号(実行結果)↓↓
1(3), 2(3), 3(3), 1(5), 2(5), 3,(5), 1(2), 2(2), 3(2)
のように完全でない乱数がある規則で発生してしまいます。
srandを加える、もしくはtest.plを意図的に更新し共有メモリから外すと期待通り全て違う表示がされます。
なぜこのような動作になるのか教えていただけませんでしょうか。
環境はFedora core5、Perl v5.8.8、mod_perl-2.0.2-5.1、httpd-2.2.2-1.2(prefork)です。
0660デフォルトの名無しさん
2007/02/14(水) 07:17:33http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq9.html#how_do_i_fetch_an_html_file
>>659
【激速】mod_perl SpeedyCGI FastCGI【激速】
http://pc10.2ch.net/test/read.cgi/php/1149505269/
0661デフォルトの名無しさん
2007/02/14(水) 07:32:33お陰で心置きなく寝れます。いや、仕事でした。いってきます;;
0662デフォルトの名無しさん
2007/02/14(水) 11:51:52#!/usr/bin/perl
$ID = "id";
$PASS = "pass";
__END__
perlと余り関係ない質問かもしれませんが..
上の様なスクリプトを作った場合ファイルを開くと$PASSの「pass」が丸見えに
なるのですがこの部分を暗号化してわからないようにしてスクリプト実行時に
何らかの処理をして$PASSをpassに戻すような事は可能でしょうか?
0663デフォルトの名無しさん
2007/02/14(水) 12:01:30SHA-1とかでハッシュにしてそれを持ってるとよろし
0664デフォルトの名無しさん
2007/02/14(水) 12:05:42ありがとうございます
ぐぐってきます..(´・ω・)
0665デフォルトの名無しさん
2007/02/14(水) 13:30:21ttp://www.youtube.com/watch?v=KyLqUf4cdwc
0666デフォルトの名無しさん
2007/02/14(水) 14:08:49なんか失敗ばっかりしているように見えるね。
0667デフォルトの名無しさん
2007/02/14(水) 14:35:28warata
0668デフォルトの名無しさん
2007/02/14(水) 14:45:30やべえ面白すぎるwww
0669デフォルトの名無しさん
2007/02/14(水) 15:29:03手法がよく使われていますがこれらを実現出来るCPANに登録されているスタンダードな
モジュール名を教えていただけませんでしょうか。
0670デフォルトの名無しさん
2007/02/14(水) 15:39:30開発部署のあちこちのデスクから、こんなん聞こえてきたらコエー。
0671デフォルトの名無しさん
2007/02/14(水) 15:56:45search.cpan.orgでsendmailをキーワードに検索すればいくつか出てくるので
適当に好きなのを使えばいいんじゃないか。
0672デフォルトの名無しさん
2007/02/14(水) 20:43:09この後に、オフィスPCに切れて投げ壊してる外人おっさんの動画を
0673デフォルトの名無しさん
2007/02/14(水) 21:31:26That was eazy.txt
ワロス
0674デフォルトの名無しさん
2007/02/14(水) 21:57:070675デフォルトの名無しさん
2007/02/14(水) 22:00:560676デフォルトの名無しさん
2007/02/14(水) 22:03:040677デフォルトの名無しさん
2007/02/14(水) 22:12:070678デフォルトの名無しさん
2007/02/14(水) 22:39:15297 if ( $line =~ /\Q$in{$form1}\E/ ) {
を if ( $line =~ i/\Q$in{$form1}\E/ ) { にするとエラーが出てしまいます
syntax error at test.cgi line 297, near "$in{"
syntax error at test.cgi line 297, near "/ )"
syntax error at test.cgi line 300, near "}"
Execution of test.cgi aborted due to compilation errors.
292 sub umu1 {
293 open(IN,"$file"); #csv読み込み
294 while(1) {
294 $line = <IN>; #csvの行を&lineに代入
295 @data = split( /,/ ,$line ); #@data[0~]にcsv行を個別に代入
296 if ( $line eq "" ) { last; } #無限ループ終了条件
297 if ( $line =~ /\Q$in{$form1}\E/ ) {
298 print "$data[0]$data[1]"."<br>"."\n";
299 }
300 }
301 close(IN);
302 }
0679678
2007/02/14(水) 23:04:540680デフォルトの名無しさん
2007/02/15(木) 00:37:59のように、IEにhtmlの内容を表示させながらhtml解析する方法ってないでしょうか?
今はcontentで一旦ファイルに保存して、systemでIEを起動させ表示させています。
0681デフォルトの名無しさん
2007/02/15(木) 10:04:00処理
return(@A,@B,@C)
}
としている関数で、
(@A,@B,@C) = &foo()
↑のような感じで返り値を配列個別に受け取りたいんですが、
Perlでは可能なんでしょうか?
0682デフォルトの名無しさん
2007/02/15(木) 10:16:08hoge;
return \(@A, @B, @C);
}
($refA, $refB, $refC) = foo;
こういう感じにリファレンス渡しにしないといけない。
0683デフォルトの名無しさん
2007/02/15(木) 11:20:31Win32OLE
JavaScriptみたいなタグの分解も一緒にやってくれる
0684デフォルトの名無しさん
2007/02/16(金) 04:43:050685デフォルトの名無しさん
2007/02/16(金) 14:44:56カスタムドローかオーナードロー
ってかWinAPI使うならCとかC++のが断然楽だぞ?
0686デフォルトの名無しさん
2007/02/16(金) 17:14:27カスタムロードがいいみたいですね。
Perlのサンプルコードはぜんぜんないようで。。。
困った
0687デフォルトの名無しさん
2007/02/16(金) 17:21:160688デフォルトの名無しさん
2007/02/16(金) 17:36:30Win32::GUIって自分でウィンドウメッセージ取れないのか?
取れるならC,C++のサンプルコードと同じようにできるが
できないなら知らん
0689デフォルトの名無しさん
2007/02/16(金) 19:01:28サンプルコードは一応あるんだが、エラーが出て動かん。
カスタムドローの構造が古いのかな???
バイナリをいろいろ変換してるがよう分からんわ。
0690デフォルトの名無しさん
2007/02/17(土) 15:11:52substr( $lParam, 48, 8, $clrText);
を
substr(unpack("P56", pack("L",$lParam)), 48, 8, $clrText);
にするとエラーは無くなるが、文字色は変わらない。
要するに、$lParamはNMLVCUSTOMDRAW構造体へのポインタ
cf. http://www.kumei.ne.jp/c_lang/sdk3/sdk_261.htm
であって、この構造体の中身を書き換えればいいように思えるのだが、
Perl でどうすればいいのかわからない。
0691デフォルトの名無しさん
2007/02/18(日) 17:54:02クライアントにその時々の最新データを返すにはどのようにすればいいのでしょうか?
&readdata
sub readdata{
after(1000,&readdata);
}
0692デフォルトの名無しさん
2007/02/18(日) 17:55:11ということの説明のためにコードを書いていたのですが、途中で投稿してしまいましたorz
0693デフォルトの名無しさん
2007/02/18(日) 19:55:100694デフォルトの名無しさん
2007/02/18(日) 20:26:34指定した列の数値の平均を割り出すプログラムをperlで作りたいんですが
どのように作ればいいんでしょうか?
入門サイトなどをいくつか見てきましたが
これといったお手本が無く、行き詰まってしまいました。
お願いします。
0695デフォルトの名無しさん
2007/02/18(日) 20:47:41もちっとデータに具体性を出してほしい
例を上げて
0696デフォルトの名無しさん
2007/02/18(日) 20:56:22レスありがとうございます。
例というか、実際に使うテキストファイルの最初の5行をそのままコピペしますが
0; 133.44; 3180
1; 134.76; 3180
2; 168.35; 3180
3; 141.58; 3180
4; 157.86; 3180
5; 176.92; 3180
こうなってます。
一番左は列数、二列目が平均値を出したいデータ、三列目は無視してください。
二列目の数値の平均値が出したいのです。
ひとつのテキストファイルに44640行、
こんな感じの数値がずらずらと並んでいるので
二列目の数値を全部足して44640で割る、ということがしたいんです。
0697デフォルトの名無しさん
2007/02/18(日) 21:11:30・ファイルをperlに読み込んで各行をループさせる
・一行の中で、2列目の数値を取り出す
といった操作が必要だけど、
ファイルの読み書きや、正規表現とか、まったく何も分からないの?
0698デフォルトの名無しさん
2007/02/18(日) 22:01:45ちょうど最近それっぽい記事が出てた。
ttp://codezine.jp/a/article/aid/904.aspx
区切り記号が「,」か「;」の違いがあるとか微妙にちがうけど、
コレが理解できれば希望のスクリプトを書くのも出来るはず。
コピペだけですませようとしてるんなら無理だけど。
0699デフォルトの名無しさん
2007/02/18(日) 22:02:02一応、基礎的なことはサイトを見て勉強してきたんで
正規表現のことや
ファイルを読み込んでコマンドプロンプトに内容を表示させたり
ファイルの作成、書き込みなどは理解しているつもりです。
ただそれらのことを組み合わせてプログラムを作るとなると
まだよくわからないんです。
もう明日中には完成させなきゃならないんで
できればヒントだけでもお願いしたいです…
0700デフォルトの名無しさん
2007/02/18(日) 22:08:59my $sum = 0;
my $i = 0;
for my $file (qw(unko1.txt unko2.txt)) {
open my $fh, $file or die "開けん";
while(<$fh>) { $sum += (/;\s*(-?\d\.\d);/)[0]; $i++; }
}
print "阿部怜治:", $sum / $i, $/;
0701694
2007/02/18(日) 23:30:17ありがとうございます。
もう少し頑張って明日試してみます。
0702デフォルトの名無しさん
2007/02/19(月) 00:43:52perl -pae "$l++;$s+=$F[1]}{$_=$s/$l" input.txt
0703デフォルトの名無しさん
2007/02/19(月) 00:58:400704デフォルトの名無しさん
2007/02/19(月) 04:15:19$F[1]}{
の
}{
って何してるの?
0705デフォルトの名無しさん
2007/02/19(月) 04:59:09$ perl -h
-n assume "while (<>) { ... }" loop around program
-p assume loop like -n but print line also, like sed
-p は while (<>) { ... print; } で囲まれる。
0706デフォルトの名無しさん
2007/02/19(月) 05:26:43本当にプリプロセッサのように囲まれるのね
0707デフォルトの名無しさん
2007/02/19(月) 18:41:27この書き方と
print $a if $a;
この書き方では何か違いはあるのでしょうか
0708デフォルトの名無しさん
2007/02/19(月) 18:44:480709デフォルトの名無しさん
2007/02/19(月) 20:24:07大体5万行くらいの大きさのテキストファイルから、
重複している行
(連続して重複してるわけでは無く、内容が同じ行が
とびとびに存在してる)を一つのこして、残りは省く
というスクリプトを書く場合、
1)1行目はそのまま書き出す
2)2行目は1行目と比較して、同じだったら書き出さない、違ったら書き出す
3)3行目は1行目と比較して、同じだったら書き出さない、違ったら2行目と比較して、、、
4)以下繰り替えし
このようなスクリプトしか無いのでしょうか?
処理に非常に時間がかかるので、何か良い方法があったら、御教示下さい。
0710デフォルトの名無しさん
2007/02/19(月) 20:31:36「perl 重複」でぐぐればいろいろテクニックが見つかる
0711デフォルトの名無しさん
2007/02/19(月) 20:36:035万行くらいなら全部ハッシュテーブルに詰め込んでも大丈夫そうだが
順序崩していいならソートしてから重複を除くのがいいだろう
while (<$fh>) {
$hash{$_} = 1;
2. 読み込みが終わったら、keyを書き出す。
print for keys %hash;
1-1. 読み込んだ順に書き出したい時。
my $line;
while (<$fh>) {
$hash{$_} = [$_, ++$line];
1-2. 先に読み込んだ方を有効にしたい時。
$hash{$_} = [$_, ++$line] unless $hash{$_} ;
2-1. 読み込みが終わったら、sortしながらkeyを書き出す。
print for sort $hash{$a}->[1] <=> $hash{$b}->[1], keys %hash;
脳内妄想なので、補完よろしこ(照)
0714709
2007/02/19(月) 20:42:52ありがとうございます。ハッシュテーブルを使う方法は、
全く考えてませんでした(というか今迄使ったことが無かったので)
とりあえず、ハッシュテーブルの使い方を勉強してきます。
0715デフォルトの名無しさん
2007/02/19(月) 20:57:05でいいだろ。
メモリ足りないようならtie()使ってDBMファイルをワークに使えばよし。
0716デフォルトの名無しさん
2007/02/19(月) 20:58:320717デフォルトの名無しさん
2007/02/19(月) 22:07:130718デフォルトの名無しさん
2007/02/19(月) 22:16:49{} ←中身が空だとエラーになるんだけど、素のBLOCKは使ってもいいのか、
使えるが推奨されてないのか、perl的でないのか、どんな感じなんでしょう?
0719デフォルトの名無しさん
2007/02/19(月) 22:28:43Windows2000では問題がなかったのに、vistaになってDBIとかがインストールに失敗する。
どうすれば回避できる?
0720デフォルトの名無しさん
2007/02/19(月) 22:41:06そのエラーメッセージで言われてるところを直せばインストールできるんじゃないか
0721デフォルトの名無しさん
2007/02/19(月) 22:46:44$hoge = {};
何か見えてこないかい?
それからperlrefのMaking Referencesの3番辺りに目を通すといいと良いかと。
…スクリプティング言語資料室さんの訳、そこの所間違ってるかな
> 一方、ハッシュではなくBLOCKへのリファレンスを返すのであれば、
0722718
2007/02/19(月) 23:08:43おー、ありがとう。丁度良い書き方が見つかりました。
{}だけ書いて中身は後で書きたいときに、エラーになるのが気持ち悪かったのですが、
{;}という方法があったか!
0723デフォルトの名無しさん
2007/02/20(火) 16:33:08if ($comment !~ /(\x82[\x9F-\xF2])|(\x83[\x40-\x96])/) {&er_("cannot write!","1");}
ここを変えたいと思います。
ここをひらがなの「あ」〜「ん」が含まれていなければ、という意味にしたいのですが、
「あ」は 82A0
「ん」は 82F1 です。
(\x82[\x9F-\xF2])|(\x83[\x40-\x96])
これをどう治せばいいのでしょうか?
↑正規表現とマッチングを理解していないので、
これのはっきりとした意味がわかっていません。
たぶんカタカナまで含まれていると思うのですが・・。
0724デフォルトの名無しさん
2007/02/20(火) 16:51:19sjisか。
| の左側がひらがなで、右側がカタカナでしょ。
ひらがなだけよけたいなら、
$comment !~ /\x82[\x9F-\xF1]/
でいいんじゃね?
0726中の人
2007/02/21(水) 00:01:39すまん確認した。
どこをどうすればこういう勘違いをするんだかわれながら不思議だ。
つーことで今週末までをめどに修正しておきます。
0727デフォルトの名無しさん
2007/02/21(水) 21:57:480728688
2007/02/21(水) 22:09:52自己解決しました。
my $CopyMemory=new Win32::API("kernel32", "RtlMoveMemory", "NPI", "V");
defined $CopyMemory or die "Cant find CopyMemory";
$CopyMemory->Call($lParam+48, $clrText, 8);
0729デフォルトの名無しさん
2007/02/21(水) 22:18:46訂正688→686
0730デフォルトの名無しさん
2007/02/21(水) 23:31:13substr( $lParam, 48, 8, $clrText);
を
$object->TextColor( (unpack('II',$clrText))[1] );
$object->TextBkColor( (unpack('II',$clrText))[0] );
にする方が楽だと思うけど、自己解決おめでと。
0732690
2007/02/22(木) 01:35:07自己解決おめでとう。
>>689 の
substr( $lParam, 48, 8, $clrText);
の意味について考え直したのだが、以前のバージョンのActivePerl では
「裏仕様」として、「$lParam がポインタと考えられる場合は、間接指定
されたアドレスの文字列(バイト列)を操作し、そうでなければ$lParam
そのものを操作する」というのがあったのではないだろうか。
>>689 のソースを読む限り、そうとしか思えない。
ところが、この「裏仕様」は危険であるし、安全確実な間接アドレス指定方法
が手当てされたから、いつかのバージョンで廃止されたんだろうね。
0733デフォルトの名無しさん
2007/02/22(木) 16:07:47ってありえるのでしょうか?
0734デフォルトの名無しさん
2007/02/22(木) 16:26:33CGIとかで動かしてるなら鯖の仕様次第だし
普通にコマンドラインから実行すれば空になる
0735デフォルトの名無しさん
2007/02/22(木) 19:59:42正規表現でのチェックはどうすればいいのでしょうか?
if( $comment /~ (.*http.*http.*http,*http,*http) ) { error(); }
こんな感じでしょうか?orz
0736デフォルトの名無しさん
2007/02/22(木) 20:46:31だめだった。。。
print "error" if scalar @{[$comment =~ /http/g]} > 4;
桶だった。。。
詳しい人の解説キボンヌ(照)
0738脱帽
2007/02/22(木) 21:26:240739脱帽
2007/02/22(木) 21:27:580740デフォルトの名無しさん
2007/02/22(木) 21:44:26なので、もしそういう風に書きたいのなら
print "error" if $comment =~ s/http/http/g > 4;
とか書くといいかも。
0741デフォルトの名無しさん
2007/02/22(木) 22:04:230742735
2007/02/22(木) 22:24:08これでいけました。
s/hogehoge/fugafuga/gの s と g の意味がわからなかったのですが、
調べて理解できました、ありがとうございます。
0743デフォルトの名無しさん
2007/02/23(金) 13:36:53こちらは初めてです、29箱目ということで既出質問だったらすみません
上記環境で モジュール Encode が threads と同時に上手く働きません
perl素人の自分なりに調べた結果、Encode モジュールはスレッドセーフでは
ないのではないかと思い始めたのですが、それで間違いないでしょうか?
それとも私が何か大事なお約束や呪文を忘れているのでしょうか
また、スレッドセーフで無かった場合、各スレッド内で文字コード変換を
行いたい場合、皆さんはどのようにしているでしょうか
0744デフォルトの名無しさん
2007/02/23(金) 14:04:52適当にぐぐったらこういうのがあった。
ttp://www.nntp.perl.org/group/perl.perl5.porters/2007/02/msg120729.html
確かに試すとたまにおかしな結果になる。ちなみに手元のバージョンは
v5.8.8 built for i486-linux-gnu-thread-multiだった。
マニュアル見てもthread-safeであるとは書いてないし、原則は明記されて
なければunsafeと思えだから間違ってはいないのだろう。
で、俺はスレッドでEncode使った経験はないからなんともいえないのだが、
普通に考えたら適当なshared variableでlockかけてから使うぐらいしか
ないのではないだろうか。
0745743
2007/02/23(金) 14:22:08確実に再現性のある最小コードを続いて投稿…と思ったのですが上手くいかずorz
自分の考え違いだったかもと思っていたところでした
URL 先のコードを試した結果、私の環境でもおかしな結果を不規則に起こしました
再入しないようにとりあえず自衛していく方向でいってみます
ありがとうございました
0746743
2007/02/23(金) 16:42:34PerlIO layer での :encoding(〜) とか
HTTP::Message の decoded_content とか便利だなーとガシガシ使っていたので
どんどん泥沼のソースになっていきましたorz
0747デフォルトの名無しさん
2007/02/23(金) 16:45:170748デフォルトの名無しさん
2007/02/23(金) 22:14:02つーか投げてほしい。
0749デフォルトの名無しさん
2007/02/23(金) 22:54:10メーリングリストはJcodeメーリングリストでok
0750デフォルトの名無しさん
2007/02/24(土) 02:14:260751デフォルトの名無しさん
2007/02/24(土) 11:03:220752デフォルトの名無しさん
2007/02/24(土) 13:51:210753デフォルトの名無しさん
2007/02/24(土) 14:57:03なにが「ひどく」て「解決にならない」なの?
ライセンスがArtisticとGNU GPLのデュアルライセンスで、
どっちもソースが公開されているものなんだから不具合あったらソースを追って自分で改変するくらい当たり前じゃん。
おまえらはフリーライダーなの?それともそれをやるだけの能力がない低脳なの?
0754デフォルトの名無しさん
2007/02/24(土) 15:28:140755デフォルトの名無しさん
2007/02/24(土) 17:43:380756デフォルトの名無しさん
2007/02/24(土) 20:38:110757デフォルトの名無しさん
2007/02/24(土) 20:55:47キラクニヤレヤ〜♪
0758デフォルトの名無しさん
2007/02/24(土) 22:05:020759デフォルトの名無しさん
2007/02/24(土) 23:26:36浮動小数点計算をループでしていてその結果を出力したら、
あるタイミングから#INDというのが出力されました。
これは一体なんでしょうか、、、
0760デフォルトの名無しさん
2007/02/24(土) 23:35:560除算してるんじゃね?
0761デフォルトの名無しさん
2007/02/24(土) 23:48:49レスありがとうございます。
数値扱いされてないのでしょうか?
具体的なコードはこんなかんじなんですが、、
my $a = -0.1382 ** 0.000212494687632809;
my $temp = -0.1382;
my $b = $temp ** 0.000212494687632809;
これだと$aはちゃんと出力されるんですが、$bは-1.#INDと出力されます。。
0762デフォルトの名無しさん
2007/02/25(日) 00:11:04indefinite
0763デフォルトの名無しさん
2007/02/25(日) 00:27:05"**"は"-"より強いので
-0.1382 ** 0.000212494687632809
は
-(0.1382 ** 0.000212494687632809)に等しい。
0764デフォルトの名無しさん
2007/02/25(日) 01:53:36Math::BigFloat
0766デフォルトの名無しさん
2007/02/25(日) 12:00:000767デフォルトの名無しさん
2007/02/25(日) 19:23:35#!/usr/bin/perl
use WWW::Mechanize;
$mech = WWW::Mechanize->new(agent => 'Mozilla/4.0 (MSIE 6.0;)');
while(1){
my(@t) = localtime(time);
unless( $t[1] == 59 && $t[0] > 20){sleep(30);next;}
$mech->get($ARGV[0]);
$mech->field("MESSAGE" => "時報");
$mech->click();
(@t) = localtime(time);
sleep(60-$t[0]);
$mech->click();
}
0768デフォルトの名無しさん
2007/02/27(火) 20:41:51PDFJ?
0769デフォルトの名無しさん
2007/02/27(火) 22:40:040770デフォルトの名無しさん
2007/02/28(水) 00:10:35$input=~s/\n//;
print "$input";
コマンドラインから「\n\n」と入力した場合に
「\n\n」と出力されるのではなく、改行2個が出力されるようにしたいんですが
どうすればいいですか?
0771デフォルトの名無しさん
2007/02/28(水) 00:17:230772デフォルトの名無しさん
2007/02/28(水) 00:24:39わかりました。ありがとうございます。
0773デフォルトの名無しさん
2007/02/28(水) 00:52:29evalは安易に使うとコマンド実行も出来ちゃうので正規表現にしとけ。
どうしてもeval使う場合は入力チェックしないと危険よ
0774770
2007/02/28(水) 01:14:01アドバイスありがとうございます。
自分でちょっとしたテキスト処理をやりたいだけなので大丈夫です。
\< や \/ や \. などの入力が入った場合、その都度
s/\\\</\</;
s/\\\./\./;
を書かなければいけないのでevalにします。ありがとうございました。
0775768
2007/02/28(水) 13:05:37自由度がありすぎて面倒な部分もあるんだけど、
やっぱPDFJでいってみます。
0776デフォルトの名無しさん
2007/02/28(水) 16:35:41perlはCの #include に相当する機能はあるのでしょうか?
今、Perlで統計解析の処理をしています。解析手法ごとに異なったスクリプト
を作っています。
入出力部分が複雑なんでここの部分と全体で使える共通サブルーチンだけ切り出して
別ソースにして、実行時に組み込んで使いたいのですが、どうも旨くゆきません。
ぐぐったりしてみましたが、Use、Requireの話しか検索できません。何か単純に
Includeする方法は無いのでしょうか?
0777デフォルトの名無しさん
2007/02/28(水) 16:48:38そう難しくないからモジュールにしてuse使うべきだな。
0778デフォルトの名無しさん
2007/02/28(水) 16:48:43,、'` ( ´∀`) ,、'`
'` ( ⊃ ⊂) '`
0779デフォルトの名無しさん
2007/02/28(水) 16:49:14∧_∧ もうダメ
( ´∀`) ∧_∧ モウ カンベン
. ( つ ⊂ ) ヒヒヒヒ (´∀` ,,)、 あははは シテクダサイ
.) ) ) ○ ∧_∧ , , へ,, へ⊂), ∧_∧ ○,
(__)_)⊂ ´⌒つ´∀` )つ (_(__)_丿 ⊂(´∀`⊂ ⌒ヽつ
0780デフォルトの名無しさん
2007/02/28(水) 16:52:530781デフォルトの名無しさん
2007/02/28(水) 17:02:560782デフォルトの名無しさん
2007/02/28(水) 17:07:13includeとスペルが違うからって脊髄反射したのか?
そうでないのなら、ますはrequireでは駄目だった点を質問文につけないと回答者は答えようがないぞ
0783デフォルトの名無しさん
2007/02/28(水) 17:08:32×776はrequireやuseの説明を読んでないのではないのでは?
○776はrequireやuseの説明を読んでないのでは?
0784デフォルトの名無しさん
2007/02/28(水) 17:11:40思うけどな。よほどこったことやるんじゃなけりゃ、Exporter
使えば一発だし。
0785デフォルトの名無しさん
2007/02/28(水) 17:14:160786笑われた 776
2007/02/28(水) 17:22:05Cの#includeのつもりだったので、
------------ 今まで ------------
初期の宣言など・・・
open(FP, $filename) or die($filename);
while(<FP>) {
$hash{$key} = hoge;
}
------------ 変更 ------------
初期の宣言など・・・
require 'other.pl';
&sub($filename, \%hash);
と変更しただけなんですが・・・・実行時に
0787デフォルトの名無しさん
2007/02/28(水) 17:25:100788デフォルトの名無しさん
2007/02/28(水) 23:16:020789デフォルトの名無しさん
2007/03/01(木) 01:53:41use Readonly;
Readonly my $HOGE => 'fuga';
こういうのでいいじゃん。
0790デフォルトの名無しさん
2007/03/01(木) 08:05:44install LWP::Simple
....
BEGIN failed--compilation aborted at /System/Library/Perl/Extras/5.8.6/darwin-thread-multi-2level/HTML/TokeParser.pm line 12.
Compilation failed in require at ../blib/lib/HTML/Form.pm line 116.
html/form-param.......dubious
Test returned status 2 (wstat 512, 0x200)
DIED. FAILED tests 1-24
Failed 24/24 tests, 0.00% okay
....
どなたかお助けを。
環境:MacOS X 10.4 Tiger, perl 5.8.6
0791デフォルトの名無しさん
2007/03/01(木) 16:35:18条件文 $Fm{"data"} !~ /^[0-9]/ の意味は ”0〜9以外の文字を含まない場合”ですが
これを”0〜9と半角カンマ「,」以外の文字を含まない場合”という条件文にしたいです。
どう書けばいいんでしょうか(´・ω・`)??
0792デフォルトの名無しさん
2007/03/01(木) 16:55:20”0〜9と半角カンマ「,」以外の文字を含まない場合”
→”0〜9と半角カンマ「,」のみを含む場合”
$Fm{"data"} =~ /^[0-9,]*$/ # NULLもマッチ
あるいは $Fm{"data"} =~ /^[0-9,]+$/ # NULLはマッチしない
0793デフォルトの名無しさん
2007/03/01(木) 17:01:19レスありがとう。なるほど(´・ω・`)
cpan> install LWP::Simple
LWP::Simple is up to date.
(゚∀゚)アヒャ
MacOS X 10.4.8
$ perl -v
This is perl, v5.8.6 built for darwin-thread-multi-2level
(with 3 registered patches, see perl -V for more detail)
ほいほい・・・
Locally applied patches:
23953 - fix for File::Path::rmtree CAN-2004-0452 security issue
33990 - fix for setuid perl security issues
SPRINTF0 - fixes for sprintf formatting issues - CVE-2005-3962
0795791
2007/03/02(金) 01:52:03すいません、おそらくマッチングはしてるっぽいんですが、その後
$Fm{'data'}の中身の半角カンマが全角カンマに変わってました。
これは何故なんでしょう?
0796デフォルトの名無しさん
2007/03/02(金) 02:03:580797791
2007/03/02(金) 02:09:50&input('text','data',"$up",' size=50',"\n");
の入力値です。
0798791
2007/03/02(金) 02:23:03sub input {
$label++;
print qq|<LABEL for="$label$_[1]">\n|;
print qq|<INPUT type="$_[0]" name="$_[1]" id="$label$_[1]" value="$_[2]"$_[3]>$_[4]\n|;
print qq|</LABEL>\n|;
}
となっております。
0799デフォルトの名無しさん
2007/03/02(金) 07:19:02どっちかしかないので、きちんと確認してから質問しろ。
問題の切り分けができてなくて的外れな質問を垂れ流している予感。
0800デフォルトの名無しさん
2007/03/02(金) 08:40:490801デフォルトの名無しさん
2007/03/02(金) 09:45:170802デフォルトの名無しさん
2007/03/02(金) 12:13:48================================================
use LWP::UserAgent;
$ENV{HTTPS_PROXY} = "http://〜proxy〜:〜port〜/";
my $proxy_url = "http://〜proxy〜:〜port〜/";
my $url = "https://〜URL〜";
my $ua = LWP::UserAgent->new();
$ua->proxy(qw( http https ), $proxy_url);
# $ua->proxy(['http', 'https'], $proxy_url); --> これでも同様
my $response = $ua->get($url);
print $response->content;
================================================
で問題が無く取得できるのですが、
URLが"http://〜"の場合には、Proxyサーバから
「サポートされていないリクエスト/プロトコルです」
というエラーが出てしまいます。
「perldoc Crypt::SSLeay」に記載されている
$ua->proxy([qw( https http )], "$proxy_ip:$proxy_port");
では、Proxyサーバから上と同様のエラーが。しかしこの場合、URLが"http://〜"ならOK。
また、http と https を入替えてみると
($ua->proxy(qw( https http ), $proxy_url);)
今度は http がOKで https がエラー。
"http" "https" のどちらかしか認識してくれてないようなのですが、
どうすれば http, https とも取得できるようになりますでしょうか?
0803802
2007/03/02(金) 12:15:02OS
Red Hat Enterprise Linux ES4
Squidバージョン
2.4.STABLE7
perlバージョン
5.8.5
その他モジュール
Crypt-SSLeay-0.53 , openssl-0.9.7a-43.10
0804デフォルトの名無しさん
2007/03/02(金) 13:29:18ので、LWP::UserAgentのproxyの仕組みではだめでCrypt::SSLeayの方のを
使う必要がある。したがって、$ua->proxyでhttpsのproxyを設定せずに、
環境変数HTTPS_PROXYを設定するのが正解。また、HTTPS_PROXYの設定は
末尾に'/'があるとエラーになる。
たぶん以下の2行を修正すれば動くと思う。(俺の手元では動いた)
$ENV{HTTPS_PROXY} = "http://〜proxy〜:〜port〜"; # 末尾の/をとる
$ua->proxy(qw( http ), $proxy_url); # httpsは指定しない
0805802
2007/03/02(金) 16:10:21バッチリいけました。ありがとう!
0806デフォルトの名無しさん
2007/03/02(金) 21:38:01$path = $ENV{'PATH_INFO'};
$path =~ tr/+/ /;
$path =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
$print_path = $path;
$print_path =~ s/&/&/g;
$print_path =~ s/>/>/g;
$print_path =~ s/</</g;
$print_path =~ s/"/"/g;
$print_path =~ s/'/'/g;
print $print_path;
0807デフォルトの名無しさん
2007/03/02(金) 22:08:280808806
2007/03/02(金) 22:26:19失礼しました。向こうに移動します。
0809デフォルトの名無しさん
2007/03/02(金) 22:53:42っていう条件はどう書けばいいの?
1つだと $text =~ /(App|Bbq|Ntk|Sun)/だけど・・・
0810デフォルトの名無しさん
2007/03/02(金) 23:20:13$text =~/(?:.*?(?!\1)(UnKO|CHiNKO|MaNKO)){2}/
性器表現の質問なら、専スレのがレベル高い回答を得られるかも。
0811デフォルトの名無しさん
2007/03/02(金) 23:23:340812デフォルトの名無しさん
2007/03/02(金) 23:32:18/(?:.*?(UNKO|CHINKO|MANKO)){2}/
で十分。
0813デフォルトの名無しさん
2007/03/02(金) 23:47:550814デフォルトの名無しさん
2007/03/03(土) 00:55:360815デフォルトの名無しさん
2007/03/03(土) 12:26:36my @str = qw( FooAppBarBbqBaz NtkQuuxSun Foo App BarBbqBaz);
for (@str) {
print 1 if @{[ /App|Bbq|Ntk|Sun/g ]} >= 2; # >>811
print 2 if s/(App|Bbq|Ntk|Sun)/$1/g >= 2;
print 3 if @{[ split /App|Bbq|Ntk|Sun/, $_, 3 ]} >= 3;
print 4 if /App|Bbq|Ntk|Sun/g && //g;
print '/';
}
0816デフォルトの名無しさん
2007/03/04(日) 01:01:58make test で以下のように失敗してしまいます。
何か原因はわかりますでしょうか? (OS:fedora core 5 / perl:v5.8.8)
-----------------------------------
# Failed test '404 check'
# at t/local/back.t line 149.
# got: '500'
# expected: '404'
t/local/back............ok 29/38# Looks like you failed 1 test of 38.
t/local/back............dubious
Test returned status 1 (wstat 256, 0x100)
DIED. FAILED test 28
Failed 1/38 tests, 97.37% okay (less 2 skipped tests: 35 okay, 92.11%)
-----------------------------------
0817816
2007/03/04(日) 01:05:47他に足りないものがあったりしますか?
0818デフォルトの名無しさん
2007/03/04(日) 01:07:360819816
2007/03/04(日) 01:29:41> 10. Ok I give up
> cpan> force install WWW::Mechanize
ひぇぇ〜
0820デフォルトの名無しさん
2007/03/04(日) 03:55:51$n = ($i)?1:0;
...
}
このコードの、1以上を全て1とする処理部分を
if文を無くして$n=bool($i)の様な感じでシンプルに
書く方法はあるでしょうか?
0821デフォルトの名無しさん
2007/03/04(日) 04:29:07for $i (0..100) {
・・・
$n = 1;
}
0823デフォルトの名無しさん
2007/03/04(日) 05:49:330824デフォルトの名無しさん
2007/03/04(日) 10:17:41障害で、「検索脳」というものが存在するようだ。>>819を見て確信した。
「ヒト」として機能していない。
0825デフォルトの名無しさん
2007/03/04(日) 12:35:17$n=!!$i; でいいんじゃね?
0826デフォルトの名無しさん
2007/03/04(日) 18:53:020827デフォルトの名無しさん
2007/03/04(日) 19:14:040829デフォルトの名無しさん
2007/03/05(月) 01:36:380830デフォルトの名無しさん
2007/03/05(月) 01:51:050831デフォルトの名無しさん
2007/03/05(月) 03:29:480832デフォルトの名無しさん
2007/03/05(月) 03:30:470833デフォルトの名無しさん
2007/03/05(月) 03:52:55三項演算子の方が間違いなく低コスト。
0834デフォルトの名無しさん
2007/03/05(月) 07:40:090835デフォルトの名無しさん
2007/03/05(月) 07:46:540836デフォルトの名無しさん
2007/03/05(月) 08:00:160837デフォルトの名無しさん
2007/03/05(月) 10:24:260838デフォルトの名無しさん
2007/03/05(月) 10:43:00論よりベンチ。
use Benchmark;
timethese(undef, {
820 => sub {
for my $i (0..100) {
my $n = $i? 1: 0;
}
},
821 => sub {
my $n = 0;
for my $i (0..100) {
$n = 1;
}
},
827 => sub {
for my $i (0..100) {
my $n = int !! $i;
}
},
});
Benchmark: running 820, 821, 827 for at least 3 CPU seconds...
820: 3 wallclock secs ( 3.07 usr + 0.01 sys = 3.08 CPU) @ 30756.17/s (n=94729)
821: 3 wallclock secs ( 3.16 usr + 0.00 sys = 3.16 CPU) @ 48809.49/s (n=154238)
827: 3 wallclock secs ( 3.14 usr + 0.00 sys = 3.14 CPU) @ 28888.54/s (n=90710)
0839デフォルトの名無しさん
2007/03/05(月) 10:51:310840デフォルトの名無しさん
2007/03/05(月) 11:05:07という疑問があったのでとりなおしてみた。やっぱり影響あった
らしく820,827はやや速くなったまでは予想通りだが、820と827が
逆転したのはかなり不思議だ。誰か理由説明できる?
use Benchmark;
timethese(undef, {
820 => sub {
my $n;
for my $i (0..100) {
$n = $i? 1: 0;
}
},
821 => sub {
my $n = 0;
for my $i (0..100) {
$n = 1;
}
},
827 => sub {
my $n;
for my $i (0..100) {
$n = int !! $i;
}
},
});
Benchmark: running 820, 821, 827 for at least 3 CPU seconds...
820: 2 wallclock secs ( 3.14 usr + 0.00 sys = 3.14 CPU) @ 36769.75/s (n=115457)
821: 3 wallclock secs ( 3.05 usr + 0.00 sys = 3.05 CPU) @ 48989.51/s (n=149418)
827: 3 wallclock secs ( 3.12 usr + 0.00 sys = 3.12 CPU) @ 42848.40/s (n=133687)
0841デフォルトの名無しさん
2007/03/05(月) 11:16:20俺のPCでも >>840 でやってみた。
Benchmark: running 820, 821, 827 for at least 3 CPU seconds...
820: 4 wallclock secs ( 3.10 usr + 0.04 sys = 3.14 CPU) @ 2998.73/s (n=9428)
821: 3 wallclock secs ( 3.03 usr + 0.00 sys = 3.03 CPU) @ 4186.78/s (n=12665)
827: 4 wallclock secs ( 3.06 usr + 0.00 sys = 3.06 CPU) @ 3838.45/s (n=11761)
なるほど。俺のPCの性能は>>840 のPCの1/10もないのか。
0842デフォルトの名無しさん
2007/03/05(月) 11:23:020843デフォルトの名無しさん
2007/03/05(月) 11:28:320844デフォルトの名無しさん
2007/03/05(月) 11:29:010845デフォルトの名無しさん
2007/03/05(月) 11:33:04This is perl, v5.8.5 built for x86_64-linux-thread-multi
Benchmark: running 820, 821, 827 for at least 3 CPU seconds...
820: 3 wallclock secs ( 3.09 usr + 0.00 sys = 3.09 CPU) @ 51378.64/s (n=158760)
821: 3 wallclock secs ( 3.03 usr + 0.00 sys = 3.03 CPU) @ 62582.84/s (n=189626)
827: 4 wallclock secs ( 3.11 usr + 0.00 sys = 3.11 CPU) @ 55434.73/s (n=172402)
/usr/local/bin/perl -v
This is perl, version 5.005_03 built for i686-linux
Benchmark: running 820, 821, 827, each for at least 3 CPU seconds...
820: 3 wallclock secs ( 3.01 usr + 0.00 sys = 3.01 CPU) @ 43505.98/s (n=130953)
821: 3 wallclock secs ( 3.00 usr + 0.00 sys = 3.00 CPU) @ 51370.00/s (n=154110)
827: 3 wallclock secs ( 3.01 usr + 0.00 sys = 3.01 CPU) @ 30147.18/s (n=90743)
同一マシンで実行
int!!が2倍近く違う。
0846デフォルトの名無しさん
2007/03/05(月) 11:40:540847デフォルトの名無しさん
2007/03/05(月) 11:44:100848デフォルトの名無しさん
2007/03/05(月) 11:53:290849デフォルトの名無しさん
2007/03/05(月) 11:54:410850845
2007/03/05(月) 11:59:10/usr/local/bin/perlは845と同じもの
/usr/bin/perl -v
This is perl, v5.8.0 built for i386-linux-thread-multi
Benchmark: running 820, 821, 827 for at least 3 CPU seconds...
820: 3 wallclock secs ( 3.07 usr + 0.00 sys = 3.07 CPU) @ 37608.14/s (n=115457)
821: 3 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 45086.26/s (n=141120)
827: 4 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 41884.98/s (n=131100)
/usr/local/bin/perl -v
This is perl, version 5.005_03 built for i686-linux
Benchmark: running 820, 821, 827, each for at least 3 CPU seconds...
820: 3 wallclock secs ( 3.01 usr + 0.00 sys = 3.01 CPU) @ 44429.57/s (n=133733)
821: 3 wallclock secs ( 3.00 usr + 0.00 sys = 3.00 CPU) @ 53565.33/s (n=160696)
827: 3 wallclock secs ( 3.01 usr + 0.02 sys = 3.03 CPU) @ 28967.00/s (n=87770)
5.0が遅いのか、i686が遅いのか、多分前者だろう。
0851デフォルトの名無しさん
2007/03/05(月) 12:31:38どうでもよくなかったらトリビアじゃないだろアホw
0852デフォルトの名無しさん
2007/03/05(月) 13:33:05n<2倍なんて誤差の範囲だろ…馬鹿馬鹿しい
0853デフォルトの名無しさん
2007/03/05(月) 15:31:150854デフォルトの名無しさん
2007/03/05(月) 15:47:48Benchmark: running 820, 821, 827, each for at least 3 CPU seconds...
820: 3 wallclock secs ( 3.00 usr + 0.00 sys = 3.00 CPU) @ 363.00/s (n=1089)
821: 4 wallclock secs ( 3.27 usr + 0.00 sys = 3.27 CPU) @ 395.64/s (n=1292)
827: 3 wallclock secs ( 3.00 usr + 0.00 sys = 3.00 CPU) @ 249.67/s (n=749)
0855デフォルトの名無しさん
2007/03/05(月) 16:17:10環境条件があって関連モジュール(XML::Simple、XML::Parser)を使用できません。
データの抽出とかは不要で、$!={0|1} だけがわかればいいのですが、
正規表現だけで作る方法がありましたら、教えてください。
0856デフォルトの名無しさん
2007/03/05(月) 16:45:20http://www.w3.org/TR/xml11/
0857デフォルトの名無しさん
2007/03/05(月) 17:05:420858デフォルトの名無しさん
2007/03/05(月) 17:06:26ちょ、EBNFと正規表現じゃ受理できる言語のクラスが違いますがな。
もっとも何とかする方法はなくもない。
(1) ネストの段数を適当に有限に制限してがんばって展開する
(2) perl拡張の(??{ code })を使う
0859デフォルトの名無しさん
2007/03/05(月) 17:08:520860デフォルトの名無しさん
2007/03/05(月) 17:30:43pmファイルをどっかから持ってきて一緒に置いとけば使えたりしないの?
ちゃんとインストールコマンド使って、CPANから入れなきゃダメ?
0861デフォルトの名無しさん
2007/03/05(月) 17:35:350862デフォルトの名無しさん
2007/03/06(火) 20:53:21PurePerlモジュールならそれでいい。
つーか「モジュールを取ってきて適切なディレクトリにコピーする」という作業をインストールという。
0863デフォルトの名無しさん
2007/03/06(火) 22:25:170864デフォルトの名無しさん
2007/03/09(金) 10:24:45windowsのactive perl を使っているのですが、
ファイルの行数を数えるのは↓が最速でしょうか?もっといい方法はありますか?
open(FILE, "< filename");
$i++ while <FILE>;
close(FILE);
0865デフォルトの名無しさん
2007/03/09(金) 10:49:350866デフォルトの名無しさん
2007/03/09(金) 10:56:54max1000行程度なんですが、ちと調べてみます。
0867デフォルトの名無しさん
2007/03/09(金) 11:07:111000行ほどじゃwc遅いけどもっとでかくなるとwcが爆速で笑える
0868デフォルトの名無しさん
2007/03/09(金) 11:11:22それを10000回やるなら別だけどさ。
0869866
2007/03/09(金) 11:16:11>>868
ファイルはせいぜい10こ前後です。結局最初の方法でいいのかな・・
`≡ 人
≡(_)
`≡ (__)
≡( ・∀・) ありがとですたー!
≡⊂⌒ ⊃⊃
≡ ̄◎ ̄◎
0870デフォルトの名無しさん
2007/03/09(金) 16:54:450871デフォルトの名無しさん
2007/03/10(土) 00:17:38open(FILE, "filename");
while(<FILE>){};
print "$.\n";
close(FILE);
0872866
2007/03/10(土) 07:38:15そうですね^^;
>>871
なるほど、毎回カウントアップするよりこちらの方がいいかもしれませんね。
ありがトンございます(・∀・)
0873デフォルトの名無しさん
2007/03/10(土) 07:47:100874質問
2007/03/10(土) 13:11:58Received Packets Delivered = 6558
Output Requests = 5420
を%dataにキーをReceived Packets Delivered、値を6558、
キーをOutput Requests、値を5420として格納したいのですが、下記のプログラムでは
どうしてもoutput requestsのほうだけが%dataに格納されてReceived〜のほうが
格納されません。どうしてでしょうか?
foreachを2回行えばいいとは思うのですが、もし読み込む行数が何万行になると
かなり負荷になるのでできればforeachを1回でうまく取り込める方法が知りたいのですが・・
#!C:\Perl\bin\
@naiyou=`netstat -s`;
foreach (@naiyou){
last if($_=~/Routing Discards/);
chomp;
if($_=~/(Received Packets Delivered)(\s+)=(\s)(\d+)/){
%data=("Received Packets Delivered"=>$4)
}
if($_=~/(Output Requests)(\s+)=(\s)(\d+)/){
%data=("Output Requests"=>$4)
}
}
@key=keys %data;
print"@key\n";
@val=values %data;
print"@val\n";
0875デフォルトの名無しさん
2007/03/10(土) 13:15:42%data上書きしてるやんか
$data{"key"} = val;
0876874
2007/03/10(土) 13:23:560877デフォルトの名無しさん
2007/03/10(土) 13:29:08ハッシュの使い方が根本的に間違っている。
パンツを頭にかぶるくらい間違っている。
0878デフォルトの名無しさん
2007/03/10(土) 13:35:44基礎からやり直せ
0879デフォルトの名無しさん
2007/03/10(土) 13:41:39何万行になる可能性ってあるの?
0880874
2007/03/10(土) 14:08:39配列なら本に書いていましたが、ハッシュも上書きになるとは思いませんでした。
ありがとうございました。
0881デフォルトの名無しさん
2007/03/10(土) 18:38:34%data = (%data, "foo" => "val");
0882デフォルトの名無しさん
2007/03/10(土) 19:18:300883881
2007/03/10(土) 19:57:05実際こんなコーディングはしないけど、
874がどう間違えたのかの理解の助けになるかと思ってね。
0884デフォルトの名無しさん
2007/03/11(日) 01:00:050885デフォルトの名無しさん
2007/03/11(日) 01:39:320886デフォルトの名無しさん
2007/03/11(日) 02:32:070887デフォルトの名無しさん
2007/03/11(日) 06:15:50MIME::Parserはちょっとちがうかなと思っています。
0888デフォルトの名無しさん
2007/03/11(日) 12:31:03まずはrubyのMailParserの仕様を説明しる
あるいはMIME::Parserの何が違うのか説明
0889デフォルトの名無しさん
2007/03/11(日) 14:06:05無理に答えなくてもいいのに
0890デフォルトの名無しさん
2007/03/11(日) 15:58:07そこは素直に「実はRubyなんて知らずに質問しました、すみません」って
言っておけばいいところだと思うよ。
0891デフォルトの名無しさん
2007/03/11(日) 16:18:20私は質問者じゃありませんけど
「分からないなら無理に答えるな」
これ、どこかおかしいですか?
0892デフォルトの名無しさん
2007/03/11(日) 16:21:590893デフォルトの名無しさん
2007/03/11(日) 16:22:47>>889 みたいな失礼な奴はスルーで。
0894デフォルトの名無しさん
2007/03/11(日) 16:27:45print "<a href=\"$ENV{'SCRIPT_NAME'}?page=$id\" target=\"_blank\">スレタイ</a>"
みたいな感じでスレタイをクリックするとそのスレッドの内容の別ページが
開くようにしたいのですが、$ENV{'SCRIPT_NAME'}?page=1 になってるところを
クリックされた場合は$ENV{'QUERY_STRING'}にpage=1として返ってくると思うのですが、
それを分解して$form{'page'}=1 となるようにして、条件で
if($form{'page'}){ printPage() ; }
としてもひっかかってくれません。。なぜかわからないでしょうか・・
0895デフォルトの名無しさん
2007/03/11(日) 16:31:03簡単に論破出来ました。
頭の悪い人間の相手は簡単ですね。
0896デフォルトの名無しさん
2007/03/11(日) 16:31:120897デフォルトの名無しさん
2007/03/11(日) 16:35:01板違い。WebProg板。
後、$ENV{"QUERY_STRING"}を
分解する部分のコードが怪しそうなのでそちらも添えて。
0898デフォルトの名無しさん
2007/03/11(日) 16:53:16失礼しました。。
WebProg板で質問してみます!
0899デフォルトの名無しさん
2007/03/11(日) 20:24:44VM 性能も、もうすく Ruby には YARV が搭載されちゃうからもう勝ってる
ところがなくなりますね。Perl6 がはやくできるといいですね。
0900デフォルトの名無しさん
2007/03/11(日) 21:34:33どうぞその優れているRubyとやらを使っていてください。
そしてこのスレにはもう来ないでください。
0901デフォルトの名無しさん
2007/03/11(日) 21:46:17>>899
今も昔もPerlスレは僕たち無能の馴れ合いスレです。まともな人は来ないでください!><
0902デフォルトの名無しさん
2007/03/11(日) 23:30:120903デフォルトの名無しさん
2007/03/12(月) 00:29:48%INCを見たら幸せになれそう。
0904デフォルトの名無しさん
2007/03/12(月) 00:31:410905デフォルトの名無しさん
2007/03/12(月) 00:33:46%INC
厳密に言うとわかるのはuseまたはrequireされたファイルだけどな。
0906デフォルトの名無しさん
2007/03/12(月) 11:35:26評価するモジュール等はありますでしょうか?
諸事情で正規表現は使えません。
検索の仕方が悪いのか、ありませんでした。
宜しくお願いします。
0907デフォルトの名無しさん
2007/03/12(月) 12:19:26もうすこしちゃんと説明したほうがいい。
お望みのものかどうかはわからんがとりあえず File::FnMatch をあげておこう。
0908デフォルトの名無しさん
2007/03/12(月) 14:06:30正規表現ではなくてワイルドカード? あのファイルのパターンマッチのやつ?
* を .* に変換して正規表現としてマッチさせればいいんじゃない?
あるいは、ファイル名検索したいだけなら glob() を使う。
0909デフォルトの名無しさん
2007/03/12(月) 14:36:26シェルのワイルドカードのことか? あれはGlobって言うんだぞ。
とりあえずText::Globってのがあるな。
0910デフォルトの名無しさん
2007/03/12(月) 20:10:29htmlのテキストボックス から数字を配列に入れてソートして1行1つの数値を出そうとしているのですが、
require cgi-lib.pl;
for($i = 1; $i <= 5; $i++)
{
$number[$i] = $in{"form$i"};
}
@number = sort {$a <=> $b} @number;
for($i = 1; $i <= 5; $i++)
{
$TEMP .= print "$number[$i]\n";
}
print $TEMP;
で、
1
2
3
4
5
とでてほしいのですが、
11111
に、なってしまいます。どこがおかしいか検討もつきません。
0911デフォルトの名無しさん
2007/03/12(月) 20:17:140914デフォルトの名無しさん
2007/03/12(月) 22:11:190915906
2007/03/13(火) 14:20:37説明が分かりにくかったのなら申し訳ありませんが、
そのままです。ワイルドカードを含めた文字列を文字列Aとして、
文字列Bと比較しマッチするかどうかを求めるだけです。
>>908 >>909
正規表現は使わないと言ったはずです。
globは知っていますが、今回はファイル名を
抽出する事が目的ではありません。
Text::Globも内部的に正規表現を使っているのでお断りします。
0916デフォルトの名無しさん
2007/03/13(火) 14:36:320917デフォルトの名無しさん
2007/03/13(火) 14:54:48だったらまさしくfnmatchをしたいわけだから、File::FnMatchでいいんでない?
あれはCライブラリのfnmatchを呼ぶモジュールだから正規表現使ってないよ。
0918906
2007/03/13(火) 14:59:43PurePerlなモジュールでお願いします。
0919デフォルトの名無しさん
2007/03/13(火) 15:22:000920デフォルトの名無しさん
2007/03/13(火) 15:22:53自作するんならともかく。
0921デフォルトの名無しさん
2007/03/13(火) 15:25:31釣りとしか思えん。
0922デフォルトの名無しさん
2007/03/13(火) 16:14:29出来合いのモジュールはまずないから、そこらからfnmatch.c拾ってきて
perlで書き直すぐらいしかないと思われる。
0923デフォルトの名無しさん
2007/03/13(火) 17:51:27sub stupid_split($$) {
my($sep, $src) = @_;
my $seplen = length $sep;
my @splited;
my $cur = 0;
while ((my $next = index($src, $sep, $cur)) != -1) {
push @splited, substr($src, $cur, $next - $cur);
}
continue { $cur = $next + $seplen }
push @splited, substr($src, $cur);
return @splited;
}
0924デフォルトの名無しさん
2007/03/13(火) 18:38:02ならないのか、理由を言ったほうがいいね。多分、その理由を回避することの
ほうが楽だと思うが。
0925デフォルトの名無しさん
2007/03/13(火) 18:46:47課題とか上司にそういうのを作れって言われたのか?
0926デフォルトの名無しさん
2007/03/13(火) 18:58:360927デフォルトの名無しさん
2007/03/13(火) 19:00:08>>918とか、ソース流用したいのミエミエ
0928デフォルトの名無しさん
2007/03/13(火) 19:27:53宿題を手っ取り早く片付けるのが目的なのであればスレ違いだ、去れ。
0929デフォルトの名無しさん
2007/03/13(火) 20:10:40そんなモジュール、絶対に無いはずだから、本人の掛け値なしの実力が試される。
0930906
2007/03/13(火) 20:11:22理由は(?{〜〜})でコードを実行されたくない、
正規表現のコンパイルエラーで止まる、等。
回避術はいくらでもあるけど、
どれも美しくないので使いたくない。
というか、善良な質問者に対してその態度は何なの?
分からないのなら、無理に答えなくても良いんですよ?
0931デフォルトの名無しさん
2007/03/13(火) 20:15:33ここが笑うポイントですか
0932デフォルトの名無しさん
2007/03/13(火) 20:17:300933デフォルトの名無しさん
2007/03/13(火) 20:18:09放置するポイント
0934906
2007/03/13(火) 20:22:45幸い時間だけはいくらでもあるので、
自分でガリガリとルーチンを書くのは可能なのですが…
なるべく車輪の再発明はしたくなかったので
このスレで質問させて貰った訳で、、、
0935デフォルトの名無しさん
2007/03/13(火) 20:30:410936デフォルトの名無しさん
2007/03/13(火) 20:38:360937デフォルトの名無しさん
2007/03/13(火) 20:39:290938デフォルトの名無しさん
2007/03/13(火) 20:55:48それを使わずに「車輪の再発明はしたくない」とな?
クソコテなら名乗ったことがあるよ。
0941デフォルトの名無しさん
2007/03/13(火) 21:12:49正規表現でコードの実行なんて出来たっけ?
0942デフォルトの名無しさん
2007/03/13(火) 21:27:22http://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html#a_bit_of_magic__executing_perl_code_in_a_regular_expression
http://www.kt.rim.or.jp/~kbk/perl-5.8/re.html
0943941
2007/03/13(火) 21:41:37どもっス。
perlre読みなおしてきますた。
これってpatternのほうを変数にしてもランタイムエラーになって実行はされないっすよね?
0944デフォルトの名無しさん
2007/03/13(火) 21:42:200945デフォルトの名無しさん
2007/03/13(火) 22:15:430946デフォルトの名無しさん
2007/03/13(火) 23:28:39>Text::Globも内部的に正規表現を使っているのでお断りします。
>>930
>理由は(?{〜〜})でコードを実行されたくない、
>正規表現のコンパイルエラーで止まる、等。
なんかおかしいよな。
Text::Globがコードを実行させる正規表現なんか使うのか?
Text::Globがコンパイルエラーを起す正規表現なんか使うのか?
0947デフォルトの名無しさん
2007/03/14(水) 00:20:270948906
2007/03/14(水) 10:25:23正規表現使ったら1分で書けますよ、そんなもの。
0949デフォルトの名無しさん
2007/03/14(水) 10:51:54とりあえず、その1分で書ける正規表現の例を見せてよ。
それを見れば、具体的になにをしたいのか皆にわかるから。
0950906
2007/03/14(水) 10:55:56あれと同じで、ホスト名やらにワイルドカードを使い、評価したい訳です。
1分で書けるってのは、 * を .* に変えるやつです。
KENTがこの手法を使ってた覚えがあります。
0951デフォルトの名無しさん
2007/03/14(水) 11:01:29quotemeta相当のエスケープするように書くから正規表現使っても全く問題
ないわけですが... KENTとか引き合いに出すあたりどうみても釣りだし
しょうがないか。
0952デフォルトの名無しさん
2007/03/14(水) 11:27:27おめぇコテハン「正規表現は使わない」にしてこいよ。
そしたらちょっとは相手してやるよ。
0953デフォルトの名無しさん
2007/03/14(水) 12:17:04つーか、正規表現使わない理由がおかしいし。宿題厨はカエレ。
0954デフォルトの名無しさん
2007/03/14(水) 12:33:18> 理由は(?{〜〜})でコードを実行されたくない、
> 正規表現のコンパイルエラーで止まる、等。
これらは、モジュールを使えば解決する事。
希望通り、任意のコードが実行されるような脆弱性もなくて、エラーでもとまらなければ
実装に正規表現が使われていようがいまいが関係ないじゃん。
車輪の再発明を避けようとして、車輪を使うのをためらってどうする。
0955デフォルトの名無しさん
2007/03/14(水) 12:44:07え?、変換後もワイルドカード文字が残ってるの?
0956デフォルトの名無しさん
2007/03/14(水) 12:47:41* -> [^/]* かな。
0957デフォルトの名無しさん
2007/03/14(水) 12:55:480958906
2007/03/14(水) 14:52:02宿題?学校も行ってないのに、
誰が宿題出すんですか?逆に聞きたいよw
>>951 >>954
正規表現は使わないって
何回言えば理解出来るの?メクラですか?
0959デフォルトの名無しさん
2007/03/14(水) 15:31:480960906
2007/03/14(水) 15:48:100961906
2007/03/14(水) 16:00:23つまり俺は日本のために必死に頑張っているのであり
お前等の運命は俺に委ねられているんだよ。
わかったらとっとと俺を導け。
0962デフォルトの名無しさん
2007/03/14(水) 16:03:28正規表現が難しくて分からない って正直に言っちゃえよ。
0963デフォルトの名無しさん
2007/03/14(水) 16:24:590964906
2007/03/14(水) 16:25:49こんなところで訊いた私が莫迦でした。
二度と来ません。
0965デフォルトの名無しさん
2007/03/14(水) 16:44:390966デフォルトの名無しさん
2007/03/14(水) 16:58:38コンビニで立ち読みしてる906を目撃しようとは
>>962本人も今はまだ気付いていなかったのである。
0967デフォルトの名無しさん
2007/03/14(水) 17:01:21'*' の処理は再帰でいいよね?
0968デフォルトの名無しさん
2007/03/14(水) 17:13:52TreePPというライブラリを使ってます。
連想配列 $tree というのがあってこれにXMLを展開したものを入れてあります。
<top>
<elem>1</elem>
<elem>2</elem>
</top>
こんな感じで
$value = $tree->{top}-{elem}[0];
とアクセスしますよね
elemの個数は不確定です。
1個の時に添え字を使うとperlがエラー起こします。
何個あるかどうかを調べるにはどうしたらいいのですか?
0969デフォルトの名無しさん
2007/03/14(水) 17:22:50scalar $tree->{top}->{elem};
あたりじゃないか?
0970デフォルトの名無しさん
2007/03/14(水) 17:34:590971デフォルトの名無しさん
2007/03/14(水) 17:36:59Perlで正規表現が使えないのは特殊なケースだと思いますので,
お探しのようなモジュールは絶対とは言い切れませんが,おそらくないと思います。
私は作れませんが,とても興味がありますので,
作られたら是非見せてください。
0972デフォルトの名無しさん
2007/03/14(水) 17:37:30ヒ、ョ、・/b>
こんな感じに化けちゃっててシフトJISにまともにエンコできない
どうやって対処すればいいんだい?
0973デフォルトの名無しさん
2007/03/14(水) 17:42:32主にsjis以外で使われる文字コードはUTF8の場合が多い
jcode.pl pmはたぶんこのコード変換が出来ない
取得するページが固定ならperlソースのコードをUTF8に合わせてそのまま出力するのが一番簡単
どうしてもsjisに統一したければutf8用のライブラリがあるよ
0974967
2007/03/14(水) 17:46:38sub simple_fnmatch {
my ($pattern, $string) = @_;
my $p = 0;
my $s = 0;
while ($p < length($pattern)) {
my $char = substr($pattern, $p++, 1);
if ($char eq '?') {
} elsif ($char eq '*') {
$p++ while (substr($pattern, $p, 1) eq '*');
for my $pos ($s..length($string)) {
return 1 if fnmatch(substr($pattern, $p), substr($string, $pos));
}
return 0;
} else {
return 0 if $char ne substr($string, $s, 1);
}
$s++;
}
return $s == length($string) ? 1 : 0;
}
0975デフォルトの名無しさん
2007/03/14(水) 17:47:15使ったことないんだが
単数のとき、 $value = $tree->{top}->{elem};
複数のとき、 $value = $tree->{top}->{elem}->[0];
だよな?とすれば、
単数のとき、 ref($tree->{top}->{elem}) eq "HASH"
複数のとき、ref($tree->{top}->{elem}) eq "ARRAY" / $count = @{$tree->{top}->{elem}}
となるはず。
0976デフォルトの名無しさん
2007/03/14(水) 17:56:39一部できたけど
また問題がでました、elemが0の時はどうしたら?
0977デフォルトの名無しさん
2007/03/14(水) 18:08:37foreach $key(keys %{$tree->{top}}){
if($key eq "elem"){$havechild=1;last;}
}
これで出来たけどなんか長い
マイナス要素になる書き込みをするんですね。
ここのレベルも落ちましたね。残念です。
>>962
そこまで頭は悪くありません。
普段は普通に使っていますので。
0979デフォルトの名無しさん
2007/03/14(水) 18:55:280980デフォルトの名無しさん
2007/03/14(水) 19:26:200981デフォルトの名無しさん
2007/03/14(水) 20:10:25入力が何で出力が何したいのか書けば、
天才の俺が教えてやっても良い。
0982デフォルトの名無しさん
2007/03/14(水) 20:17:14マンドクセーからちゃんと読んでないが、fnmatch()の真似をしたいのなら
パスのセパレータ('/')は意識しないとだめだろう。
0984デフォルトの名無しさん
2007/03/14(水) 20:21:16とりあえずめんどくさいので ? (任意の一文字) と * (任意の文字列) だけ実装してみました。
関数名が良くなかったですね。
0985デフォルトの名無しさん
2007/03/14(水) 20:22:57> あれと同じで、ホスト名やらにワイルドカードを使い、評価したい訳です。
なんていうからこんな仕様になったんですけどね。
0986デフォルトの名無しさん
2007/03/14(水) 20:23:18おかげ様で完成です
よかったら使って下さい
0987デフォルトの名無しさん
2007/03/14(水) 20:55:520988デフォルトの名無しさん
2007/03/14(水) 21:10:430989デフォルトの名無しさん
2007/03/14(水) 21:53:53refが空文字を返してるんじゃないか?
そこまでは実装がどうなってるのか見てみないことには分からんが。
0990デフォルトの名無しさん
2007/03/14(水) 22:56:51つ http://pc11.2ch.net/test/read.cgi/tech/1173880452/
# >988
# RTFM
0991デフォルトの名無しさん
2007/03/15(木) 00:48:00もう解決したかもしれんが、XML::TreePPならnewの時に
$obj = XML::TreePP->new( force_array => [ "elem" ] );
…とすれば、1個の時でも添え字を使える。
0992デフォルトの名無しさん
2007/03/15(木) 21:22:510993デフォルトの名無しさん
2007/03/16(金) 07:01:160994デフォルトの名無しさん
2007/03/16(金) 08:37:420995デフォルトの名無しさん
2007/03/16(金) 09:46:55清
の
び
こ
ろ
よ
0996デフォルトの名無しさん
2007/03/16(金) 10:44:07どこを縦読みすれば?
0997デフォルトの名無しさん
2007/03/16(金) 11:23:270998デフォルトの名無しさん
2007/03/16(金) 11:45:110999デフォルトの名無しさん
2007/03/16(金) 11:46:231000デフォルトの名無しさん
2007/03/16(金) 11:47:11人 ││ ●\ ●\
ノ二\ ナ ゝゝ V ●●● ●\ ●\
/ / 乙 つ O ●\ ●\ ●\ ●\
●●● ●\ ●\ ●\ ●\
●\ ●\ ●\ ●\ ●\ ●\
●●\ ●\ ●\ ●\ ●\ ●\ ●\
●\ ●\ ●\ ●\ ●\ ●\ ●\
●\ ●\ ●\ ●\ ●\ ●\ ●\
●\ ●\ ●\ ●\ ●\ ●\ ●\
●\ ●\ ●\ ●\ ●\ ●●● \
●\ ●\ ●\ ●\ ●\ \\\
●\ ●\ ●\ ●●● \
●\ ●\ ●\ \\\
●\ ●●● \ ┌┐ ┌┐
●\ \\\ ┣━┳┃┃ ┃ ││ ││
●●●\ ┃ ┃┃┃ ┣┓ ━╋ ━╋ V V
\\\\ ┛ ━┛ ┃ ┏┫ ┏┫ O O
(´´
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。