Perlについての質問箱 11箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGPerlについての質問箱です
"There's more than one way to do it"ということで
ぱぁるの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc5.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするので
WEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
姉妹スレッド
http://pc5.2ch.net/test/read.cgi/php/1089779036/
過去ログは>>2-1001あたり
0002デフォルトの名無しさん
NGNG2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc2.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc2.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/l50
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/l50
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/l50
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/l50
0003デフォルトの名無しさん
NGNGPerlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/
[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/
[オンラインマニュアル]
Perldoc.com: http://www.perldoc.com/
perldoc.jp: http://www.perldoc.jp/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/
[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
0004デフォルトの名無しさん
NGNGスレ立て乙。
そしてPerlスレ11箱達成おめ。
0005デフォルトの名無しさん
NGNG( ´∀`) < Parrot
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGWindows版のwgetがあったと思うので、それをsystemを使って呼ぶ。
0008デフォルトの名無しさん
NGNG出力させたいのですが、うまくいきません。
二次元連想配列を %data として、以下のような感じに書いています。
foreach $value (sort {ソート条件} values(%data)) {
〜;
}
ここでソート条件の部分で$a、$bを調べると、ハッシュに
なっているので、ソート条件を
%$a{'aaa'} <=> %$b{'aaa'}
のように書くことでうまくいくのではないかなと思ったのですが、
エラーになってしまいます。
どのように書けばよいのでしょうか。
環境は Windows2000、ActivePerl 5.6.1 です。
よろしくお願いします。
0009デフォルトの名無しさん
NGNGすいません。書き込んだ直後に自己解決しました。
%$a{'aaa'} ではなくて、$$a{'aaa'} でした。
0010デフォルトの名無しさん
NGNGNet::FTP 使え
0011デフォルトの名無しさん
NGNGNet:FTP使ってみました。
------
use Net::FTP;
my $ftp = Net::FTP->new($server, Debug => 1);
$ftp->login($user, $pass);
$ftp->cwd($dir);
$ftp->get($file);
$ftp->quit;
------
こんな感じで使ってみると、指定ディレクトリ($dir)以下にある指定ファイル($file)はダウンロードできましたが、
これだと、指定ファイルのみダウンロードになってしまいます。
どーにかして指定ディレクトリ毎落とすことはできないのでしょうか?
0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNGそこまでわかってたらあとはファイルのリストをとって
ぐるぐるループすりゃいいだけだろ。
0014デフォルトの名無しさん
NGNGどーすればファイルのリストをとれるのでしょうか?
0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNGマニュアル読まずにどうやって >>11 のコード書いたの?
0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNG開発環境は知らんがフレームワークなら http://sl.edge.jp/
それと Web 系の話題は WebPlog 板へ。
0024デフォルトの名無しさん
NGNGmy(*x1, *x2) = @_;
}
ってダメなの?
0025デフォルトの名無しさん
NGNGどちらが普通?
0026デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html#When_to_Still_Use_local_
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_dy
>>25
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNGえ?どうしてですか?
0029デフォルトの名無しさん
NGNG何故?
0030デフォルトの名無しさん
NGNG以下のような感じでやってもうまくできません.
open FILE, "+>$filename";
@array = <FILE>;
foreach $tmp (@array){
処理
}
print FILE @array;
close FILE;
@arrayをプリントしてみたところ配列にファイルの内容が読み込まれてないようです.
0031デフォルトの名無しさん
NGNGopen FILE, "$filename";
0032デフォルトの名無しさん
NGNGopen( FILE, "+>$filename" ) or die $!;
と、してみたら?
0034デフォルトの名無しさん
NGNGこりゃ楽だわ。
0035デフォルトの名無しさん
NGNGレスありがとうございます.
できませんでしたorz
31さんの方ですと$arrayに読み込むことができるのですが
ファイルに書き込み(上書き)することができませんでした.
32さんの方では30の時と結果変わらずでした.
ちなみにこんな感じでテストプログラム作りました.
$filename = "test.txt";
$tmp = "hoge\n";
open (FILE,"+>$filename")or die $!;
@array = <FILE>;
push @array,$tmp;
print FILE @array;
close FILE;
0036デフォルトの名無しさん
NGNGttp://www.ken3.org/cgi-bin/group/vba_ie.asp
上記のページを参考に、Windows上でIEを操作して業務アプリ用の
フォーム自動入力をやらせようとしてます。
ところが、中にいちいちJavascriptで確認を求めるポップアップが
出てくるページがあり、対応に苦慮しています。
アプリのほかの部分で使っているため、
IEの初期設定でJavascriptを切る方法は使えません。
そこで下記のようなアプローチをしていますが、うまく行きません。
お知恵をお貸しくださいますでしょうか。
○ポップアップ機能「だけ」を殺す
http://msdn.microsoft.com/workshop/browser/webbrowser/reference/properties/silent.asp
○Win32::GuiTestでEnterキーを入力
(SendKeysでうまくいかなかった例)
--------------------------------------------------
use Win32::IE::Mechanize;
use Win32::GuiTest qw(SendKeys);
my $ie = Win32::IE::Mechanize->new( visible => 1 );
$ie->get('http://hoge.com/'); #ポップアップが出てくるページ
SendKeys("{ENTER}");
0037デフォルトの名無しさん
NGNGOSはUNIX系?それともWindows系?
後者はopenに失敗することがあるような。
0038デフォルトの名無しさん
NGNGwindowsでactive perl5.8使ってます。
0039デフォルトの名無しさん
NGNGうろ覚えだがwindows(NT)+ActivePerl(バージョン失念)のとき
+>$filename
ではopen出来なかったような・・・
0040デフォルトの名無しさん
NGNGソウナノカー(;´Д`)
ありがとうございました.
別の方法でやってみます.
0041デフォルトの名無しさん
NGNG必要ですか?
0042デフォルトの名無しさん
NGNGCGI?スレ違いだよ。
でもおそらくCGIとも関係ないです。
実装するアルゴリズムを自分のなかで整理してから、
どーすれば安全なようになるのか考えて下さい。
0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNGいや、あなたには聞いてないんですが・・・
0045デフォルトの名無しさん
NGNG+>は読み書きできるようにopenするが、まず最初に>と同様
ファイルを空にするので何も読めないのは当たり前。
+<を使い、適切にseekやtruncateする必要もあるだろう。
0046デフォルトの名無しさん
NGNGわざわざスレ違いをおしてまで答えたのになんだそりゃ。
まぁ二つも回答が書いてあるんだからもう二度とくんなよ。
0047デフォルトの名無しさん
NGNGいやいや、あなたには聞いてないというだけで、
他の人には聞いてました。
0048デフォルトの名無しさん
NGNG末尾の改行を削除するために、以下のように
書いたのですが、えらく時間がかかります。
while ($line = <IN>) {
$line =~ s/[\r\n]*$//;
}
もっと高速な書き方はあるでしょうか?
0049デフォルトの名無しさん
NGNGchompは?
0050デフォルトの名無しさん
NGNGすいません。昨日実験したときchompでも変わらなかった
気がしたのですが、今やってみたらえらく速く
なりました。ありがとうございます。
0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGだからしたっつってんだろうがボケ!
0053デフォルトの名無しさん
NGNGchompでどう?
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNGついでだけどその記述、一行づつ読み取ってるのにその正規表現は無意味だにょ。
/(\r\n)$/ でいいような。
005655
NGNG0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG0060じゃあこうしよう
NGNG0061デフォルトの名無しさん
NGNGtr/\x0D\x0A//d
0062デフォルトの名無しさん
NGNG略して丸投げ
0063デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNG知ったかぶって答えるやつがいるからそうなるんだろうが。
0065デフォルトの名無しさん
NGNGここ最近と言っているんだから、少なくともこのスレッドでの質問全てでは。
0066デフォルトの名無しさん
NGNG実測した?
0067デフォルトの名無しさん
NGNGまったくもって意味不明ですね。
では、知ったかぶっているのではなく「実際に知っている」人が回答したら
どうなっていたというのでしょう? :-P
0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNGというか他の質問も私じゃないです。
0071デフォルトの名無しさん
NGNG読めば分かると思いますが?
0072デフォルトの名無しさん
NGNG質問がなきゃスレの意味がないし、答えたくなければスレを見なけりゃ
いいだけの話。
丸投げがあろうとなかろうと関係ないし、例のftpの質問への対応を
見れば度を越せば叱られるわけで、このまま普通にやってりゃ問題は
ない。
丸投げだ何だと書いた奴の目的は「質問スレに質問が来ないようにし
てスレを衰退させること」だろ。その手に乗るなよ。
0073デフォルトの名無しさん
NGNG言ってくる奴はいるんだよね。
逆にこんなとこに常駐してるヤツはそんな難しい質問には
答えられないんだから、今のくらいがちょうどいいんだよ。
0074デフォルトの名無しさん
NGNGあなた読解力ないですね ;-)
0075デフォルトの名無しさん
NGNG> どのレベルまで調べて質問したって、もっと調べろとか
> 言ってくる奴はいるんだよね。
だから何なのかが不明瞭ですね。
何かができないこと、あるいは何かをしでかすことに対する
言い訳とか予防線のたぐいですか?
0077デフォルトの名無しさん
NGNGそうだけど?何か?
0078デフォルトの名無しさん
NGNG職業プログラマだったらここには来ないよな。
情報系の大学生、高校生あたり?
0079デフォルトの名無しさん
NGNGuse POSIX;
use Fcntl qw/:flock/;
open my $fh, "+< $file" or die $!;
flock $fh, LOCK_EX;
my @data = <$fh>;
# @dataの内容を加工
truncate $fh, 0;
seek $fh, 0, SEEK_SET;
print $fh @data;
close $fh;
という方法だと、truncate〜printの間にシグナルなどで死んだ時に
データが消えてしまいます。(実際にありました。)
そこで次のように変えることで、自分では対処できたと思っているのですが、
何か見落としなどはありますでしょうか?(今のところ正常に動いてはいます。)
use File::Temp qw/tempfile/;
# use POSIX〜@dataの加工まで同じ
my ($tfh, $tfile) = tempfile(DIR=>$tmpdir);
print $tfh @data;
close $tfh;
rename $tfile=>$file;
close $fh;
0080デフォルトの名無しさん
NGNG環境にもよると思うけど、漏れの測ったところでは、これが速かった。
$line =~ s/\n\z//; $line =~ s/\r\z//;
0081デフォルトの名無しさん
NGNG# 別途ロックファイルを用意してロック
open LOCK, '>' . $lock_file or die $!;
flock LOCK, LOCK_EX;
{
# 適宜シグナルを書き換え
local $SIG{'TERM'} = 'IGNORE';
open OLD, '<' . $data_file or die $!;
open NEW, '>' . $temp_file or die $!;
# 加工と書き出し
my @data = <OLD>;
...
print NEW @data;
close NEW; # flush
close OLD;
rename $temp_file => $data_file or die $!;
}
close LOCK; # 解除
0082デフォルトの名無しさん
NGNG以下のようなときにだめになる。
Aがロックして処理開始。
Bが来る。flockで待たされる。
Aがロック解放。
Bがflock抜け処理開始。しかしロックされたのはrenameで消えた方のファイルだし、読みこみも更新前の内容。
Cが来る。新しいファイルにはロックかかってないのでそのままflock成功。
対策はロックファイル別に用意するに
俺も一票。
0083デフォルトの名無しさん
NGNGcron で動かしているのなら、 pid ファイルでも作って重複しないようにしなきゃかもですね。
svscan のほうが個人的には好きだけれども。
0085デフォルトの名無しさん
NGNGどなたか、解決法をご存じでしたら、教えて下さい。
■環境
Win2k SP4
AvtivePerl v5.6.1 build 633
GD v2.15
GDGraph v1.43
GDTextUtil v0.86
Jcode v0.87
008685
NGNGカレントディレクトリに HGRSKP.TTF をコピー済です。
use strict;
use Jcode;
use GD::Graph::bars;
my @labels = qw( under 10s 20s 30s 40s 50s 60s 70s over );
my @dataset = qw( 20 40 60 80 65 15 10 20 5 );
my @data = ( \@labels, \@dataset);
my $graph = GD::Graph::bars->new( 400, 300 );
$graph->set( title => jcode("にこにこ村の人口")->utf8,
y_label => jcode("人数")->utf8 );
GD::Text->font_path( "./" );
$graph->set_title_font( "HGRSKP", 14 );
$graph->set_legend_font( "HGRSKP", 8 );
$graph->set_x_axis_font( "HGRSKP", 8 );
$graph->set_x_label_font( "HGRSKP", 10 );
$graph->set_y_axis_font( "HGRSKP", 8 );
$graph->set_y_label_font( "HGRSKP", 8 );
my $image = $graph->plot( \@data );
open( OUT, "> graph.jpg") or die( "Cannot open file: graph.jpg" );
binmode OUT;
print OUT $image->jpeg();
close OUT;
0087デフォルトの名無しさん
NGNGPerlのバージョンを5.8.5にする。
0088デフォルトの名無しさん
NGNGどうもうまくいきません。
#------ test_pipe.pl
use IPC::Open2;
my ($WTR, $RDR);
my $pid = IPC::Open2::open2($RDR, $WTR, "./test_pipe2.pl");
while (<>) {
print $WTR $_;
my $line = <$RDR>;
print STDERR "$line";
}
#------ test_pipe2.pl
printf "%d\n", $_ + 10 while (<>);
データを送るたびにopenとcloseを繰り返すようにするとうまくいったのですが、
test_pipe2.plはいずれ起動に時間のかかるプログラムと入れ替えるので
一度だけのopenで済ませたいです。
どうすれば良いのでしょうか。
0089デフォルトの名無しさん
NGNG例えば
$number = 111111;
$writefile = "$number.txt";
とすると
$writefileが".txt11"となります。
また
$writefile = $number . '.txt'でも同じです。
どなた様がお分かりのかたおられるでしょか?
0090デフォルトの名無しさん
NGNGたぶんバッファリング問題によるよくあるデッドロックじゃないかと。
test_pipe2.plの最初で、$|=1すると改善するかもしれない。
009289
NGNGテキストファイルに
111111
という文字列があり
$number = <INPUTFILE>;
chomp($number);
$writefile = "$number.txt";
とすると
$writefileが".txt11"となります。
0093デフォルトの名無しさん
NGNG全然違うだろ
0094デフォルトの名無しさん
NGNG再現する最小のコードを貼ってみないかい?
0095デフォルトの名無しさん
NGNGprintしたときに2行が1行に上書きされているか、
だと思う
0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNG>>94
UNIX 系 OS 上で
#!/usr/local/bin/perl
my $num = "111111\x0D\x0A"; # CR/LF
chomp $num; # LF を削除
my $str = $num . '.txt'; # 111111\x0D.txt
print $str, "\n"; # .txt11
__END__
>>89
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Remove
0098デフォルトの名無しさん
NGNG強制的に0xFFFFFFFFになるのは仕様でしょうか…?
オーバーフローした分は切り捨てたいので
0xffffffffでandしてみたんですが、どうもうまくいきません。
$val1 = 0xC5943301
$val2 = 0x902F1AD0
$val3 = ($val1 + $val2) & 0xffffffff # 0x55C34DD1としたいのに…
この時、$val3は0xFFFFFFFFになってしまいます
0099デフォルトの名無しさん
NGNGありゃ、本当だ。どうしてそうなるかはオレもよくわからんが、
use integerすればお望みの結果になるようだ。
0100デフォルトの名無しさん
NGNGそ、そんなモジュールが・・・
Cみたいにlongとかが出来ないので四苦八苦してました_| ̄|○
おかげさまで出来るようになりました。有難うございます
0101デフォルトの名無しさん
NGNG処理系で異なるのかも知れませんが、この場合は乱数ジェネレーターが
32ビットで処理しているからだからだと思います。
これは2ちゃんねるのトリップを生成するプログラムを実行中に気づきました。
別に発見して嬉しいわけではなくて、周期性があっては困るので何とかしたいのです。
どうすればこの周期性を回避して乱数を発生させることが出来るのでしょうか?
0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNGそれはどうすればいいのでしょうか?
割り込み処理でもしない限り難しいと思うのですが・・・。
0104デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#Why_aren_t_my_random_numbers_ran
http://search.cpan.org/search?m=all&q=random&n=100
0106デフォルトの名無しさん
NGNGsrandを使うかライブラリを使うしかないんですね・・・。
それで試してみます。ありがとうございました。
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG10秒ごとにキャプってファイルに保存
キャプチャも画面全体ではなく、ある一部分のみキャプチャです
これを数回繰り返すものを考えています
DirectX使っていると思うのでどうすればいいのかわかりません
どなたかご教授お願いします m(_ _)m
0110デフォルトの名無しさん
NGNGperlでやる意味がわかりません。
0111デフォルトの名無しさん
NGNGあなたには聞いていません m(_ _)m
0112109
NGNGうは、あんた誰よ?
>>110
現在、フリーのキャプチャソフト使ってやっているのですが
キャプ後編集するという作業が面倒なので
自動化できないかな?と思った次第です
0113デフォルトの名無しさん
NGNG10秒ごとにキャプチャーソフトをsystemで呼ぶ。
0114デフォルトの名無しさん
NGNGloopを回す以外にスマートな方法は無いでしょうか?
魔法使いの皆様方、ご教示を。
0115デフォルトの名無しさん
NGNGmy @moto = 1..10;
my @kesitai = (1,3,5,7,9);
my @nokori;
my %check;
@check{@kesitai}=(1)x@kesitai;
@nokori = grep !$check{$_},@moto;
0116デフォルトの名無しさん
NGNGperlクックブックのサンプルだとloop回してるなぁ。
だが、十分スマートに思える。
0117109
NGNGただ単純に一定時間ごとにキャプするなら(全画面)
今使ってるソフトでもできます(^^;)
肝心な点は、編集を自動化することなんです
でそのためには画像キャプ→編集→ファイル保存
という流れを自動化する必要があるということなんです
編集する位置、大きさがまちまちなんで・・・
やっぱ手作業ですかね・・・?
0118デフォルトの名無しさん
NGNGどういった編集かわからんけど、
編集する位置と大きさが分かるのなら
imagemagick + perlmagickで出来そうだけど。
0120109
NGNGすみません。編集というよりトリミングです。
例えば、1024×768の画面をキャプチャしてから
開始位置10,10から20×15を抜き出す
というような処理を全て位置指定して一定時間ごとに
抜き出して保存したいだけです。形式はビットマップで。
一番いいのは先の例だと開始10,10から20×15の範囲を
キャプチャして保存というのが理想ですかね。
正直なところPerlよくわかりません。
なんかこれ用にexeをつくらないとダメとかならお手上げなのですが。
0121118
NGNGフルサイズでキャプってからトリミングのほうが簡単なような...
位置&サイズは画像毎に異なるのですか?それはどうすれば取得できる?
位置&サイズさえ取得できればそれほど難しくないような...
0122118
NGNGトリミング工程だけを自動化すればいいわけか...
なぜPerlをご指名なのか分からんけど、位置&サイズが全部同じなら
Imagemagickのconvertコマンドかmogrifyコマンドのcropオプションでなんとかなりそう。
0123デフォルトの名無しさん
NGNG絵柄を見ないと判断できないなら自動化は多分無理
キャプチャーソフトが外部から操作するAPIを持っていて
かつPerlがそのAPIへのインターフェースを持っていなければ
多分無理
JPGに保存してからImageMagickとかで処理するという手もある
0124デフォルトの名無しさん
NGNG一定間隔ってのが0.1秒とかだと話はかわりそうだな。
ついでにその記録時間が半永久でなく、HDDの容量が許せばマクロとかバッチ処理が可能なツール使ったりもできるな。
>正直なところPerlよくわかりません。
>なんかこれ用にexeをつくらないとダメとかならお手上げなのですが。
PerlでやるよりVBでキャプチャツール作る方が簡単かも。
0125109
NGNGググって来ます。皆さんありがとうございました。
0126デフォルトの名無しさん
NGNGuse Cwd;
$dir = getcwd;
としたのですが、パスの区切りが/になってしまいます。
私はwindowsなので\に変換したくて
ttp://www5a.biglobe.ne.jp/~n_rieko/perl/8.htm
等をお手本にさせていただきながら
$dir = ~s/\//\\/g;
としたのですが上手くいきません。
数字の羅列がでてしまいます。
う〜ん・・よろしければアドバイスお願いできないでしょうか。
0127デフォルトの名無しさん
NGNG0128126
NGNGありがとうございました!!!
0129名無し募集中。。。
NGNGいやだから
>開始位置10,10から20×15を抜き出す
>というような処理を全て位置指定して
この位置指定は何で決めるわけ?絵柄?その他の条件?
それ言ってくれないとPerlでできるできないは助言できんのだが
>>123の言うように絵柄でトリミング範囲が決まるならまず無理です
範囲が決まれば誰にでもできる程度
0130デフォルトの名無しさん
NGNG思うのは、俺だけですか?
Imagemagickでもいいけど、スクリプト書かなくちゃいけないでそ?
0131デフォルトの名無しさん
NGNGどこが悪いんでしょうか
$_[0] = s/[;`'\\"|*?~^()\[\]{}$]//g;
0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNGえ??・・・・
0134デフォルトの名無しさん
NGNGどういう結果を期待されているのか分からないため
答えれません
0135デフォルトの名無しさん
NGNGあいう;えお →あいうえお
あいう*えお →あいうえお
です・・・答えになってますでしょうか?
0136デフォルトの名無しさん
NGNG0137デフォルトの名無しさん
NGNGどういうわけか、=~ だめでした。スペースも空けてません
0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNGPerlスレ用のQ&A登録アプリをつくりました。 だれでも登録編集できます
スレで出た質問&解答をちょっと整形して登録していただけると嬉しいです
http://xxxyz.zive.net/~the2/mod-perl/thefaq/faq.cgi
0140デフォルトの名無しさん
NGNGレスポンスが速いですね。
mod_perlですか?
0141デフォルトの名無しさん
NGNGども。 mod_perlとmod_gzipです。
0142デフォルトの名無しさん
NGNGURLっぽい文字列抽出してリンクになってるといいなと思った。
perldoc.com参照してるやつとか。
0143デフォルトの名無しさん
NGNGできればカテゴリなんかも設定できるようにしてよ
あと内容の校正は誰が?
コピペ突っ込むだけなら無料レンタルけいじばんでもOKな気がw
0144デフォルトの名無しさん
NGNGOK
>>143
ひどいこと言うなー。
と、わかった。 カテゴリね。
まぁ、検索がついてるので、掲示板に貼り付けていくよりは良いという事で。
内容は各自。 荒らされても、一応バックアップは頻繁に取られてるので。
0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNG0147デフォルトの名無しさん
NGNGRSSキボン
0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNG0150デフォルトの名無しさん
NGNG0151デフォルトの名無しさん
NGNG--------------
open MAIL, "| /var/qmail/bin/sendmail -f $from_add -t $to_add";
print MAIL "From: $from_add\n";
print MAIL "Subject: ここが件名\n";
print MAIL "\n";
print MAIL "$mail_honbun";
close MAIL;
--------------
ここで$to_add(メールのあて先)に複数のメアドを
$to_add="test1\@xxxx.co.jp,test2\@xxxx.co.jp"
って形で指定すると上手くメールが飛びません。
どなたか指定の仕方を知っている方お願いします。
0152デフォルトの名無しさん
NGNG> open MAIL, "| /var/qmail/bin/sendmail -f $from_add -t $to_add";
|を前にもってくると入力になるんだけど。
0153152
NGNG0154デフォルトの名無しさん
NGNGPerl 関係ない。 man sendmail したか?
-t の場合は宛て先をヘッダから抽出するようになる。その $to_add の指定は間違い。
ヘッダに To: とか Cc: とか Bcc: とかで指定する。
0155デフォルトの名無しさん
NGNGhttp://qmail.jp/
文面が痛いが djb と大先生なんだから我慢しる(w
個人的には、qmail-inject 推奨。
>>152
てめぇマァヴだな? > (^_^;)
0156デフォルトの名無しさん
NGNGqmailのは知らんがsendmailは-tするとヘッダからもあて先を
取り出すけど、コマンドラインで指定したあて先も有効だったような。
他に気になるのは、「,」で区切ってることだな。普通は別々の
引数になるように空白で区切る。本家sendmailはそれでも適当に
よろしくやってくれますがqmailのはどうだろうか?
0157デフォルトの名無しさん
NGNG>>147
OK. RSS勉強してくるぜ
0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNGちゃんとメール送信できた。
(ちなみに $to_add="test1\@xxxx.co.jp , test2\@xxxx.co.jp" ってやると複数指定できた。)
でも何故か送られてきたメールのTo欄の内容が無い。一切無い。
これは何ゆえ? そういう仕様なのか?
0160デフォルトの名無しさん
NGNGそういう仕様です。自分で To 欄出力してください。
0161デフォルトの名無しさん
NGNG「,」宛にもメール出されてないか?
0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG直接起動された場合を区別する方法はありますでしょうか?
ActivePerlの5.8を使っています。
0166デフォルトの名無しさん
NGNGif (-t) {} else {} は無理?
0167デフォルトの名無しさん
NGNGレスありがとうございます。
試してみたところ、どちらの場合も -t が真となってしまいました。
0168デフォルトの名無しさん
NGNGあー、すまん。requireしている方もコマンドラインから起動してたら真になってしまうな。
俺にはわかんねーや。
ところでrequireされる方を起動して何が起きるの?やりたいことがよく分からんが。
普通1返して終わりじゃない?
0169デフォルトの名無しさん
NGNG--- hoge.pl ---
require 'req.pl'
--- req.pl ---
if ($0 eq 'req.pl') {
print "direct"
} else {
print "required";
}
1;
0170デフォルトの名無しさん
NGNGこちらでも動きました。ありがとうございます。
やりたかったのは、単体としてもモジュールとしても使えるスクリプトです。
単体の場合はコマンドライン引数を用いて処理します。
0171デフォルトの名無しさん
NGNG> 単体の場合はコマンドライン引数を用いて処理します。
だったら @ARGV を調べればいいんでないの?
0172デフォルトの名無しさん
NGNGふつー if (__FILE__ eq $0) では?
0173デフォルトの名無しさん
NGNG$a = $list[0];
を1行で書きたいのですが、どうすればイイですか?
@list = grep {/hoge/} @list;$a = $list[0];
以外で・・・
0174デフォルトの名無しさん
NGNG0175デフォルトの名無しさん
NGNG>>174
@listの更新も入れたいなら
$a = (@list = grep {/hoge/} @list)[0];
か? 試してないけど。
0176デフォルトの名無しさん
NGNG174,175以外で
@list = grep {/hoge/} @list , $a = $list[0];
($a) = grep {/hoge/} @list;
0178デフォルトの名無しさん
NGNG正規表現でも無理やり一行で書いて、効率を犠牲にしてるのを見るけど。
0179デフォルトの名無しさん
NGNGあとこの場合は一行の方が見やすい気が?(たぶん。
>>173
@listん中には最初のヤツ入らないけど。
($a, @list) = grep {/hoge/} @list;
0180デフォルトの名無しさん
NGNG>>174さんを使わせていただきます。
0181デフォルトの名無しさん
NGNGsub test { foreach (@_) {return $_ if(/hoge/)} }
$a = &test (@list);
0182デフォルトの名無しさん
NGNGgrepよりforeachで回したほうが速いんですか?
0183デフォルトの名無しさん
NGNGベンチ取る癖を付けた方がいいぞ
モジュール使えば面倒でもないから
0184181
NGNGたとえば、@list = ("hoge", "geho", "foo", "bar"); のとき、
・ (grep {/hoge/} @list)[0]; の文字列照合回数は4回
・ &test(@list) の文字列照合回数は1回
と考えました。ベンチ取ってないけど。
0185デフォルトの名無しさん
NGNGuse Benchmark;
@list = qw(hoge geho foo baa);
timethese(undef, {
grep => sub {
$a = (grep {/hoge/} @list)[0];
},
test => sub {
$a = &test(@list);
},
});
sub test { foreach (@_) {return $_ if(/hoge/)} }
で、結果は、
grep: 2 wallclock secs ( 3.11 usr + 0.00 sys = 3.11 CPU) @ 125654.98/s (n=390787)
test: 4 wallclock secs ( 3.09 usr + 0.01 sys = 3.10 CPU) @ 297963.87/s (n=923688)
hogeが最初は不公平すぎるので最後にしてみたがそれでも
grep: 2 wallclock secs ( 3.10 usr + 0.00 sys = 3.10 CPU) @ 126060.32/s (n=390787)
test: 4 wallclock secs ( 3.19 usr + 0.00 sys = 3.19 CPU) @ 205490.60/s (n=655515)
0186デフォルトの名無しさん
NGNG追試。環境は ActivePerl Build810 (5.8.4)
#!/usr/local/bin/perl
use Benchmark;
our @list = qw(hoge fuga piyo foo bar baz);
sub t_l { /hoge/ && return $_ for @_ }
timethese(-5, {
g_b => sub { my $a = (grep {/hoge/} @list)[0] },
g_e => sub { my $a = (grep /hoge/, @list)[0] },
g_l => sub { my($a) = grep /hoge/, @list },
t_l => sub { my $a = t_l(@list) },
});
__END__
Benchmark: running g_b, g_e, g_l, t_l for at least 5 CPU seconds...
g_b: 6 wallclock secs ( 5.16 usr + 0.00 sys = 5.16 CPU) @ 49723.26/s (n=256572)
g_e: 5 wallclock secs ( 5.32 usr + 0.00 sys = 5.32 CPU) @ 193839.10/s (n=1031224)
g_l: 5 wallclock secs ( 5.11 usr + 0.00 sys = 5.11 CPU) @ 199724.07/s (n=1020590)
t_l: 5 wallclock secs ( 5.33 usr + 0.00 sys = 5.33 CPU) @ 193475.42/s (n=1031224)
0187デフォルトの名無しさん
NGNGということで、こんなのも。
use List::Util qw/first/;
my $a = first {/hoge/} @list;
※要Perl5.8
0188デフォルトの名無しさん
NGNGgrepの条件をblockにしてるから遅くなってたのか。
1つの式ですむならblockにしてはいかんということだな。勉強になった。
0189名無しさん@Vim%Chalice
NGNGnouhinsho.plのプログラムで使っているデータファイル
nouhinsho.datのデータを書き換えて
LANケーブル 0.5m アイボリー 5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
な感じにすると"aaa..."の部分が折り返されません。
LANケーブル 0.5m アイボリー 5 ああああああああああああああああああああああああああああああ
"あああ..."だったら折り返されます
"aaa..."な方でも折り返しにする設定はどうすればよいのでしょうか?
0190デフォルトの名無しさん
NGNG解説サイトをご存知の方いらっしゃいませんか?
0191デフォルトの名無しさん
NGNGperlcc, perl2exe, parとかがある
0192デフォルトの名無しさん
NGNGPerl "で" コンパイラを作った人じゃないの?
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNG0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNG自己満足以外なんにもならないね。
0199デフォルトの名無しさん
NGNGすいません
"おまいらには"
が抜けてましたw
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNGそんな事は無いと思うけど。
インタプリタ言語でコンパイラを作るって事は、昔のパソコン雑誌では
普通に連載されていたよ。
BASICでコンパイラ言語を、記述。
そのコンパイラのソースを、BASICインタプリタでコンパイル。
出来たコンパイラで、そのコンパイラ(のソース)を、機能拡張する。
そのソースを、コンパイラでコンパイル。
でまた機能拡張、またコンパイルまた機能拡張またコンパイル
きりねー。と。WICSなんかそうだったな。
0202デフォルトの名無しさん
NGNG言語のコンパイルとは限らないからね。
コンパイルは要はファイル変換。小規模なものなら
Perlでも十分できると思う。
>>190
字句解析や逆ポーランド記法等の一般的な知識が
使えると思うので、
その手の勉強をしてみれば?
0203デフォルトの名無しさん
NGNG$script = <STDIN>;
eval($script);
exit(0);
インタプリタができたYO!あとは標準入出力で(ry
0204デフォルトの名無しさん
NGNGそれを作ったやつや使ってるやつを探せばいいんじゃないかな。
0205デフォルトの名無しさん
NGNGバッチファイルでインタープリタが出来ますた。
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNG0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNG0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG速度だってそんなに遅くないし。
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNG0215デフォルトの名無しさん
NGNGpack や unpack あたりでできそう。
でも、たしかに Perl ばかりやってるとバイナリの処理が
苦手になるかも…。
0216デフォルトの名無しさん
NGNG0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNG「なんでExcelのマクロにPerlが使えないんだyp!」と発狂してみたり。
0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNGATOK用perl機能追加プラグイン
ttp://www.hirax.net/diaryweb/2004/04/09.html#200404092
なんてのもある
ATOK入ってないんで私は使えませんがね・・・
0223デフォルトの名無しさん
NGNGつか、どんなときにつかうの?
0224デフォルトの名無しさん
NGNGCなら構造体を作るだろうなってときに使う。
0225デフォルトの名無しさん
NGNGCGIでURLエンコード・デコードとかに使う。
%82%CA%82%E9%82%DB
みたいなの
0226デフォルトの名無しさん
NGNGシリアライズ・デシリアライズ
0227デフォルトの名無しさん
NGNGカレーライス・ハヤシライス
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNGインタプリタをカーネルに組み込んで、
モジュールをPerlで書けるようにするとか?
0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNG昔のえらい人たちは Perl をハックして JPerl を作った
みんな感謝して使っていた
0233デフォルトの名無しさん
NGNG「折り返し」って? foldingのこと? アルファベットは空白文字が来ないと
発生しないよーな希ガス。
0234デフォルトの名無しさん
NGNGじゃあ君のために KusoPerl っていうの作ってあげるから
感謝して使ってくれ。
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNGもっとカルシウム取れよ。
0237デフォルトの名無しさん
NGNG今日の宿題は終わったのか?
おやつ食べて大好きなプールにでも行ってきたらどうだ?
0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNGhttp://japan.linux.com/desktop/04/07/27/1436242.shtml?topic=1
0241デフォルトの名無しさん
NGNGそんなに待てるか!
俺、死んじゃってるかもしれないじゃないか!
0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNG(JavaとかC++のprivateメソッドっぽいのを作りたい)
0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNGえー?
0249黒死犬 ◆EgxBlf8nvc
NGNGreturn $$**$$;
}
しかし、そのうち my sub って書ける様になるらしい
0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNG0253デフォルトの名無しさん
NGNG$$**$$ってパッと見ただのデタラメに見えるが
$$はプロセスID,**はべき乗演算子なので正しい
式なのか...
0254デフォルトの名無しさん
NGNGというハッシュがあるんですが、これを数値の降順にソートして、
値が大きい方からいくつかの要素、というかキーの文字列を取り出したいんですが、
どうするのがかしこい方法でしょうか。
数値がユニークなら、キーと値を入れ替えて、keys %hogeをsortでソート
すればいいのでしょうけど…。
0255デフォルトの名無しさん
NGNG0256デフォルトの名無しさん
NGNGとりあえず正攻法で。
my @ranking = sort { $hoge{$a} <=> $hoge{$b} } (keys %hoge);
0257デフォルトの名無しさん
NGNG前川君とやらが誰かは知らないが粘着はやめれ。
0258デフォルトの名無しさん
NGNG問題の意味がわかってない馬鹿
0259デフォルトの名無しさん
NGNGありゃ、間違い?どういう問題だったの?
0260デフォルトの名無しさん
NGNG2回名前が出ただけで・・・・・・
前川くん、必死だな
0261デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNGman perlstyleによると、名前が"_"で始まるサブルーチンは
パッケージ外部から呼ばない約束にしています。
実際には公開されているけれど、コーディング時のマナーで対処すると
いうことだと解釈してます。
0263デフォルトの名無しさん
NGNG>>256 であってると思うが
0264デフォルトの名無しさん
NGNGおれも合ってると思うが、降順にするなら$aと$bは逆だな
0265デフォルトの名無しさん
NGNGがーん。スマソ、逆だったか・・・_| ̄|○
0266デフォルトの名無しさん
NGNGむしろ>>258が「問題の意味がわかっていない」我々に、正しい問題の
意味と解答を見せ付けてくれることを希望。
ソート順程度のケアレスミスを「問題の意味がわかっていない」など
と大袈裟な表現をして悦に入るような馬鹿ではないだろうから、きっ
と我々を仰天させ、沈黙させるような素晴らしい「かしこい方法」を
示してくれるに違いない。
0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNG俺もそう思う
0270デフォルトの名無しさん
NGNG派生クラスでオーバーライドするのはあり?
CGI::Session::Authはそれやらないとだめなんだが。sub _login {}
0271デフォルトの名無しさん
NGNGprotectedメソッドたと思えばいいじゃない。
0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNGうん
0274デフォルトの名無しさん
NGNGかなりね
っていうか無理にPerlでOOPしても嬉しくないから
そういうときはRuby使う
0275デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNGhttp://idol.bbspink.com/test/read.cgi/ascii2d/1073747234/
0277デフォルトの名無しさん
NGNG0278デフォルトの名無しさん
NGNG>
#!/usr/bin/perl
print<<HTML_DOCUMENT;
content-type: text/html
<html>
<body>
こんにちは<br>
私の名前は藤森水絵です<br>
</body>
</html>
HTML_COCUMENT
をコンパイルすると必ず
>C:\httpd\cgi-bin>perl 52.pl
Can't find string terminator "HTML_DOCUMENT" anywhere before EOF at 52.pl line 3.
というエラーが出てきます。
どうしたらよいのでしょうか?
解決方法知っている方教えてください。
0279デフォルトの名無しさん
NGNG下らんことで他人の手を煩わすな。
0280デフォルトの名無しさん
NGNGエラーメッセージが指定する行数に間違いが見つからなかったら
その前後の行と、関連する事柄などをチェックすること。
もうね、ソースの一番最後の行でおじさんがっくり来ちゃったよ。
0281デフォルトの名無しさん
NGNG終端文字列「HTML_DOCUMENT」がファイル終端以前の何処にもありません。(52.pl 3行目)
読め
0282デフォルトの名無しさん
NGNG0283デフォルトの名無しさん
NGNGPerlの前に、少し英語を勉強するといいかも。
0285デフォルトの名無しさん
NGNG以下のやり方より、もっと効率的な書き方はないでしょうか?
my($a,$b,$c);
$a=$b=$c=0;
0286デフォルトの名無しさん
NGNGmy($a,$b,$c) = (0, 0, 0);
my($a,$b,$c) = (0) x 3;
tu-ka、初期値がどうしても必要になるところとか、無駄に変数宣言していることを改訂してみるとか。。。
0287デフォルトの名無しさん
NGNG整数の宣言のつもりで0を入れてたんですが、要らないんですねorz
一部初期値が必要なところがあるんで、(0) x 3 を活用できそうです。
ありがとうございました。
0288デフォルトの名無しさん
NGNG最初から0が入っている気がs(ry
0289デフォルトの名無しさん
NGNGキショ
0290デフォルトの名無しさん
NGNGmy $a; で $a の値は undef 。undef は数値として評価すれば
0 だが文字列として評価すれば空文字列なので、陽に 0 を
入れておかなければ以下のような場合に困る。
my($a, $b, $c);
print join '|', $a, $b, $c, "\n"; # |||
文字列としての 0 が必要になった段階で、
# 数値コンテキストにおけば値は undef のまま "0" を得られる。
print join '|', $a, $a + 0, "$a\n"; # |0|
# 0 を足したり、代入してしまえば以後も "0" として扱える。
$b += 0; $c ||= 0;
print join '|', $a, $b, $c, "\n"; # |0|0|
0291デフォルトの名無しさん
NGNG0292デフォルトの名無しさん
NGNGまずは藻前が答えれ
0293デフォルトの名無しさん
NGNGperlならまだまだいるのでは?もともとワンライナーで
バーっと書くのに都合がいいツールでもあるし。
0294デフォルトの名無しさん
NGNGOpen Perl IDE
0295デフォルトの名無しさん
NGNGPerl/Tkについて質問です。
メインウィンドウ全体に背景画像を貼り付けたいのですが、オライリーの「入門Perl/Tk」を読んでも
やり方がわかりません。
ぐぐっても、見つかりません。
フレームを使ってもイメージはサポートしていないようですし。
ご存知の方、サンプルソースもしくはURIを貼ってもらえると助かります。
板違いだったら、誘導をお願いします。
0296デフォルトの名無しさん
NGNGオレはPhantom
0297デフォルトの名無しさん
NGNGvi で何の問題も無い。
0298デフォルトの名無しさん
NGNGWindows環境で使えるviってある?
0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNGしぃーっ! いまどき Perler ですだなんて恥ずかしいから隠しておいた方がいいよ。
0303デフォルトの名無しさん
NGNG↓
Ruby…スクリプト言語でOOしたい。
Python…シェルスクリプトとして使いたい。
PHP…WEB向けスクリプトが書きたい。
さようならPerl
0304デフォルトの名無しさん
NGNGその辺の事情はどうなの?>303
0305デフォルトの名無しさん
NGNGRuby,Python,PHP
↓
Perl6…スクリプト言語でOOしたい。
Perl6…シェルスクリプトとして使いたい。
Perl6…WEB向けスクリプトが書きたい。
0306デフォルトの名無しさん
NGNGもし LLW に行ってそこまで言えるとしたら頭がおかしいとしか言いようがない。
0307デフォルトの名無しさん
NGNGそれで十分だなぁ。
0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNGorz
0312デフォルトの名無しさん
NGNG0313デフォルトの名無しさん
NGNGcygwinとか。
0314デフォルトの名無しさん
NGNG普通にvimとか
ってか、viって何故好んで使うんだ。
絶対おかしいって。
オナニーとしか思えん。
0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNGさむ・・・
0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNG最近gvimを使ってみましたが多機能でした。perlソースをカラー表示したり。
ttp://pc5.2ch.net/test/read.cgi/unix/1086135625/
それ以前はこのjvimを使ってました。
ttp://www.vector.co.jp/soft/win95/writing/se041333.html
0319デフォルトの名無しさん
NGNGhttp://www.vector.co.jp/soft/win95/writing/se041333.html
0320デフォルトの名無しさん
NGNG見にくくて使いにくいと思わんか?
0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNGtypoは多少減ってると思う。
0323デフォルトの名無しさん
NGNG0324デフォルトの名無しさん
NGNG0325デフォルトの名無しさん
NGNG30言語以上定義を登録しているので今となっては手放せない。
0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNGマシン語しってりゃすべて事足りるのだが・・・
0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNG/\s+/
より速い書き方はありますか?
0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNG/[ \t\r\n\f]+/
だとえらく遅いね。
0334デフォルトの名無しさん
NGNG0335デフォルトの名無しさん
NGNGやろうとしていることと関係あるかもしれないネタを1つ。
ファイルから1行ずつ読み出して処理しようとしているなら
while (<IN>) {
@elem = split(/\s+/);
}
よりも
while ($line = <IN>) {
@elem = split(/\s+/, $line);
}
の方が圧倒的に速いです。理由はよく知りません。
0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNGそれは遅かったです。
0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNG0340デフォルトの名無しさん
NGNGあ、これ速いです。この場合って行末の改行って無視してくれます?
0341デフォルトの名無しさん
NGNG/\s+/
ならchompしなくていいよね。
chompして>338の案を採用したのとどっちが速いか
実測しないとダメでしょ。
0342デフォルトの名無しさん
NGNG0343デフォルトの名無しさん
NGNG0344デフォルトの名無しさん
NGNGやってみた。25000行くらいのTSVファイルを読み込み。
(1) chomp & /\t/
(2) /\s+/
10回試行の合計タイム
(1) ・・・
なんと4回試行して2勝2敗ww
0345デフォルトの名無しさん
NGNGちょっと待ってください。
0346デフォルトの名無しさん
NGNG10回分の合計タイム。
(1) chompなし、/\s+/→5.417 msec
(2) chompなし、/\s/→6.869 msec
(3) chompなし、/\s{1}/→7.28 msec
(4) chompなし、/[ \t\r\n\f]+/→7.31 msec
(5) chompあり、/\t+/→7.53 msec
(6) chompあり、/\t/→5.387 msec
こんな感じ。でも(1)と(6)はやる度に勝敗が変わる。
0347デフォルトの名無しさん
NGNG8.251 msec
正規表現よりも、こっちの方が効果絶大。
0348デフォルトの名無しさん
NGNG/\t/だけのときのタイムとか
0349デフォルトの名無しさん
NGNGオレ環境だと(6)が毎回速い。
0350デフォルトの名無しさん
NGNG空ループ→2.653 msec
/\t/だけ→5.277 msec
chompだけ→2.814 msec
こういうことかな?
0351デフォルトの名無しさん
NGNG0352デフォルトの名無しさん
NGNGchompの影響ってほとんど無いんだね。
0353デフォルトの名無しさん
NGNG@elem = split(/\t/, $line)
のところを
($a, $b, $c, $d, ・・・) = split(/\t/, $line);
とすると若干遅くなるね。
オレは知らず知らずのうちに最速コードを書いていたらしい。
0354デフォルトの名無しさん
NGNGホントかなーと思って私も実験してみたんですが、
速い順に
\t > \s+ > \s > \t+
ですね。\t には + が付くと遅くなるのに、\s には + が
付くと速くなるのはなぜなんでしょうか。
0355デフォルトの名無しさん
NGNG0356デフォルトの名無しさん
NGNG/\s+/ は split の第一引数のデフォルト値で、
このパターンは内部的に最適化されているから。
http://perldoc.com/perl5.8.4/pod/func/split.html
0357デフォルトの名無しさん
NGNGこの件だけど、細かく見ると、splitにかかる時間は変わらないんだけど、
@elemに代入する時間が圧倒的に違いますね。
0358デフォルトの名無しさん
NGNG代入するときに$_ の記憶領域を内部コードの中で再利用してるんじゃないの?
$_ が右辺値にくるようなリスト代入をやると$_ を使わない場合に比べて時間がかかるよ。
たぶん、リスト代入を行うときに$_ の記憶領域を テンポラリに使用していて
右辺値に$_ が記述(もしくは変数が省略)された場合、$_ の内容を破壊しないように
内部コードのテンポラリの代入操作の直前で$_ をスタックしているのかもね。
だから、代入する数が増大すると時間がかかる。
$_ が右辺値にこなければ、処理全体の直前に1回だけスタックするだけだから時間がかからないと。
そう考えると処理効率を考えた場合は、$_ は無闇につかわない方がいいね。
0359デフォルトの名無しさん
NGNGうーん、オレが今まで書いたPerlコード結構速くなりそうだな。
0360デフォルトの名無しさん
NGNGしていたが、下のほうが速いのか…
俺のコードも見直すと速くなりそうだ
0361デフォルトの名無しさん
NGNG@elem = split(/\s+/, $line);
}
while ($line = <IN>) {
@elem = split(/\s+/, $line);
}
どっちが速い?
0362デフォルトの名無しさん
NGNG下の方が早い。
上の方はループする度に$line 変数の記憶領域を毎回確保しなおすからそれがオーバーヘッドになる。
ただし、ファイルの入力処理のオーバーヘッドの方が十分でかいので無視しても問題ない。
ちなみに自分の環境で1千万行のデータを全て読込むことを想定した場合、上と下とで3秒の差がでてくる。
自分は上のコードをいつも書いているが、この3秒のためだけに下のコードに変えたくない。
0363デフォルトの名無しさん
NGNGwhile (<IN>)もwhile (my $line = <IN>)も同じ速さって事でしょ?
0364デフォルトの名無しさん
NGNGオーバーヘッドの場所が違う。
>>335の上は
while ($_ = <IN>) {
@elem = split(/\s+/,$_);
}
の省略型で
オーバーヘッドになっているのは
@elem = split(/\s+/,$_);
の部分
右辺値に$_ があるから@elemへのリストの代入個数が増えると
$_ のスタック回数も一緒に増えているみたいだと言っている。
while (<IN>) {
$line = $_;
@elem = split(/\s+/,$line);
}
とすれば>>335の下と実行速度はほとんど変らない。
0365デフォルトの名無しさん
NGNG124653215\t50\t20
みたいなデータがあった時(\tで桁合わせしてるTSV)
(5) chompあり、/\t+/→7.53 msec
(6) chompあり、/\t/→5.387 msec
はどちらも正しく分割できるの?
0366デフォルトの名無しさん
NGNG各行の最後の要素は捨てる、という裏技を考えたんだけど、
かえって遅くなってしまった。。。
split で分割される要素数も重要なのね。
不要なカラムがないかどうかとかチェックした方がいいかも。
0367デフォルトの名無しさん
NGNGそれはずれちゃうんじゃない?
0368デフォルトの名無しさん
NGNG省略はPerlの美学ってとこあるからなー。
それにしても、たかがタブ区切りファイルの処理で
やけに盛り上がってるね。
0369デフォルトの名無しさん
NGNGどう考えても$_と$lineの差なんかよりIOの方が遅いのにね。
0370デフォルトの名無しさん
NGNGその通りなんだけど配列へのリストのコピーはループ内で結構使うんで
右辺値に$_ があるだけで右辺値の個数に比例して時間が掛かるのはさすがに
無視できないなと思ったわけ。
0371デフォルトの名無しさん
NGNG普段は適当にやってもうまくいく。
ちゃんと考えたかったら、ちゃんと考える事も出来る。
この塩梅が俺は好きだ。
0372デフォルトの名無しさん
NGNGちなみにメモリの容量や、実行効率を考えなければ
こんなコードで2重配列にデータをセットできちゃうPerlがこよなく好きだ!
@elem = map{[split/\s+/]}<IN>;
0373デフォルトの名無しさん
NGNG別に<IN>と書いてある場所で毎回イオが発生しているわけではない。
0374デフォルトの名無しさん
NGNGバッファリングしてるもんね。
select IN;
$| = 1;
とかやっていたらバッファリングはしないけどね。
0375デフォルトの名無しさん
NGNGフルバッファリングするわけじゃないし。4KBくらいだろ
0376デフォルトの名無しさん
NGNGあ....、すまん、オレの書き方が悪かった。
>>374は、>>373を肯定していて、イオはデフォルトでバッファリングしているから
>>373なんだよっていいたかったわけで、バッファリングすれば大丈夫っていうことではない。
0377デフォルトの名無しさん
NGNG思わぬ速度ロスを招いていたというのは今日の収穫だった。
0378デフォルトの名無しさん
NGNGいろんなところで予想を裏切る結果だったから
0379デフォルトの名無しさん
NGNG私の素人質問(>331)が役に立ったようで何よりです。
0380デフォルトの名無しさん
NGNGお前総括しろよ
0382デフォルトの名無しさん
NGNG総括。終了。
0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNG爆発系全体攻撃呪文かと思いました
0387デフォルトの名無しさん
NGNG0388373
NGNG0389デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNG0393デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNG0400デフォルトの名無しさん
NGNGdefinedじゃムリだろ。
0401デフォルトの名無しさん
NGNG0402デフォルトの名無しさん
NGNGprint "Sub1は存在しま";
if(defined(&sub1)){ print "す"; } else { print "せん"; }
print "\nSub2は存在しま";
if(defined(&sub2)){ print "す"; } else { print "せん"; }
exit(0);
sub sub1{}
#sub sub2{}
0403デフォルトの名無しさん
NGNGprint "i can subhoge";
}
sub subhoge{ }
0404黒死犬 ◆EgxBlf8nvc
NGNGprint("I can", defined(&{"::sex"})? "": " not", " sex.\n");
sub sex {};
0405デフォルトの名無しさん
NGNG知らなかった・・・
0406デフォルトの名無しさん
NGNG普通はオブジェクトに適用するものだから。
構文糖的にインチキしてみた。
詳細は続初めてのPerlを読んでくれ、あれは良い本だ。
0407こうゆう事できますか?教えて下さい
NGNG自分のやりたい事って意外と
凶悪なのかもしれないのですが、可能な物なのか知りたくなりました。
良くPeal可ってありますよね?鯖屋さんの鯖上にpeal(LWP)自動巡回エンジンを使って
巡回代行させたいのです。リクエストすればzip圧縮してアーカイブして
DL可能とかstmpエンジン内臓させて、である程度の巡回内容の量になったら
zip圧縮してアーカイブしてメルアドに自動送信とか
させたいんですが。
これって可能でしょうか?似たようなサービスはありますが、
自分用に自由に定義して使い倒したいのですが
不可能でしょうか?
0408デフォルトの名無しさん
NGNG0409デフォルトの名無しさん
NGNG0410こうゆう事できますか?教えて下さい
NGNG可能ですか。
何分知識不足な物で。
0411こうゆう事できますか?教えて下さい
NGNG自鯖も頑張れば立てられるかもしれませんが(空PCは有りますが)
自宅鯖上ではなくレンタル鯖でやりたいと思ったのですが、可能でしょうか?。
鯖屋さんのグレードによるのかなぁとか考えてしまいますが、
一般的な無料では不可なのでしょうか?
0412デフォルトの名無しさん
NGNGまあここでそういうレベルの質問してるようじゃ
無理だろうな。もっと勉強しろ。
0413こうゆう事できますか?教えて下さい
NGNG0414デフォルトの名無しさん
NGNG0415デフォルトの名無しさん
NGNGっていうかおまえらエスパーかよ
>>407の日本語がさっぱり理解できん
(゚∠゚)ニホンゴムズカスィネー
0416デフォルトの名無しさん
NGNGレンタル鯖でも可能。
ネットへのアクセス(LWPやソケット)が使えるか、
簡単なスクリプト書いて試してみれ。
ただし、無料サバなら不可のところも多いのかも。
サバ屋の中の人の設定次第。
0417デフォルトの名無しさん
NGNG合わせてeffective perl買ってしまったのは(合計1万5千円程した)馬鹿ですか?
0418417
NGNG0419デフォルトの名無しさん
NGNG俺、8000円で悩んでいるのに。。。
0420417
NGNG0421デフォルトの名無しさん
NGNGプログラミング言語なら、どれ覚えても意味あるよ。
大切なのは言語によらない、普遍的な部分だからね。
ちなみにおれも、ラクダ本上下、クックブック持ってます。
買値以上の価値は絶対あるよ。
0422417
NGNG0424417
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNG同意。大事なのは文法の下にある思想やポリシー。
そのエッセンスが自分の考え方の幅を広げ、他の言語にも応用できるようになる。
perl6の新機能とobsolateされた機能を知りたかったならあちゃー・・・・って感じ。
0427デフォルトの名無しさん
NGNGというかオライリーのperl6本。(英語版は出てますが)
0428デフォルトの名無しさん
NGNG一応言っておくけど俺はアンチじゃないよ。Perlまんせ〜☆
0429デフォルトの名無しさん
NGNGヲタクに区別無し。
自分のことを棚に上げ相手をヲタク呼ばわりしているお前もまたヲタクなのです。
0430デフォルトの名無しさん
NGNG趣味で金を稼ぐことができる/浪費するの違いがありますが。
0431デフォルトの名無しさん
NGNGどちらもヲタです。徳の違いはあれどどちらが上下というモノは存在しません。
0432デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNG0434デフォルトの名無しさん
NGNGどちらにせよ尊敬することはあれど蔑むことは許されません。あなたもまたそうなのですから。
0435デフォルトの名無しさん
NGNG0437デフォルトの名無しさん
NGNG人の話聞けや。お前もヲタクで彼もヲタク。ただそれだけでお前に彼を笑う資格はない。
0438デフォルトの名無しさん
NGNG続・初めてのPerl も買え、まずはラクダ本よりもむしろそっちだ
0439デフォルトの名無しさん
NGNG0440デフォルトの名無しさん
NGNG今日は暇だからどこか行こうかな。
0441デフォルトの名無しさん
NGNG0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNG速度はどうなの?
0444デフォルトの名無しさん
NGNGマジで? 特殊変数はどうなるのさ。
0445デフォルトの名無しさん
NGNG> すべてのスカラー変数は「$」記号で識別され、「$」記号で識別されるのはスカラー変数だけである。
> さまざまな識別子(「$」、「@」、「%」など)を持つさまざまな変数をさまざまな方法で使うのではない。
> 新バージョンのPerlでは、事実上、使用可能なすべての特殊文字が使用されている。標準のASCII以外の、
> Unicodeの空間の文字も使用されている(これらの文字はキーワードで代用することも可能だ)。
0446デフォルトの名無しさん
NGNGで、最近気付いたんだが(ベンチマークで)
意外だったのが
横に長く構文を書くより、
適度に改行して書く方が動作速かった
0447デフォルトの名無しさん
NGNGもう全部Javaでいいじゃん!とか世界の中心で叫びたくなるな。
0448デフォルトの名無しさん
NGNGJava使いか?
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNG俺も前に調べたことあるけど、その時のベンチ結果はまったく生かされていない。
つーか、どちらが速いかすら忘れた。
他にもforで1万回printするのとprintを1万行並べるのはどちらが速いかといった
どうでもいいものを調べた事もあったなぁ。
0452デフォルトの名無しさん
NGNGかなり使いやすくて強力なんだよなぁ。
その辺りがJavaだと・・・。
0453デフォルトの名無しさん
NGNGregexアルから取りあえずは良いけどね。
無い言語なんて使ってられん。
方言は置いといて結局はクラス型のOOに収束するのが少々悲しい。
0454446
NGNGmy($hoge, $abc) = '';
my(@test) = ();
とかしたら劇的に速度速くなったぞ。いやマジおすすめ
0455デフォルトの名無しさん
NGNGuse strictとかcarpとかは、「劇的に」遅くなりますか?
おしえてケロ。
0456デフォルトの名無しさん
NGNGやっぱC++かJavaだね。
0457デフォルトの名無しさん
NGNGすんごくくだらない事なんだけど・・・
>my($hoge, $abc) = '';
この部分、リスト評価へスカラーで初期化するのはおかしい気がする。
my($hoge, $abc) = ();
こうじゃないかな。
別に間違いじゃないんだろうけど、
でもなんとなく他人のこういう所が気になる・・・
0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNGうーん、たぶん違う。
@hoge = "ほげ";
こんな事しても、$hoge[0]には代入されるけど、
それ以降の配列はnull
0460デフォルトの名無しさん
NGNG中の人に怒られた。MSの底力を感じた。
use Benchmark;
timethese(-1,{
'Carp' => sub {
my $pid = undef;
unless ($pid = fork) { eval 'use Carp;' }
waitpid $pid, 2;
},
'strict' => sub {
my $pid = undef;
unless ($pid = fork) { eval 'use strict;' }
waitpid $pid, 2;
},
});
0461デフォルトの名無しさん
NGNG0462デフォルトの名無しさん
NGNG〜処理〜
my($user, $system, $cuser, $csystem) = times;
print "\n",'--------------------',"\n";
print 'User : ',$user,"\n";
print 'System : ',$system,"\n";
print 'User(child) : ',$cuser,"\n";
print 'System(child): ',$csystem,"\n\n";
print 'Total : ',$user + $system + $cuser + $csystem,"\n";
print '--------------------',"\n";
exit;
0463デフォルトの名無しさん
NGNGつか、しょえるの外からtimeとかで計測しないと意味ないんでないの?
0464デフォルトの名無しさん
NGNGdefっていう文字列を含む行を削除するにはどんな構文を書けばいいんでしょうか。
初歩的ですみません。
0465デフォルトの名無しさん
NGNG0466デフォルトの名無しさん
NGNGperl -i.bak -ne "/def/ || print" C:\Perl\abc.txt
0467デフォルトの名無しさん
NGNGありがとうございました。
目的に合わせて改変してみます。
0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNGwindowsだが・・・
0470デフォルトの名無しさん
NGNG0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNG0473デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNG>>469のように勘違いするやつが出てくるからだろ。空気嫁
0475411
NGNGありがとうございました。
さっそく試してみます。
0476デフォルトの名無しさん
NGNG0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNGそれともppmにあるモジュールの話?
標準モジュールが足りないと思ったらppmで入れる。
ppmが足りないと思ったらcpanで入れる。
0479デフォルトの名無しさん
NGNGそれでも無ければ、自作。
0480デフォルトの名無しさん
NGNG0481デフォルトの名無しさん
NGNG厳密な意味で意図した初期化になってない。
null文字列で初期化したければ
my($hoge, $abc) = ('','');
未定義値で初期化したければ
my($hoge, $abc) = ();
もっともmyで新しいローカル変数を定義しているから
my($hoge, $abc);
でも未定義値で初期化される。
my($hoge, $abc) = '';
は
my($hoge, $abc) = ('');
と解釈され、$hogeがnull文字列、$abcが未定義値に初期化される。
よって defined の結果が違ってくる。
0482デフォルトの名無しさん
NGNGおお〜
ちょっと感動した
0483デフォルトの名無しさん
NGNG0484デフォルトの名無しさん
NGNG0485デフォルトの名無しさん
NGNG有効なキーかどうか判断するときに便利だよね。
@valid{qw"xyz abc ijk"}=();
if(exists $valid{$in}){
print "有効です\n";
}else{
print "無効です\n";
}
0486デフォルトの名無しさん
NGNG$hoge はスカラ
$hoge[$key] は配列の要素のリファレンス
$hoge[@key] は配列の要素のリファレンスのスライス
$hoge{$key} はハッシュの要素のリファレンス
$hoge{@key} はハッシュの要素のリファレンスのスライス
$hoge(@list) は関数のリファレンス
$hoge{$key} はハッシュの要素のリファレンス
@hoge は配列
@hoge[$key] は配列の要素
@hoge[@keys] は配列のスライス
%hoge はハッシュ
%hoge{$key} はハッシュの要素
%hoge{@keys}はハッシュのスライス
配列をスカラで評価すると配列のリファレンス
ハッシュをスカラで評価するとハッシュのリファレンス
配列のリファレンスを数値コンテキストで評価すると配列の要素数
ていうPerl6の初期仕様は破棄されたの?
0487デフォルトの名無しさん
NGNGDBD::Oracleを作成して利用したいのですが、どうすれば
よいのでしょうか?
スレ違いなら申し訳ありません。どこかふさわしいスレが
あるなら紹介していただけると助かります。
OS :Windows2000
Perl:ActivePerl 5.8
インストール済みOracleソフトウェア:Oracle Clients for Windows
使用したい状況:Apache2.0+mod_perlからSoralis上の
Oracleに接続したい
CPANからDBD-Oracle.tar.gzをダウンロードしてビルド
しようとしても、"ORACLE_HOMEが間違っている"とエラー
になってしまいます。
(レジストリから自動検索してC:\orantがORACLE_HOME
として認識されているようです。)
別の解決方法としてActivePerl 5.6にすれば、DBD::Oracle
は存在します。
しかし、mod_perl(Apache2.0用)がビルドできなくなってし
まいます。
0488デフォルトの名無しさん
NGNGMakefile.PL 適当に書き換えりゃイインジャネーノ
0489デフォルトの名無しさん
NGNG通常オブジェクトのメンバ変数にアクセスするには、アクセスメソッドを通して行いますが
少し疑問があります。
#######################################
Package Hoge;
sub new{
my $self = shift;
my $hashref = shift;
bless { hashref=>$hashref },$self;
}
sub hashref{
my $self =shift;
%{$self->{hashref}} = ( @_ ) if ($_[0]);
return $self->{hashref};
}
#######################################
Package main;
use Hoge;
my $test = { hoge=>1,hage=>2 };
my $obj = Hoge->new($test);
my $hashref = $obj->hashref();
###########################################
この状態でメインパッケージにの$hashrefに
$hashref->{$_} =~ s/.//g foreach keys %$hashref;
をやってしまうと、Hogeクラスのオブジェクトのプロパティにまで影響を与えてしまうんですが、
これはよくないことですよね?アクセスメソッドの返り血を、リファレンスにするのは禁止事項なのですか?
そういう記述がみつけられないんですが;エロイ人カコイイ回答をおながいします。
0490デフォルトの名無しさん
NGNG0491489
NGNG真面目です。実はPerl初めて2ヶ月くらいで、パソコン触り始めたのが4ヶ月前位なので
かなり初心者ですorz
アフォな質問なのかもしれませんが、どうかおながいします。
0492デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNG>my($hoge, $abc) = '';
>は
>my($hoge, $abc) = ('');
>と解釈され、$hogeがnull文字列、$abcが未定義値に初期化される。
言ってる事は正しいがこの部分はおかしいだろーと。
スカラーはスカラーで評価されるんだって。
なぜ配列(リスト)で評価されるんだよ。
挙動は同じだが評価のされ方は厳密には違うだろ。
0494デフォルトの名無しさん
NGNGうーん・・・
戻り値をリファレンスにするのはよくないとか、
そんなのないと思うけど。
好きにすればいいかと。
たとえば影響を与えたくない物はforeach文内でスキップするか、
hashrefメソッド内でうまく加工するか・・・
Perlのオブジェクトは厳格性に欠けるからなぁ〜・・・
0495デフォルトの名無しさん
NGNGうんそうだね。一応「評価」と書かずに「解釈」と書いたのだが、言葉たらずだね。
my($hoge, $abc) = '';
の初期化の意味の説明のために>>481を書いただけだから。
たしかに知らない人には誤解を与えるね。正直スマンかった。
正確には、配列、スライス及び、リストにスカラを代入すると
配列の先頭要素、スライスの先頭要素、リストの先頭変数にのみ
スカラの値が代入され、配列の要素数は、1になり、
スライスの残りの要素、または、リストの残りの変数には
未定義値がセットされる。
0496デフォルトの名無しさん
NGNG同じ?
0497デフォルトの名無しさん
NGNGリストは配列と違って要素の型が全て同じとは限らない。
0498デフォルトの名無しさん
NGNG@var = ('A', 'B', 'C');
@var = 'X';
print join(":",@var);
出力結果
X
スライスの場合
@var = ('A', 'B', 'C');
@var[0,1,2] = 'X';
print join(":",@var);
出力結果
X::
リストの場合
@var = ('A', 'B', 'C');
($var[0],$var[1],$var[2]) = 'X';
print join(":",@var);
出力結果
X::
配列とスカラの混合リストにリストを代入(1)
($var1,@var2) = ('A', 'B', 'C');
print join(":",$var1,@var2);
出力結果
A:B:C
配列とスカラの混合リストにリストを代入(2)
(@var2,$var1) = ('A', 'B', 'C');
print join(":",$var1,@var2);
出力結果
:A:B:C
0499デフォルトの名無しさん
NGNG>通常オブジェクトのメンバ変数にアクセスするには、アクセスメソッドを通して行いますが
と言っておきながら、
>$hashref->{$_} =~ s/.//g foreach keys %$hashref;
で思いっきりメンバ変数をダイレクトに操作している。
このアクセス方法を行う限り、リファレンスがどうのいうまえにOOPとして破綻する。
>>494が言っている通りPerlはオブジェクトに対する厳格性は求めていないので
実装する側がポリシーを持って、インターフェースを実装するしかない。
メンバ変数の内容を書き換えたくなかったらアクセスメソッドを作りなさいということ。
0500デフォルトの名無しさん
NGNG> my $test = { hoge=>1,hage=>2 };
で生成されたハッシュリファレンスをHogeオブジェクトに渡して、それを操作しているので
別Hogeオブジェクトを生成しても渡すハッシュリファレンスが同じものであれば
同じ内容を操作するわけだからオブジェクト間でいつでも値を壊してしまう恐れがある。
>bless { hashref=>$hashref },$self;
の部分を
bless { hashref=>{%$hashref}},$self;
とするだけで、コンストラクタで受け取った先の内容を気にする必要がなくなる。
ただ、>>489のやりたいことを理解していないので全然検討はずれのことを言っているかも。
0501デフォルトの名無しさん
NGNG0502489
NGNGアクセスメソッドはちゃんと通してますよ?
アクセスメソッドから得たものに置換処理しただけです。
>$hashref->{$_} =~ s/.//g foreach keys %$hashref;
通常直接いじるとは
$obj->{hashref}{$_} =~ a/.//g foreach keys %{$obj->{hashref}};
のようなことを言うんですが・・・・・勘違いされただけですよね?
>>500
なぜリファレンスにこだわったかというと、リファレンスはデリファレンスしない限り、
中身がどんなバイト数でも、処理時間に差は出ないですよね?まあPerlで処理効率とか速度とか言うな!って起こられそうですが;
やはり参照渡しはいいとしても、渡されたリファレンスを直接いじってそのまま返すようなことは
よくないですね。ありがとうございました。
とりあえずリファレンスは使い方を気をつけます。
0503デフォルトの名無しさん
NGNG0505デフォルトの名無しさん
NGNG全体のアルゴリズムがなってなかったりしがち
だから気をつけろよ
0506デフォルトの名無しさん
NGNGメソッドからの返りがリファレンス変数である限り、異なる名前空間の変数に影響を与えることに
なるよね。↓でもしない限り。
my %test = %{\($obj->hashref())};
でもこんなことしてたら返りをリファレンスにする意味ないよね?なんかおかしくないか?
それともオブジェクトのプロパティにあたる変数だけを守ってれば他は、リファレンス返しして
受け取った相手がそのリファレンスの中身を書き換えてもいいのか?
ん〜PERLならではの悩みなのかこれは?
0507デフォルトの名無しさん
NGNG>>489のアクセスメソッド
sub hashref{
my $self =shift;
%{$self->{hashref}} = ( @_ ) if ($_[0]);
return $self->{hashref};
}
を
sub hashref{
my $self =shift;
%{$self->{hashref}} = ( @_ ) if ($_[0]);
my $value = {%{$self->{hashref}};
return $value;
}
って書き換えてオブジェクトメンバだけ壊さなければいいんじゃん?
0508506
NGNGいいのかそれは?それじゃあオブジェクトメソッドのhashrefのローカル変数である
$valueの参照先が安全でないし、それならいっそ
sub hashref{
my $self =shift;
%{$self->{hashref}} = ( @_ ) if ($_[0]);
return %{$self->{hashref}};
}
でいいだろ。なんかリファレンス自体使うなって気がするが、DBIとかは普通にリファレンスで返して来るんだよな。
0509デフォルトの名無しさん
NGNG0510デフォルトの名無しさん
NGNG置換後の値もメモリーに入れるんだろ?
どこかでコピーするしかねーじゃん。
0511デフォルトの名無しさん
NGNGを、
04/Aug/17 18:09
のように出力したい場合、月の部分をいちいち
Jan, Feb, Mar.... と記述しないとダメですか?(y/n)
# $jikan = localtime(time);
# print $jikan;
# とすると、
# Wed Apr 10 18:09:21 2002
# と出力されるので、上記のような面倒なことをしなくて済みそうなんですが・・・
0512デフォルトの名無しさん
NGNGなら初めからリファレンス使うなよ。
>>509
メソッドやルーチンにはリファレンスで渡すな。返りもリファレンスにするな。
というのがこのスレの結論。
0513デフォルトの名無しさん
NGNGいろいろやり方はあるが、とりあえずPOSIXモジュールの
strftime使うのをお勧めしておく。
0514デフォルトの名無しさん
NGNGPerlで禁止されてることなど何1つないよ。
PerlはC++やJavaみたいに言語仕様でOOPを支援してくれる部分が少ないから、
489のような問題のあるコードは書かないように自分で気をつけるしかないわけ。
もちろん、それが必要なら別だけど。
まず、mainパッケージの$testをそのままプロパティにしないで、コピーを
保持するようにする。
sub new {
my ($class, $hashref) = @_;
bless { hashref => {%$hashref} }, $class;
}
0515514
NGNG指定されたキーの値だけを返すようにする。
sub hashref {
my $self = shift;
# パラメタなければ、丸ごとコピーを返す(値にリファがあるケースはとりあえず無視)
if (@_ == 0) { return %{$self->{hashref}} }
# パラメタ1つの時、
elsif (@_ == 1) {
# ハッシュリファなら、丸ごと交換
if (ref($_[0]) eq 'HASH') { $self->{hashref} = {%{$_[0]}} }
# それ以外はキーとみなし、値を返す
else { return $self->{hashref}->{$_[0]} }
}
# パラメタ複数なら、hashrefに値を設定(指定されたキーのみ)
else {
while (my($key,$val) = splice(@_,0,2)) {
$self->{hashref}->{$key} = $val;
}
}
}
0516デフォルトの名無しさん
NGNG>DBIとかは普通にリファレンスで返して来るんだよな。
DBIがリファで返してくるのはプロパティじゃないだろが。
一時的に生成された無名配列や無名ハッシュだったら、
返しても全く問題ない。
0517デフォルトの名無しさん
NGNGサイゾウで公開されてるやつをつかって
自分のHPに画像掲示板設置してみたんですが
なんかこの掲示板何かを書き込んだ直後にページを更新すると
書き込んだやつを連続投稿しちゃうみたいです。
ページを更新しても連続投稿しないようにしたいんですが
どうにかなりませんか?
どなたかアドバイスを。。
(当方一応perlの基本的な部分はわかってます。)
0518デフォルトの名無しさん
NGNGとりあえずコピーしたりするなら初めからリファレンスで渡さないほうがわかりやすくていいだろ?
まずリファレンスってのは名前空間をある意味で超えてる存在だから厄介なんだよな(OOP時には注意)。
無名ハッシュのリファレンスだろうがなんだろうが、他の名前空間で作られたリファレンスを
リファレンスのまま返して、返し先でデリファレンスして処理を行えば、名前空間を越えて
影響がでる。本当に拡張的なプログラムにするのにそれは好ましいとは思えない。
厳格にOOをするのなら異なるオブジェクト間での、値の受け渡しにリファレンスは使わないという
ルールを作ったほうがいいと思う。ただ、そこまで厳格なものにしたいならPerlで書かなくてもいいんじゃないか?
ってことで適当にPerlなりの柔軟さを生かすのが賢いだろうね。
0519デフォルトの名無しさん
NGNG無名変数は安全だよ。ちゃんと元のデータを壊されることのないようなコーディングにすれば
大丈夫さ。
0520デフォルトの名無しさん
NGNGパールはシェルと呼ばれているようですが、
C++をシェルと呼ばないのはなぜなんでしょうか?
いまいち、パールの位置づけが理解できない・・・・・・・・・・・
0521デフォルトの名無しさん
NGNGぱーるハ、いんたーぷりたー
0522デフォルトの名無しさん
NGNGシェルなんて呼ばれてんだ?
0523デフォルトの名無しさん
NGNG完全なインタープリタじゃないけどな
0524デフォルトの名無しさん
NGNGパールはコンパイラってこと?
0525デフォルトの名無しさん
NGNG0526デフォルトの名無しさん
NGNG@INCへ自作モジュールの場所をlibを使わずに追加するときを考えればわかるだろ。
0527デフォルトの名無しさん
NGNG他の名前空間で作られたリファレンスって何よ?
変数名の管理のための名前空間とメモリ領域に関するリファレンスを
同じ土俵で考えること自体ナンセンス。
名前空間を越えて影響がでるとか言ってる時点で終わってる。
プログラムで扱われるメモリ領域が、複数の名前空間の
関数などで利用されることには何の問題もないし至って普通。
0528デフォルトの名無しさん
NGNGOOPでメモリ領域を考える事がナンセンスだと思うんだが。
横槍スマソ
0529デフォルトの名無しさん
NGNG527は名前空間とリファレンスを同じレベルで考えることの
無意味さを説いているのでは?
489は設計の問題であって、名前空間がどうのって問題じゃあ
ないのは確か。
0530デフォルトの名無しさん
NGNG>パールはシェルと呼ばれているようですが、
違う。パールは普通シェルの中に入ってる
0531デフォルトの名無しさん
NGNGうまい…
0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNGやっと意味わかった。。。なぞなぞみたい。
0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNG>プログラムで扱われるメモリ領域が、複数の名前空間の
>関数などで利用されることには何の問題もないし至って普通。
その言い方だと>>489のコーディングで、オブジェクトのプロパティを壊しても
何の問題もないってことになるな。実際オブジェクトのプロパティはアドレスであって
その中身であるとは限らないからな。
ていうかお前ネタだろ?
0537デフォルトの名無しさん
NGNG名言!テンプレにでも入れたいよ。
0538デフォルトの名無しさん
NGNG自演って面白いか?
アホだろお前
0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNGラリーのジョーク程度には面白いと思うけどな。
それを面白いと言うかどうかは個々人に任せるが(w
0541デフォルトの名無しさん
NGNG0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNGどっちが正しいんだよ!俺にもわかりやすく説明しやがれ!!!
0544デフォルトの名無しさん
NGNG0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNG0548デフォルトの名無しさん
NGNG漏れも気になってたんだが、536の
> ていうかお前ネタだろ?
ってどゆ意味?
0549デフォルトの名無しさん
NGNG多分
冗談で言ってるんだろ?
とかいう感じじゃないか?っていうか漏れは最近Webpg板から写ってきたんだが、
こっちの方がレベルの低い気がしてがっかり;
向こうは結構ちゃんとした回答者が常にいるのに。こっちは中途半端な知識の集まりって感じだねorz
もちろん漏れもその一人だけどさ;
0550デフォルトの名無しさん
NGNG0551デフォルトの名無しさん
NGNGそれってさげろって言ってるの?それとも>>549にアフォって言ってるの?
0552デフォルトの名無しさん
NGNG0553デフォルトの名無しさん
NGNG上げるなアフォ
0554デフォルトの名無しさん
NGNG俺はWebの話し合いのレベルがあまりに低いんでこっちに移った。
俺がWeb板にいてた頃・・・って1年ほど前だけど。
そりゃひどかった記憶が・・・_| ̄|○
0555デフォルトの名無しさん
NGNG0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNG0558デフォルトの名無しさん
NGNG居着いてまじめに回答しようって奴もそりゃ少ないだろうな。
そもそもPerlなんて、よほどのアホであるか、めちゃくちゃ濃い疑問を持たない限り
「他人に質問しなきゃならない事態」にならないだろ。
0559デフォルトの名無しさん
NGNG阿っ蘇
0560デフォルトの名無しさん
NGNG雲素
0561デフォルトの名無しさん
NGNG0562デフォルトの名無しさん
NGNG# マックバイナリ対策
if ($macbin) {
$length = substr($upfile,83,4);
$length = unpack("%N",$length);
$upfile = substr($upfile,128,$length);
}
と言うのがあり、さっぱり意味が分かりません。
ググっても明確な答えを見出せませんでした。
どなたかご存知の方、おりますでしょうか
0563デフォルトの名無しさん
NGNGここがわかりやすいと思う。
ttp://homepage1.nifty.com/glass/tom_neko/web/web_05.html
これを読んでなおそのコードの意味がわからないようなら
決定的に勉強不足なので、わかる日がくるまで精進するしか
ないな。
0565デフォルトの名無しさん
NGNGprint ($_=(keys(%a)));
のようにしたんですが、もっとシンプルな方法ありますか?
0566デフォルトの名無しさん
NGNGタイプは増えるけど
print scalar keys %a;
とか
0567565
NGNGありがとうございます。
scalarなんてのがあるんですね。まさに求めていたものです。
ところで、
print ($_=(keys(%a)));
ってやるとなんでkeysのスカラー値が表示されるのでしょうか?
0568デフォルトの名無しさん
NGNGperldoc -f keys くらい調べてくれよ。
> (In scalar context, returns the number of keys.)
0569デフォルトの名無しさん
NGNGprint 0+keys %a;
スカラー評価。
>>567
keys はリストを返すが、リストをスカラー評価すると
リストの要素数が得られる。
$_ = ってのは、右辺をスカラー評価ね。
0570567
NGNGkeys関数をスカラーで評価するとキーの数が返ってくることは知ってます。
なので最初は、
$_=keys(%a);
print $_;
ってやってました。
んで試しに括弧で括ってみたら出来たわけですが、
($_=keys(%a))
でスカラー値が返ってくる仕組みが知りたいのです。
0571デフォルトの名無しさん
NGNG0572デフォルトの名無しさん
NGNG0573デフォルトの名無しさん
NGNG何を知りたいのか分からんが
$a = $b = 5; とか print ($a=5); を不思議に思う人かい?
# 良い子は $a とか $b なんて変数名を使う習慣を身に付けちゃダメだぞ
0574デフォルトの名無しさん
NGNGオブジェクト指向の基本をしってるやつなら、Perlでもできる。
まあ何のためのオブジェクト指向かを勉強しれ。
簡単に言うと、賢いやつは何をやらしてもなかなかの結果を出すってことだ。
0575デフォルトの名無しさん
NGNGなるほど、おまいが結果を出せないわけが良く分かったよw
0576デフォルトの名無しさん
NGNG同意
0577デフォルトの名無しさん
NGNG0578デフォルトの名無しさん
NGNG> んで試しに括弧で括ってみたら出来たわけですが、
> ($_=keys(%a))
> でスカラー値が返ってくる仕組みが知りたいのです。
$_ = ...
の「式の値」は、$_ に代入された値になる。で、
print に渡されるのは、その式の値。
ちなみに、今回のケースでは括弧はなくても大丈夫。
print $_ = keys %a;
0579デフォルトの名無しさん
NGNG関心するよ
0580デフォルトの名無しさん
NGNG残念
0581デフォルトの名無しさん
NGNG0582デフォルトの名無しさん
NGNG0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNG現在、PerlにてCGIを作成しているのですが、
オープンしたファイルに書き込みが出来なくて困っています。
セキュリティーに関してはちょっと置いといて、
Perlソース(一部分)はこちらです。
$dot_qmail_path = "/home/$user_name/.qmail";
if ( -r "$dot_qmail_path" && -w "$dot_qmail_path" ) {
open( QMAIL , ">>$dot_qmail_path" ) || &Error_Print('09',$!);
print QMAIL "aaaaaaaaaa\n";
close(QMAIL);
}
CGIフォームにてユーザーから、$user_nameを受け取り、
その$user_nameユーザーの.qmailファイルに追記したいのです。
ここで、$dot_qmail_path に "/home/$user_name/.qmail" を代入するとNGで
$dot_qmail_path に 直接 "/home/hogehoge/.qmail" と変数を利用しないパスだときちんと
該当ファイルに追記してくれるのです。
変数が2重になっていると変数を展開しないなんて事はないですよね?
print "$dot_qmail_path";
とするときちんとパスは"/home/hogehoge/.qmail"と表示されるんですがね。。。
ちなみに。
/home/hogehoge/.qmail のパーミッションは644のオーナーhogehoge、グループhogehogeになっています。
このCGIのパーミッションは4755のオーナーroot、グループrootです。
(今はセキュリティーは無視しています)
0585デフォルトの名無しさん
NGNG4755だとするとに$user_nameが汚染されてんじゃねーの?
0586デフォルトの名無しさん
NGNG$dot_qmail_path = '/home/' . $user_name . '/.qmail';
したらどう?
0587デフォルトの名無しさん
NGNGバカじゃん
0588デフォルトの名無しさん
NGNGtu-ka、.qmail 書き換えるときはスティッキ立てろって書いてあるし、4755 root:root の CGI ってまさしく >>587 の通りだし。
CGI から特定のデータを一旦ファイルに書き出して、書き出したファイル群を巡視する daemon 設置してそちらで .qmail 書き換えるべきだよな。@要root、setuidgid プログラム
0589デフォルトの名無しさん
NGNG訂正m(_ _)m
書き出したファイル群を巡視するプログラムを svscan でまわしてそちらで .qmail 書き換えるべきだよな。@要root、setuidgid プログラム
0590デフォルトの名無しさん
NGNG管理人殺害!!!
0592デフォルトの名無しさん
NGNG古い?
0593584
NGNG>>585
>>587
>>589の意図するところは
>>586 ちなみにダメでした。
汚染モードで実行されて、$user_nameのところで、
汚染チェックされ、プログラムが終了してしまっている。
ということでしょうか?
>>588 ちなみに、.qmailでなくても、通常のファイルでもダメですが、
4755 root:root の CGI ってまさしく >>587 の通りだし。
これはセキュリティー上のことですか?
それとも汚染モードってことですか?
0594デフォルトの名無しさん
NGNGヒントは3つ。
> 現在、PerlにてCGIを作成しているのですが、
> ここで、$dot_qmail_path に "/home/$user_name/.qmail" を代入するとNGで
> $dot_qmail_path に 直接 "/home/hogehoge/.qmail" と変数を利用しないパスだときちんと
> 該当ファイルに追記してくれるのです。
> print "$dot_qmail_path";
> とするときちんとパスは"/home/hogehoge/.qmail"と表示されるんですがね。。。
if ($user_name eq 'hogehoge') {
print '合ってる';
} else {
print '間違ってる';
}
これやってみ。
あと、print "$dot_qmail_path";をログファイルに書き出すようにしてみ。
0595584
NGNG$dot_qmail_path = "/home/$user_name/.qmail";
print "$dot_qmail_path" . "<BR>";
if ($user_name eq 'hogehoge') {
print '合ってる<BR>';
} else {
print '間違ってる<BR>';
}
if ( -r "$dot_qmail_path" && -w "$dot_qmail_path" ) {
open( QMAIL , ">>$dot_qmail_path" ) || &Error_Print('09',$!);
print QMAIL "aaaaaaaaaa\n";
close(QMAIL);
print 'ここまできてる?<BR>';
}
と、してみたところ、
ブラウザには
/home/hogehoge/.qmail
合ってる
と出たので、ユーザー名、パスに誤りはないと思います。
さいごのprint文の「ここまできてる?」
はブラウザに表示されませんでした。
ちなみに、このcgiのパーミッションを4755としているのには、/etc/shadowファイルを
オープンさせるために、「とりあえず」、このようにしています。
あと、変数名にセンスが感じられないのはご愛嬌でお願いします。
0596デフォルトの名無しさん
NGNGありゃ?俺はてっきり$user_nameの頭か尻に空白類文字が入ってんのかと思った。
「合ってる」が出るってことは合ってんだろうな。
本当に
$dot_qmail_path = "/home/$user_name/.qmail";
を
$dot_qmail_path = "/home/hogehoge/.qmail";
に変えたらうまく行くんだろうな?
0597デフォルトの名無しさん
NGNGprint "ok";
}
if ( -r "home/hogehoge/.qmail" && -w "home/hogehoge/.qmail" ) {
print "ok";
}
これを
if ( -r "$dot_qmail_path" && -w "$dot_qmail_path" ) {
の前に入れてみろ。okが2つでなかったらアウトだ。
0598デフォルトの名無しさん
NGNGそれで俺もこまってるんだもの。
一応、$user_nameはなんちゃって正規表現で、チェックはしているつもり、
コレでも汚染は取れきれないのかな?
ドットとスラッシュ許可してるからな・・・
sub Address_Check {
@addresss = ("$user_name" , "$tenso_address_1" , "$tenso_address_2");
foreach $buf (@addresss) {
if ( $buf =~ /[^\w.\-\/\@]/ ) {
&Error_Print('00',$buf);
} elsif ( $buf eq "" ) {
&Error_Print('01',$buf);
}
}
}
はたして、この正規表現であってるかはわからんが・・・・
要はやりたいことは
CGIフォームで転送アドレスを受け取って、それを.qmailに追記したいのよ。
ユーザーの認証は、すでに持っているアドレス(@より前の部分)とメールパスワード
で認証させる。ってことで、
全部のソース載せてもいいんだけど、載せきれないしね。
0599デフォルトの名無しさん
NGNG違うだろ。
同じ(はずの)文字列に対して同じ(はずの)処理をしているのに違う結果になるのが問題であって、
汚染とか全然関係ない。
ちなみに汚染をtaint mode(-T)のこととして言ってるなら、
> コレでも汚染は取れきれないのかな?
> ドットとスラッシュ許可してるからな・・・
taint modeはそういうものじゃない。
0600デフォルトの名無しさん
NGNG非常に残念な結果が出てしまいました。
$dot_qmail_path = "/home/$user_name/.qmail";
print "$dot_qmail_path" . "<BR>";
if ($user_name eq 'hogehoge') {
print '合ってる<BR>';
} else {
print '間違ってる<BR>';
}
if ( -r "/home/$user_name/\.qmail" && -w "/home/$user_name/\.qmail" ) {
print "ok";
}
if ( -r "/home/hogehoge/\.qmail" && -w "/home/hogehoge/\.qmail" ) {
print "ok";
}
if ( -r "$dot_qmail_path" && -w "$dot_qmail_path" ) {
open( QMAIL , ">>$dot_qmail_path" ) || &Error_Print('09',$!);
print QMAIL "aaaaaaaaaa\n";
close(QMAIL);
print 'ここまできてる?<BR>';
}
え〜っと、いちおうhome/$user_name/.qmailとあったので、念のため/home/$user_name/\.qmailと変更しました。
結果、
/home/hogehoge/aaaaa
合ってる
okok
このブラウザだけ見ると、やけにうまくいってそうなメッセージだな。でもね、でもね、「ここまできてる」の文が出ないのが、俺にはどうにも不思議で不思議で・・・
0601600
NGNG確かに /usr/bin/perl -Tで汚染モードに入るのはわかる。
でも、setuidにしているので、自動的に汚染モードで動きません?
0602デフォルトの名無しさん
NGNG1.
print "/home/$user_name/\.qmail";
print "/home/hogehoge/\.qmail";
print "$dot_qmail_path";
をして、3つの出力をブラウザのソース表示で全て同じであることを確認
2.
A. if ( -r "$dot_qmail_path" && -w "$dot_qmail_path" ) {
B. if ( -r "/home/$user_name/.qmail" && -w "/home/$user_name/.qmail" ) {
C. if ( -r "/home/hogehoge/.qmail" && -w "/home/hogehoge/.qmail" ) {
の3種類を試してみて、本当に「C.だけが成功する」のかどうか確かめる。
3.
「実はうまくいってるのに、うまくいってないと勘違いしてるのでは?」等を疑う。
0603デフォルトの名無しさん
NGNG0604600
NGNGわけわからなくなるでしょ?
ちなみにね、
1.だけど、
やっぱりブラウザのソース見たけど一緒だし、
2.も
ABはだめ、Cはイケルって結果だね。
3.は2.のCがうまくいっているのを確認したし、2.のA,Bが失敗しているのは完全によくわかる。
全ソースさらけだすか?
ちなみに自分が作ったスクリプトって見られるの恥ずかしくネ?
0605デフォルトの名無しさん
NGNG0606デフォルトの名無しさん
NGNG汚染はマッチしただけじゃ取れないよ。
(...)を含んだ正規表現とマッチさせて
$1, $2, ...で部分文字列として
取り出さないとだめ。perlsecをよく
読め。
0607デフォルトの名無しさん
NGNGあ!!ゴメン。エラーログになんか出てた。
Insecure dependency in open while running setuid at /var/www/cgi-bin/trans.cgi line 60.
だって、ちょっと手元にあるプログラミングPerl VOLUME2で調べたら、
Insecure dependency in %s
(%sは安全でないものに依存している)
(F)汚染チェック機能が嫌うようなことを行おうとした。汚染チェック機能は、setuidや
setgidで実行した場合、および-Tスイッチによって陽に設定した場合に有効になる。汚染
チェック機能は、ユーザーを信頼できない人物とみなして、直接または間接的にユーザーから
与えられたすべてのデータに印をつける。もしそのようなデータが「危険性のある」走査
で使われると、このエラーが発生する。
だって。
ちょっと見えてきたわ。。。
0608デフォルトの名無しさん
NGNGline 60はやっぱり、
open( QMAIL , ">>$dot_qmail_path" ) || &Error_Print('09',$!);
だったよ。
0609デフォルトの名無しさん
NGNGいやだから最初から585がそう言ってるだろ...
0610デフォルトの名無しさん
NGNGttp://www.saitaniya.jp/hide/perl06.html
のようにエラーが出てしまい、此処での対策はjperlで回避していますが
それ以外の方法ありましたらご教授下さい。
0613デフォルトの名無しさん
NGNGActivePerlで正常に動作する組み合わせもあると思う。
0614デフォルトの名無しさん
NGNG0615デフォルトの名無しさん
NGNG/あ[いう]/
なんて正規表現もOK?
0616デフォルトの名無しさん
NGNGと俺も思うが。
サブルーチンを一個作って解決する方法もある。
引数に$str1とかを取って、1バイトずつスキャンして
[の前に\を挿入するサブルーチン。
正規表現のパターンに変数を突っ込む前にそのサブルーチンで変換する。
$a =~ /&hoge($str1)/; とかできたっけ?
$a =~ s/(...)/&hoge($1)/; はできたような記憶がかすかにあるが。
0617デフォルトの名無しさん
NGNG0618デフォルトの名無しさん
NGNGそれがUNICODEなら当然出来るでしょ。
0619デフォルトの名無しさん
NGNG先頭でuse utf8;すればできるよ
0620デフォルトの名無しさん
NGNGmy $str1 = "サービス";
my $str2 = "サービス期間";
print "match\n" if( $str2 =~ /\Q$str1\E/);
0621デフォルトの名無しさん
NGNG0622デフォルトの名無しさん
NGNGhttp://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
まあここでも最初に5.8以降使えよと書いてるわけだが
0623デフォルトの名無しさん
NGNG> サブルーチンを一個作って解決する方法もある。
sub quotemetaのことだね:-)
0624デフォルトの名無しさん
NGNG本自体は古いけど、内容は今でも余裕で使えるから買って良し。
参考にして問題を回避してみます。
ソースはttp://www.saitaniya.jp/hide/perl06.htmlの問題と同じです。
文字コードはシフトJIS、Perl 5.8.*は 自分のサーバーなら出来ますが
無料スペースとなると難しいと思われます。
0626デフォルトの名無しさん
NGNG文体とかが気に入るといいな。
0627デフォルトの名無しさん
NGNG0628デフォルトの名無しさん
NGNGのはおめーだよ
0629デフォルトの名無しさん
NGNG0630デフォルトの名無しさん
NGNG>>620
0631デフォルトの名無しさん
NGNG変な作法覚える価値ある?use encodingがもう当たり前な
感じなんだけど。
0632デフォルトの名無しさん
NGNGあるかどうか知りたい。ライブラリの対応状況も
いまいち見えないし、なんかめんどくさいだけ
のようにも見えるのだが(笑)
0633デフォルトの名無しさん
NGNG0634デフォルトの名無しさん
NGNGほぼない。使うならjperl。
ただし、jperlのバグにはまるとけっこう困る。
0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNG0638デフォルトの名無しさん
NGNG神(w
0639デフォルトの名無しさん
NGNG置換したい文字列「aaaaaa」
置換後の文字列「bbbbbb」
として、このとき偶数回目にマッチした文字列のみ
文字置換を行いたい場合どう書いたらいいですか?
0640黒死犬 ◆EgxBlf8nvc
NGNGs/($match.*?)$match/${1}manko/go;
とか、
my $i = 0;
s/$match/($i++ % 2)? $match: "manko"/oge;
0641デフォルトの名無しさん
NGNG$|=1;
&abone;
sub abone {
print $$,"(oya)\n";
if( fork() ){}
else{print $$,"(child)\n";}
}
exit;
を実行するとPerlインタプリタが落ちて
#!/usr/bin/perl
$|=1;
print $$,"(oya)\n";
if( fork() ){}
else{print $$,"(child)\n";}
exit;
だと落ちないのは何でですか?
WinXP Pro SP1,ActivePerl 5.8.4
0642641
NGNGActivePerl特有の問題なのでしょうか
0643デフォルトの名無しさん
NGNG問題なし。
$ perl -v
This is perl, v5.8.5 built for cygwin-thread-multi-64int
0644641
NGNG>perl -v
This is perl, v5.8.3 built for MSWin32-x86-multi-thread
(with 8 registered patches, see perl -V for more detail)
0645デフォルトの名無しさん
NGNGうちも一つ目は落ちる。
環境は WinXP Home + ActivePerl v5.8.3
0646デフォルトの名無しさん
NGNGうちのこれでエラーになるね。
Access ViolationだからPerlのバグだな。
0647641
NGNG自分もサブルーチン内で子プロセスが作成できなくなると、不便ですし…
0648デフォルトの名無しさん
NGNG自分でビルドしたものでも。
0649641
NGNG$|=1;
&abone(); ←*
sub abone {
print $$,"(oya)\n";
if( fork() ){}
else{print $$,"(child)\n";}
}
exit;
としたら動きました
0650デフォルトの名無しさん
NGNG0651デフォルトの名無しさん
NGNG( ´∀`)バグワショーイ
0652デフォルトの名無しさん
NGNGv5.8.5 built for i386-freebsd-64int
0653デフォルトの名無しさん
NGNG0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNG> ◆ fork()
> 子プロセスを生成し、親プロセスと子プロセスに分岐する。親プロセスの場合 $pid には子プロセスのIDが、
> 子プロセスの場合、$pid には 0 が返る。fork() をサポートしていないシステムもあり、
> 無理に使用すると perl が異常終了する。
0656デフォルトの名無しさん
NGNGバッファオーバーフローが発生するって問題じゃないのk
0657デフォルトの名無しさん
NGNG0658デフォルトの名無しさん
NGNG0659デフォルトの名無しさん
NGNG0660デフォルトの名無しさん
NGNG0661デフォルトの名無しさん
NGNGWin32::OLE::Variant=SCALAR(0x1d551dc)
と表示されます。これを日付として表示させるにはどうしたらいいでしょうか?
$conn = 'Provider=Microsoft.Jet.OLEDB.4.0;';
$conn .= 'Data Source=test.mdb';
$db = Win32::OLE->New('ADODB.Connection');
$db->Open($conn);
$rs = $db->Execute("SELECT * FROM AAA ;");
while (!$rs->EOF) {
print $rs->Fields('日付')->Value;
print $rs->Fields('名前')->Value;
$rs->MoveNext;
}
$rs->Close();
$db->Close();
exit;
-結果-
Win32::OLE::Variant=SCALAR(0x1d551dc)テスト君
Win2K,ActivePerl5.8.4,Access2000
0662デフォルトの名無しさん
NGNG黙ってCGI板いけ池沼
0663デフォルトの名無しさん
NGNGprint ${ $rs->Fields('日付')->Value };
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html#Using_References
my $foo = 'foo';
$foo = bless \$foo, 'Foo';
print $foo; # Foo=SCALAR(0x10c5f50)
0664デフォルトの名無しさん
NGNG何言ってるんだ?
0665デフォルトの名無しさん
NGNG0666デフォルトの名無しさん
NGNG$this_function = (caller(0))[3];
と、クックブックのP348に書いてあった。
0667デフォルトの名無しさん
NGNG0668デフォルトの名無しさん
NGNGありがたう
0669661
NGNGuse Win32::OLE::Variant;
上行のVariantを追加したらちゃんと表示できました。
0670デフォルトの名無しさん
NGNG$pid = open(SAFR_WRITER, "|-"))
if($pid) {
なんとか
} else {
なんとか
}
でコレでfork出来ているんでしょうか?
よく
$pid = fork();
if( $pid ) {
なんとか
} else {
なんとか
}
はほとんど同じなんでしょうか?
forkの使用例ページでは後者がよく載っているのですが、
前者だとあまり解説がなくて・・・
0671670
NGNGもうお分かりかもしれませんが、
defined ($pid = open(SAFE_WRITER, "-|")) or die "Can't fork: $!";
if($pid) {
なんとか;
} else {
なんとか;
}
でした。
0672デフォルトの名無しさん
NGNG0673デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNG0675デフォルトの名無しさん
NGNGシグナルがほとんどきかんし、いろいろと使いづらいが。
0676デフォルトの名無しさん
NGNGPerlの小技に載ってる例を見てもわかりませんでした。
hoge.dll:
...
class HOGEAPI Hhoge{
public:
Hhoge(void);
~Hhoge(void);
char* bumo;
HWND hwnd;
Ppiyo* piyo;
...
}
class HOGEAPI Ppiyo{
public:
Ppiyo(long aa, BYTE* bb);
~Ppiyo(void);
float piyoA(void);
float piyoB(void);
LPCTSTR piyoC(void);
...
}
例えばこういうDLLの場合、piyoA()等を使うにはどのようにしたらよろしいのでしょうか?
0677デフォルトの名無しさん
NGNGでもいい?
0678デフォルトの名無しさん
NGNGレスありがとうございます。
その方法でできるようでしたら是非教えて頂きたいです。
ですがかなり頻繁に呼び出すので(秒間100回以上)
コアダンプを拾って・・・というのは処理的に厳しくはないでしょうか?
0679デフォルトの名無しさん
NGNG0680デフォルトの名無しさん
NGNGネタにマジレスカコワルイ
0681デフォルトの名無しさん
NGNGPerlモジュールをインストールしようと考えています。
BC++は正しくインストールしました (念のためHelloWorldをコンパイルして実行した)
dmakeも正しくインストールしました
comfig.pmのnmakeをdmakeに書き換えました
しかし、perl Makefile.PL 〜 dmake を実行すると以下のようになって止まりました
ちなみに、Time-HiRes1.52をdmakeしたときの出力です。
C:\temp\Time-HiRes-1.52>dmake
cp HiRes.pm blib\lib\Time\HiRes.pm
C:\Perl\bin\perl.exe C:\Perl\lib\ExtUtils/xsubpp -typemap C:\Perl\lib\ExtUtils\
typemap -typemap typemap HiRes.xs > HiRes.xsc && C:\Perl\bin\perl.exe -MExtUtil
s::Command -e mv HiRes.xsc HiRes.c
bcc32 -c -nologo -Gf -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STR
ICT -DHAVE_DES_FCRYPT -DNO_HASH_SEED -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS
-DUSE_PERLIO -DPERL_MSVCRT_READFIX -MD -Zi -DNDEBUG -O1 -DVERSION=\"1.
52\" -DXS_VERSION=\"1.52\" "-IC:\Perl\lib\CORE" -DSELECT_IS_BROKEN -DATLEAS
TFIVEOHOHFIVE HiRes.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
エラー E2075: コマンドライン オプションの間違い : -Gf
dmake.exe: Error code 1, while making 'HiRes.obj'
bcc32に渡す引数が間違っているのはもちろん分かりますが、
Perl側設定のどこをどう直せばうまくいくのか見当がつきません。
設定すべき箇所について教えて頂けませんでしょうか?
後網一歩だと思うのですが......
0682デフォルトの名無しさん
NGNGOSを変える
0683デフォルトの名無しさん
NGNG0684デフォルトの名無しさん
NGNGどーせならBCC++でPerlを作ったら? それなら確実。
0685デフォルトの名無しさん
NGNGperl Makefile.PL で作られた Makefile を書き換える。
0686デフォルトの名無しさん
NGNGCがひとつ余計
0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNG今まで use Text::ParseWords を使ってましたが、
これでは解析出来ないデータが出てきまして、、
自分の頭では出来ませんでしたので、知恵をお借り出来ますでしょうか。
データの内容は以下の通りです。
- データはasciiのみ
- デリミタは , (カンマ)
- 数値以外のデータは " (ダブルクォーテーション)で挟まれる
- データ内に " ' , が含まれる、そして "" \" のようにエスケープされている訳ではない
# 自分で書いてみたモノの一部
push(@arr, $+) while $line =~ m{
"([^\"]+)",?
|([^,]+),?
|,
}gx;
自分で書いてみたものの、
上記のコードだと " が含まれるデータは解析出来ず、、orz
0689688
NGNGpush(@arr, $+) while $line =~ m{
"([^\"]+)",?
|([^,]+),?
|,
}gx;
0690688
NGNG> いつから & は & amp; に変換されるようになったんだ、、、orz
0691デフォルトの名無しさん
NGNG0692デフォルトの名無しさん
NGNG0693デフォルトの名無しさん
NGNG下の文字列はその仕様を満たすが、これを
どこで区切るのがお望みの挙動だい?
1,",",",",",2,",",",",",3
解析方法で悩むよりデータ構造を見直す事を勧める。
0694デフォルトの名無しさん
NGNG0695ヽ(´ー`)ノ ◆.ogCuANUcE
NGNG大人しく Text::CSV 使えよ(笑)。
0696デフォルトの名無しさん
NGNG>>693-694 仰る通り過ぎて返す言葉がございませぬ。
自分でやる時はもう絶対そうするんですけど、
今回は、、もうデータがあるんですよ、そこで困っている訳でございます。
中身を見た瞬間ガックリですよ、ハイ。
>>693
数値以外のデータは全て "(ダブルクォート)で挟まれるので、
そのデータだと↓ようになりますです。
1,""",""",""",""",""",2,""",""",""",""",""",3
で、こんな風に自分のコード改造してみました。
一応、手持ちのデータは解析出来るようになったので解決と言っても良いのですが、
折角なのでもっと良い方法があれば教えて下さいませ。
push(@arr, $+) while $line =~ m{
"(.+?)",
|"([^\"]+)",?
|([^,]+),?
|,
}gx;
0698688
NGNG結果は Text::ParseWords と殆ど同じです。
やぱーり自分で書かないとダメみたいす(つд`;)
0699デフォルトの名無しさん
NGNGいや、違うって。
1,",",",",",2,",",",",",3 は >>688 の仕様を満たし、且つ
1 , ",",",",",2,",",","," , 3 とも、
1 , "," , "," , ",2," , "," , "," , 3 とも、
1 , ","," , ",",2," , ",","," , 3 とも、
如何様にでも解釈できる文字列だって事。君が挙げた以外にまだ
何らかのルールが存在していないとこれを機械的に切り分ける事は
不可能で、故にそれを説明してもらわなければ誰もコードに落とせ
ない。
>>696 のコードは、文字列中に " も , も含まれ *ない* という条件の
下でなら意図通り動くだろう。しかしそれは君の示した仕様とは異なり、
仕様を違えた回答は君の手元のデータを上手に切り分けられる確証
が無い。故に「もっと良く」と言われても答えようが無い。
0700デフォルトの名無しさん
NGNGよっぽどデータ量が多くなければ、editor上でinteractiveに
正規表現置換かけるやり方も検討したほうがいい。
0701デフォルトの名無しさん
NGNG0702デフォルトの名無しさん
NGNG@a = split /,/, $hoge;
する。 validなデリミタで区切られたところならば、
たとえば、 $a[0]の末尾は 「"」 or [0-9]で、なおかつ、
$a[1]の先頭も同様。それ以外なら $a[0]と$a[1]を連結すると。
でも、セル(?) の中身が 「"...",1,2,3,"hogehoge"」だったら
原理的にどうやっても破綻するんだから、これはPerlの問題じゃなくて
そのヘッポコ元データを出してきた奴(客?)との交渉術の問題だろう。
理屈で攻めて飯でもおごらせろよって感じだなあ。
0703デフォルトの名無しさん
NGNG悲惨だなとしか言いようがない。
う〜ん、だるいけどとりあえず各行のカンマ区切りの配列を生成して
その中で要素数が最小のものを参考に他の列の配列を再定義するのはどうだろうか。
基本方針は>>702の方法で。
これなら>>702の言う 「"...",1,2,3,"hogehoge"」で分割される問題も
他の行も同様に分割されるか最小要素数にあわせて分割されないに違いない(と信じたい)。
まあこの方法の最大の問題は各行でもともと要素数が違う場合だな。
交渉がんがれw
0704デフォルトの名無しさん
NGNG"...",1,2,3,"hogehoge"
というデータがあった場合、最初の要素は、
"..."
とも、
"...\",1,2,3,\"hogehoge"
とも解釈できてしまう、ということだね。これはプログラム側で
一意に解釈することは「不可能」。で、
>>703 のように無理やりルールを決めて処理するしかない。
それでも破綻するなら、一度元データから
きちんとしたデータを作るとよいかも。
(""中の"をエスケープして)
それだと既存のモジュールで処理できるので。
0705デフォルトの名無しさん
NGNG0706688
NGNGあ、そう言う事でしたか。(読解力無くて申し訳ない..)
> 如何様にでも解釈できる文字列だって事。
いや、仰る通り、それなんですよ。
「如何様にでも解釈出来る文字列」が含まれるCSV(モドキ)データなので、
激しく困っているのでございます。
# これは拡張子がcsvなだけだ、絶対そうだ、中身は単なるtextだ、違うとは言わせない
> 何らかのルールが存在していないとこれを機械的に切り分ける事は不可能
やっぱそうですよね、、と言う事で考えを改めまして、
「万能」な全てにマッチする正規表現は不可能、ならば、
全fields数 x になるように split すりゃいいのだ(半壊
と言う事で、
1. Text::ParseWords で解読
2. 正規表現其の壱で解読
3. 正規表現其の弐で解読
4. 正規表現其の参で解読
5. split m#,#, $line して変な所は合体(壊
としてみました。
んで、どーにもならないデータは手動で置換してみた。
したらこんなの見つけた。
0,1,****"ab"cde,fgh"ijk,lmn"op",2,3
どうやってマッチさせろと、、
つか文字列は " で囲まれてるんじゃないのかよ、、orz
# これバグ、絶対そう、違うとは言わせない
0707688
NGNG>>700 ちょと泪出てきました(つд`;)ワカッテクレテアリガトー
>>701 メモ帳以外をお勧めしまつ。# 個人的にはvi(ry
>>702 最終的にはソレ使わせて頂きました。ありがとうございます。
> でも、セル(?) の中身が 「"...",1,2,3,"hogehoge"」だったら
そーいう解読不能データ、約9000(全数は2マソホド)あったんです、、
文句言った時に1万ないから楽勝じゃん、なんてヌカしやがった上司にちょと殺意が、、
そしてこのデータ出してきた奴には、
- CSVデータならちゃんと , で区切れ
- データに , が含まれるなら " で囲め、なんでもかんでも囲むなゴルァ
- " で囲んだデータに " が含まれるなら "" or \" でエスケープしてコイ
- エスケープしたり " で囲むのメンドーとか抜かすなら \t で区切ってコイ、勿論データ内の \t は消せ
- 兎に角、定義を破るな、死んでも破るな、破るなら氏ね
と、和菓子で包んで突っ込んでみました。んで返事は「善処する」だそうです。
# あー多分私、どこかの政治屋さんに間違えてメールしたんですね
0708688
NGNG困ったと言うほどの事でもないのですが、
.(ピリオド)は \x2E
'(シングルクォート)は \x27
と記憶していたのですが、
. だと思われる所に \x85
' だと思われる所に \x92
と言う文字が入っているデータがあったのです。
こんな文字コードが含まれる事なんてあるのですか?
# asciiと呼ばれる文字にも二種類ある?!
少し調べてみたら usコード?の \x85 は ... <-コレで一文字
\x92 は '(シングルクォート)そのものを指し示しているコード表があったのですが、
どうも納得できるものではありませんでした。
何かご存知の方いらっしゃいましたら教えて下さい。
0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNGPerl と関係無いし。
http://pc5.2ch.net/test/read.cgi/tech/1092665695/
0711688
NGNG> Excelに流しこんで、テキスト(タブ区切り)で吐き出すのは?
Excelに読み込む時点でズレまくります。
そもそもfieldが256以上使えない時点で選択肢に挙がりませぬ。
>>710
あ、そうでした、申し訳ない。行って来ます。
0712デフォルトの名無しさん
NGNG<INPUT type="submit" name="Reload" value="再読込">
</FORM>
こんな感じでホームページに設置されているボタンを押すPerlスクリプトって作れないでしょうか。
0713デフォルトの名無しさん
NGNG>>1 板違い
0714デフォルトの名無しさん
NGNG0715デフォルトの名無しさん
NGNG>dnaK
atgacgtgggttacgaccccatttagtagtcaaccgcagtga
atgaaattgggcagttga
>dnaJ
>gef
atgaagagataa
atgcgaggcgtcttccggattagaatcgataaaacagaatgggttaaagagagcgatataatagcggcgggtgcttga
atgggttaa
>nhaA
atgattatcagggcttag
atggcgcaaattcttctatag
atgattcgtgcggggtaa
>nhaR
というような出力結果から、
0716デフォルトの名無しさん
NGNG>dnaK
2
>dnaJ
0
>gef
3
>nhaA
3
>nhaR
0
という結果( つまり、「>名前」に対応させた、塩基配列の行の数)を出力し
たいのですが、プログラムがわかりません。どなたか教えてくださるかたがい
らっしゃるとうれいしです。よろしくお願いします。
0717デフォルトの名無しさん
NGNGマルチになってますがどうなさいますか?
0718デフォルトの名無しさん
NGNG名前 数 の形がいいです。ほんとすみません。
0719デフォルトの名無しさん
NGNGhttp://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88
#!/usr/bin/perl -- sum.p
my $i;
/^>(\w+)/ ? (print("$i\n$1 "), $i = 0) : $i++ while <>;
print $i;
__END__
prompt> cat ./data.txt | ./sum.p
0720デフォルトの名無しさん
NGNG質問があります。
ある特定の文字■を文字列としての<\n>に置き換えようと、
s/■/\Q<\n>\E/g;
というタグで処理しようとしたんですが、
すべて
>
<
という二行に変わってしまいます。
アウトプットを<\n>にしたいのに…
どうしても\nとして処理されてしまうようで頭を抱えています。
なにかいい方法をご存じないでしょうか?
0721デフォルトの名無しさん
NGNG>なにかいい方法をご存じないでしょうか
perlの本を一冊読む
0722デフォルトの名無しさん
NGNGs/■/<\\n>/g;
0723デフォルトの名無しさん
NGNGマルチポストのことでしたか。すみませんでした。以後気をつけます。
簡潔なプログラムをありがとうございます。
本当に助かりました。
ありがとうございました。
0724720
NGNGありがとうございました!
\Q...\Eがきかなくてテンパってました。
本当に助かりました。
0725デフォルトの名無しさん
NGNGx.plというPerlプログラムを使って
a.txtをb.txtに変換するとき
必ずc.txtの内容をb.txtの冒頭に含めることってできますか?
できればx.plひとつかますだけでできるようにしたいんですけど。
よろしくお願いします。
0726デフォルトの名無しさん
NGNG2. c.txtを読み込みで開く。
3. c.txtのファイルハンドルから読んでb.txtへのファイルハンドルに書き出す。
(c.txtへのファイルハンドルはそのまま閉じずに)
4. a.txtを読み込みで開く。
5. a.txtから読んでは処理してb.txtに書き出す。
でいいんでわ?
0727726
NGNG正: (b.txtへのファイルハンドルはそのまま閉じずに)
0728725
NGNG% perl x.pl < a.txt > b.txt
とやって、b.txtをアウトプットするとき、
自動的にc.txtがb.txtの冒頭に含まれるようにするための
x.plに記述するタグを知りたいんです。
0729デフォルトの名無しさん
NGNG>dnaK
atgacgtgggttacgaccccatttagtagtcaaccgcagtgaatgaaattgggcagttga
>gef
atgaagagataaatgcgaggcgtcttccggattagaatcgataaaacagaatgggttaaagagagcgatataatagcggcgggtgcttgaatgggttaa
>nhaA
atgattatcagggcttagatggcgcaaattcttctatagatgattcgtgcggggtaa
という出力を、
0730デフォルトの名無しさん
NGNG>dnaK
atgacgtgggttacgaccccatttagtagtcaaccgcagtga
atgaaattgggcagttga
>gef
atgaagagataa
atgcgaggcgtcttccggattagaatcgataaaacagaatgggttaaagagagcgatataatagcggcgggtgcttga
atgggttaa
>nhaA
atgattatcagggcttag
atggcgcaaattcttctatag
atgattcgtgcggggtaa
のように開始コドンatg〜終止コドンtaa tag tgaまでで区切りたいのですが、
プログラムがわかりません。どなたか教えていただけるとうれしいです。
0731デフォルトの名無しさん
NGNGのように開始コドンatg〜終止コドンtaa tag tgaまでで区切りたいのですが、
プログラムがわかりません。どなたか教えていただけるとうれしいです。
よろしくお願いします。
0732デフォルトの名無しさん
NGNGマルチになってますがどうなさいますか?
0733ゆうき ◆MU2000.LWc
NGNGif( $in_params[5] eq $keysin ){
・・・・
}else{
・・・・
}
どこかオカシイですか?(泣)
助けてクダサイ。。
0734デフォルトの名無しさん
NGNGasdf1234 じゃなくて asdf0123 じゃないの?
0735ゆうき ◆MU2000.LWc
NGNGCGIは板違いでした。ごめんなさい。
>>734
いや、そこは何でもいいのです。
ソフト名とバージョンが入る変数?
もっと別のところかも。出直してきます。
0736デフォルトの名無しさん
NGNGタグってなんだ?新たな釣り?
0737ゆうき ◆MU2000.LWc
NGNG$in_paramsに改行コードが orz...
スレ汚してすんませんでした。
0738デフォルトの名無しさん
NGNG別に改行コードが入ってても問題ないだろ?>733は
「Perlで配列の要素数を取り出すにはどうすればいいですか?」
という質問だと思ったんだが。
質問書いてないってことは 貴様らが質問を予想しろ ってことだろ。
0739デフォルトの名無しさん
NGNG$enki = q/atgattatcagggcttagatggcgcaaattcttctatagatgattcgtgcggggtaa/;
@part = $enki =~ /((?:atg)(?:\w{3})*?(?:taa|tag|tga)(?=atg|$))/g;
print $_, qq/\n/ for @part;
ほれ。
Perlに感謝してこれからはPerlerになりたまへ
0740デフォルトの名無しさん
NGNG0741デフォルトの名無しさん
NGNG0742デフォルトの名無しさん
NGNGググりゃすぐ出てくるだろ
http://www.itl.nist.gov/fipspubs/fip46-2.htm
0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNGwikipediaりゃすぐ出てくるだろ
http://en.wikipedia.org/wiki/Death
0745デフォルトの名無しさん
NGNG英語読めないので・・・・・
オンドゥル語に訳してもらえませんか?
0746デフォルトの名無しさん
NGNGそのレスをオンドゥル語で書いてください。
0747デフォルトの名無しさん
NGNGエイゴヨベナイドディ・・・・・
オンドゥヅゴルャグジデボラエバゼンカ?
これでどうでしょうか?
0748725
NGNG解決しました。
x.plの冒頭部分に、
open(IN, "c.txt");
print while (<IN>);
close(IN);
print "\n";
これで問題なくb.txtの冒頭にc.txtの内容を含めることができました。
示唆していただきありがとうございました。
0749デフォルトの名無しさん
NGNGhttp://users72.psychedance.com/ondul/?url=http%3A%2F%2Fwww.excite.co.jp%2Fworld%2Fenglish%2Fweb%2Fbody%2F%3Fwb_url%3Dhttp%253A%252F%252Fen.wikipedia.org%252Fwiki%252FDeath&z2h=1
0750デフォルトの名無しさん
NGNGつまらん
0751デフォルトの名無しさん
NGNG使ってみようと思ってるけど情報が少なすぎ。。
具具っても英語わからんし。
ttp://www.activestate.com/Products/Visual_Perl/
0752デフォルトの名無しさん
NGNG0753デフォルトの名無しさん
NGNGのですが、良い記述が思い当たりません。それぞれの値を連想配列に代入する
以外に良い方法は無いものでしょうか・・・?
0754デフォルトの名無しさん
NGNGmy @key = sort { $hoge{$b} <=> $hoge{$a} } (keys %hoge);
my @value = @hoge{@key};
0755デフォルトの名無しさん
NGNGしたい事がよく分からんがこういう事?
my @value = qw(blue green indigo orange red vioret yellow);
my @order = (2, 3, 1, 5, 6, 0, 4);
print join ', ', @value[ sort { $order[$a] <=> $order[$b] } 0..$#value ];
0756デフォルトの名無しさん
NGNGとりあえず、新規プロジェクトのテンプレートとして用意されているもの
・Simple Project
・Empty Project
・Control Library
・Managed Dll Library
・Executable
・Managed Exe
・Tray Application
・Windows Service
0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNG5.8.1までは${^WIDE_SYSTEM_CALLS}とか-Cオプションがあったのですが…
0759デフォルトの名無しさん
NGNGperl 5.6 で動いていたperlのスクリプトが5.8で動かなくなってしまいました。
my %$test = {};
という宣言がエラーになってしまうのです。
これを5.8で動くようにすればどのような宣言にすればいいのでしょうか。
書いたプログラマがいなくなってしまい、自力でリファレンスのことを
一応調べてみましたが、日頃php使いのためよく理解できず困っています。
識者の方どうか力をお貸しください
0760デフォルトの名無しさん
NGNGmy $test;
%$test = {};
でいいと思われ。
0761デフォルトの名無しさん
NGNGエラーにはならんけどさ。
0762デフォルトの名無しさん
NGNG↑ハッシュにスカラー代入してる時点でなんか変じゃない??
my $test = {};
の間違いでは??
0763デフォルトの名無しさん
NGNGと同じことではある。こんなことがしたいのか?
%$testを空のハッシュにするつもりで間違えてる
ような気はするが、keys %$testとかとらなきゃ
それなりに動くから気がつかないこともあるかな。
0764759
NGNG>> 760さん
my $test;
%$test = {};
>> 763さん
my %$test = ({}=>undef);
ではそれぞれエラーがとまりましたが、プログラムは正常に動きませんでした。
この変数は宣言された後、
my %$test = {};
$test = ("hoge"=>"aaa");
のような使われ方をしていて、 %$ という表現は
変数宣言のところにしか出てこないようです。
0765デフォルトの名無しさん
NGNG多分、文法ミスじゃないかと。
$test = { hoge => 'aaa' } とか。。。
0766759
NGNG$test = {__TEST__ => "test"};
のような書き方です。
上記の変数宣言をコメントアウトすると正常に動かなくなってしまいます。
0767デフォルトの名無しさん
NGNGファイル1 ファイル2
a 1 b 3
b 3 c 5
c 4 d 7
f 2 g 1
g 0 h 5
h 6 i 3
(下に続く) (下に続く)
という二つのファイルがあるのですが、これら二つのファイルを参照させて、
出力ファイル
b 3 3
c 4 5
g 0 1
h 6 5
(下に続く)
のように、その二つのファイルで名前(この場合アルファベット)が一致する
ものの数字を並べて表示するというようなプログラムがわかりません。
どなたかよろしくお願いします。
0768デフォルトの名無しさん
NGNGperl初心者です。どなたか教えていただけるとうれしいです。
ファイル1
a 1
b 3
c 4
f 2
g 0
h 6
(下に続く)
ファイル2
b 3
c 5
d 7
g 1
h 5
i 3
下に続く
という二つのファイルがあるのですが、これら二つのファイルを参照させて、
出力ファイル
b 3 3
c 4 5
g 0 1
h 6 5
(下に続く)
のように、その二つのファイルで名前(この場合アルファベット)が一致する
ものの数字を並べて表示するというようなプログラムがわかりません。
どなたかよろしくお願いします。
0769デフォルトの名無しさん
NGNG{
a => [ 3, 2],
b => [ 1 ],
c => [ 4, 5 ],
}
のような・・・
0770デフォルトの名無しさん
NGNGmy %alpha;
while(<>){
s/ / /g;#全角スペース区切り対策
my %list = split;
my ($key, $value);
while(($key, $value) = each %list){
push @{ $alpha{ $key }}, $value;
}
}
print Dumper(\%alpha);
0771デフォルトの名無しさん
NGNGじゃ、こっちと
use Data::Dumper;
my %alpha;
while(<>){
s/ / /g;#全角スペース区切り対策
my ($key, $value) = split;
push @{$alpha{ $key }}, $value;
}
print Dumper(\%alpha);
0772デフォルトの名無しさん
NGNG粗大ごみ不法投棄させてもらいますね
0773デフォルトの名無しさん
NGNG>$test = { hoge => 'aaa' } とか。。。
これだけなら
my $test = {};
でOKだと思うけど・・・
これでも動かないんじゃ↑の代入文以外で$testが使われてる部分晒してもらえないと分からんね
0774デフォルトの名無しさん
NGNG>>771 の出力を >>768 のようにしたいなら、最後の行を
print map { "$_ ".join(' ', @{$alpha{$_}})."\n" } sort grep { @{$alpha{$_}}>=2 } keys %alpha;
>>771 の使い方は、コマンドラインで
perl 771.pl ファイル1 ファイル2
0775デフォルトの名無しさん
NGNG本当に丁寧にありがとうございました。
なかなかできないでいたのを、出力の形式まで
そろえていただいて感動しました。
0776デフォルトの名無しさん
NGNGいつもこの板の方々には大変感謝しています。
またわからないところがあったので質問します。
>fixA
atggacgcgttaatggctaactcataa
atgggtattcaataa
atgttatgttatgttgcgagtaaaaaaatagcatctgactttcaatattggtga
atgttatgttgcgagtaa
atgttgcgagtaaaaaaatag
>yabH
atgacaggtatgataatgcaaattataggcgatgtcccacaattgaccgcagccggaaaacggtaa
atgtcccacaattga
>imp
atgccgtgcctaacaccactgacgctattcggacaggattaa
atgacgagtacgttagtctctgaccgtttgtcacgcgcaacgttaccgatgatggaacaataa
>araC
atggacaattggtttcttctctga
atggcgggagtatga
というファイルを
0777デフォルトの名無しさん
NGNGatggacaattggtttcttctctga
atggcgggagtatga
というファイルを
>fixA_1
atggacgcgttaatggctaactcataa
>fixA_2
atgggtattcaataa
>fixA_3
atgttatgttatgttgcgagtaaaaaaatagcatctgactttcaatattggtga
>fixA_4
atgttatgttgcgagtaa
>fixA_5
atgttgcgagtaaaaaaatag
>yabH_1
atgacaggtatgataatgcaaattataggcgatgtcccacaattgaccgcagccggaaaacggtaa
>yabH_2
atgtcccacaattga
>imp_1
atgccgtgcctaacaccactgacgctattcggacaggattaa
>imp_2
atgacgagtacgttagtctctgaccgtttgtcacgcgcaacgttaccgatgatggaacaataa
>araC_1
atggacaattggtttcttctctga
>araC_2
atggcgggagtatga
というように同じ名前のものでも、行ごとに名前を変えて
(1〜順に名前をつけていく)表示するにはどうしたらいいのでしょうか。
0778デフォルトの名無しさん
NGNGatgtcccacaattga
>imp_1
atgccgtgcctaacaccactgacgctattcggacaggattaa
>imp_2
atgacgagtacgttagtctctgaccgtttgtcacgcgcaacgttaccgatgatggaacaataa
>araC_1
atggacaattggtttcttctctga
>araC_2
atggcgggagtatga
というように同じ名前のものでも、行ごとに名前を変えて
(1〜順に名前をつけていく)表示するにはどうしたらいいのでしょうか。
0780758
NGNGやっぱり-Cが"リサイクル"されてしまうほど
誰も使ってなかった機能なんでしょうか
0781デフォルトの名無しさん
NGNGwhile(<>){
if(m/^>(\w+)/){
$pre = $1;
$num = 1;
} else {
print ">${pre}_$num\n";
print ;
$num++;
}
}
0782デフォルトの名無しさん
NGNG本買って自分でやれ
0783779
NGNG0784デフォルトの名無しさん
NGNGhttp://www.amazon.co.jp/exec/obidos/ASIN/4873110688
こういう本買うとやりかた載ってンのかなあ?
本屋で見かけたことあるけど、立ち読みすらしたことないんで俺はわからんが。
0786779
NGNGプログラムを教えてくださる方々には本当に感謝しています。
でもあまり聞きすぎるのもあれなので、しばらく自分で勉強します。
また今度よろしくお願いします。
0787デフォルトの名無しさん
NGNG夏休みの宿題が間に合わないと諦めたらしい。
とかいう煽りでOK?
0788デフォルトの名無しさん
NGNG...
END
と終端文字列を記述すると何も表示されないのに、
print "...";
print <<"END";
...
END
とすると表示されます。(print"...";の内容は表示されません)
これは何故なんでしょうか??
0789デフォルトの名無しさん
NGNG#!perl
print <<"END";
...
END
---------------------------------------
>test.pl
...
>perl -v
This is perl, v5.8.4 built for MSWin32-x86-multi-thread
0790789
NGNG確かにエラーになるね
Can't find string terminator "END" anywhere before EOF at D:\Lab\27\test.pl line3.
0791デフォルトの名無しさん
NGNG0792デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNG使われる特殊な語なのでいかんのかも。
0794デフォルトの名無しさん
NGNGおまいら適当な事言い過ぎ
0795デフォルトの名無しさん
NGNGs/([^:])“/<k-70>$1<k\$>“/g;
s/”([^\n])/<k-70>”<k\$>$1/g;
というように後方参照させた場合、
日本語をマッチするときに文字化けします。
これはJPerlやJcodeなどを使わないといけないんでしょうか。
0796デフォルトの名無しさん
NGNGEND の後に余分なスペースが入ってる。
ただしく実行できるよ。
0797デフォルトの名無しさん
NGNGうん、文字化けするね・・・。
Perl 5.8 なら、use utf8; で OK なんだけど。
0798デフォルトの名無しさん
NGNG文字の正規表現
http://www.din.or.jp/~ohzaki/perl.htm#Character
ここを見れ。日本語1文字ずつにマッチさせることも可能。
0799デフォルトの名無しさん
NGNG( ゚д゚)
(| y |)
(∩д∩)ゴシゴシ
| y |
(;゚д゚)
(| y |)
(∩д∩)ゴシゴシ
| y |
_, ._
(;゚ Д゚) …?!
(| y |)
0800デフォルトの名無しさん
NGNGどした? Perl 5.6 でも 5.8 でも正しく実行されますが。
a.pl
---
print <<"END";
...
END
perl a.pl
...
perl -cw a.pl
a.pl syntax OK
perl -v
This is perl, v5.6.1 built for i386-linux
perl -v
This is perl, v5.8.4 built for MSWin32-x86-multi-thread
0801デフォルトの名無しさん
NGNG0802デフォルトの名無しさん
NGNG空白なんかない
0803799
NGNGprint "...";
print <<"END";
...
END
↑ここに改行入れるとうまく動いた
0804デフォルトの名無しさん
NGNG書き方がまずかったようで。スマソ。
2ch に貼り付けられたコードじゃなくて、貼り付ける前の
コードのことです。
>>790 のようなエラーになるのは、
END
という行が見つからないということだから、ソース中に
そういう行がないという意味。
コードを見てみると正しく書かれているので、
質問者の環境でエラーが起こるということは、
空白文字(改行等)の関係では、と思ったわけです。
0805デフォルトの名無しさん
NGNGこりゃ絶対気づけないエラーだな。
0806デフォルトの名無しさん
NGNGwhile(<ARGV>) {
s/^[\t\s]+//;
print;
}
このようなスクリプトを想定した場合、
空行 (改行だけの行) を処理すると、改行コード(\n)まで消えてしまいます。
いちおう今は応急措置として、
s/^[\t\s]+(.*)\n/$1\n/;
のようにしていますが、なぜ改行まで消えてしまうのでしょうか?
0807デフォルトの名無しさん
NGNG\sは、改行にもマッチするから
0808デフォルトの名無しさん
NGNG短く書くなら、\s をスペースにかえて、
s/^[\t ]+//;
でOKかな。
0809デフォルトの名無しさん
NGNG0810デフォルトの名無しさん
NGNGif($flag==1){
$text = <<"TEXT";
XXXXXXXXXX
YYYYYYYYYY
TEXT
}else{
$text = <<"TEXT";
AAAAAAAA
BBBBBBBBB
TEXT
}
print $text;
諦めて次のようにすると実行できるのですが出力結果にタブが付加されてしまいます。
if($flag==1){
$text = <<"TEXT";
XXXXXXXXXX
YYYYYYYYYY
TEXT
}else{
$text = <<"TEXT";
AAAAAAAA
BBBBBBBBB
TEXT
}
print $text;
ソースコード内での可読性を維持しつつ出力に余分なタブを付けないようにすることはできないでしょうか?
できれば、ヒアドキュメントの終端にタブを使う方法はないでしょうか?
0811デフォルトの名無しさん
NGNG@lines = <IN>;
close(IN);
↓
@linesをデータ加工
↓
ファイルロック
ファイルの書き込み
ファイルロック解除っていうやり方はどこか問題ありますか?
0812デフォルトの名無しさん
NGNG0813デフォルトの名無しさん
NGNGそれ、ラクダ本やクックブックに載ってたな。。
0814デフォルトの名無しさん
NGNG1行目の $datafile と ファイル書き込みのファイルが同一ファイルなら、
最初の読み込みのところでもファイルロックしておくべし。
0815デフォルトの名無しさん
NGNGラクダに載ってたっけ?どのあたりかな?
ちなみに俺はそんな場所でヒアドキュメント使うな派
0816デフォルトの名無しさん
NGNG\f もマッチするよ。
0817デフォルトの名無しさん
NGNGラクダ本とクック本に載ってるんですね、情報ありがとうございます。調べてみます。
>>815
それはそうなんですけど、サブルーチンの中とかループの中に記述したくなるときとか多々あるんですよ、これが。
0818デフォルトの名無しさん
NGNGuse DBI な状況で、
例えば
$sth = $dbh->prepare(
"INSERT INTO `sample1`(t1,t2,t3,t4,t5,t6,t7,t8,t9,t10) VALUES (?,?,?,?,?,?,?,?,?,?)"
);
で、row(s)の数は変化します。
(動的に prepare 内の command を生成しています)
$sth->execute
で配列を insert したいのですが、可能でしょうか?
0819デフォルトの名無しさん
NGNGエディタ上で間違いを指摘してくれます。
$a = "abcdefg";
$a =~ s/a/A/;
$a ~= s/b/B/;
~~~~~~~~~~~~~~
print $a;
こんな感じに赤の波線で。
0820デフォルトの名無しさん
NGNG0821デフォルトの名無しさん
NGNGいえいえ、動的にrow(s)が変化するのはデータによって、入力テーブルも変化するためです。
0822デフォルトの名無しさん
NGNGち、すでに終わってたか。
出所はクックブック。
sub hd($){
my $text = shift;
my($tab) = $text =~ /^(\t+)/;
$text =~ s/^$tab//gm;
$text;
}
if($flag==1){
$text = hd<<" TEXT";
XXXXXXXXXX
YYYYYYYYYY
TEXT
}else{
$text = hd<<" TEXT";
AAAAAAAAA
BBBBBBBBB
TEXT
}
print $text;
0824デフォルトの名無しさん
NGNG\r もマッチするよ。
0825デフォルトの名無しさん
NGNGハァ?
0826デフォルトの名無しさん
NGNG\w [a-zA-Z0-9_] 小文字、大文字のアルファベット、数字、下線
\W [^a-zA-Z0-9_] 小文字、大文字のアルファベット、数字、下線以外
\s [\r\t\n\f] 空白文字(復帰、タブ、改行、フォームフィールド)
\S [^\r\t\n\f] 空白文字(復帰、タブ、改行、フォームフィールド)以外
\d [0-9] 数字
\D [^0-9] 数字以外
=糸冬=
0827デフォルトの名無しさん
NGNG\s スペース。[ \r\t\n\f] に同じ。
0828デフォルトの名無しさん
NGNGs/ラクダ本や/ラクダ本か/
でした。。
0829デフォルトの名無しさん
NGNGヒアドキュメントの後に置換を書く方法の。
下は、今適当に考えたもの。
$_ = <<" END", s/^\t//gm;
aa
bb
END
print $_;
結果:
aa
bb
0830デフォルトの名無しさん
NGNG0831デフォルトの名無しさん
NGNGこうすると$_に依存しなくなるね。
($doc = <<" END")=~s/^\t//gm;
aa
bb
END
print $doc;
0832デフォルトの名無しさん
NGNG0833デフォルトの名無しさん
NGNGqqの場合はインデントはどうにかできないの?
if(1)
{
print qq
(
あいうえお
かきくけこ
さしすせそ
);
}
0834デフォルトの名無しさん
NGNG0835デフォルトの名無しさん
NGNG>>798
ありがとうございます。
早速試してみたいと思います。
0836デフォルトの名無しさん
NGNG>>822のサブルーチンを使えばいいんじゃないの。
その場合、"(" と ")" に続く空白と改行はいらないだろうから
こうすればいいんじゃない。
sub hd($){
my $text = shift;
$text =~ s/^[ \t]*\n//;
$text =~ s/[ \t]+$//;
my($tab) = $text =~ /^(\t+)/;
$text =~ s/^$tab//gm;
$text;
}
if(1)
{
print hd qq
(
あいうえお
かきくけこ
さしすせそ
);
}
0837デフォルトの名無しさん
NGNG0838デフォルトの名無しさん
NGNGYou may specify -M multiple times.
とあるから、-M ... を必要な回数書けばOKかも。
0840デフォルトの名無しさん
NGNGおお、なるほど。カンマも使用しないし、こっちの方がいいね。
0841デフォルトの名無しさん
NGNGはどうやったらマッチするの?
0842デフォルトの名無しさん
NGNG>>797 >>798 です。
せっかくなんで、もう少し詳しく書きます。
Perl で日本語を1文字ずつ処理するのは、ちょっとテクニックが
必要なんだよね。
自分が用いた方法は、
1. 文字コードを euc-jp に変換
2. euc の文字コードにマッチする正規表現を使って、1文字ずつ切り出し
というもの。(Shift_JIS でもできるかも)。
次の例では、$name に入っている文字列を、半角換算で30文字
(全部全角だと15文字)に切り詰めています。
# EUCの文字
my $c = "([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])";
Jcode::convert(\$name, 'euc', 'sjis');
@_ = $name =~ /$c/g; # 1文字ずつに分割
$name = join('', @_[0..14 + (join('', @_[0..14]) =~ tr/[\x00-\x7F]//)/2]);
Jcode::convert(\$name, 'sjis', 'euc');
0843デフォルトの名無しさん
NGNG$name = の行が、1行に詰め込みすぎて見にくいんですけど、
全角・半角関係なく15文字に切り詰める処理なら
$name = join('', @_[0..14]);
で OK です。
日本語を正しく切り出すには、このように EUC 文字コードにマッチする
正規表現(ここでは $c に代入)を使って、. (ドット)等の代わりに
使うとよいですよ。
---
ちなみに自分のオリジナルのコードでは、上のコードの
@_ = $name ... の行は
@_ = $name =~ /([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])/g;
となっていて、変数 $c を使わずにすませています。
0844デフォルトの名無しさん
NGNGそれでマッチしてますよ。(マジレス。。)
print "漏れってバカ" =~ /バカ/;
結果:
1
0845デフォルトの名無しさん
NGNGprint "バカで悪かったナ(`ω´)";
}
0846デフォルトの名無しさん
NGNG読み込みから書き出しまでを1つのロックの中で実行しないと
Aが読み出し
Bが読み出し
Aが更新して書き込み
Bが更新して書き込み
という順序で実行される可能性があって、このときAが行った
更新が失われてしまう。
0847デフォルトの名無しさん
NGNGopen(OUT,"+<test.dat");
@lines=<OUT>;#データの取り出し
flock(OUT,2);#ファイルロック
truncate(OUT,0);
seek(OUT,0,0);
push(@lines,"aaa\n");
print OUT "@lines";
close(OUT);
このようにファイルロックをするまえにopenしているんですけど
普通はファイルロックしてからopenするんじゃないんですか?
0848デフォルトの名無しさん
NGNGできるできないの前に意味あんの?
つーかflockのタイミングおかしいですよ!
0849デフォルトの名無しさん
NGNGopenされていれば読み出す前にやるのは何の問題もない。
もっともロックするファイルと実際に読み書きを行う
ファイルが同じでなければならないということもない。
何のためにロックするのか、flockで何ができるのかと
いったことをもう一度勉強し直した方がいい気がする。
0850デフォルトの名無しさん
NGNGトランザクションロックするためだけのファイルを用意しといてそっちを flock する、
ってのはよくある手な気がするんですが、どうなんでしょうねえ。
0851デフォルトの名無しさん
NGNG初心者なんでスマソ
0852デフォルトの名無しさん
NGNGなにが普通かはつくりによるとしかいいようがない。
1つのファイルの内容を直接書き換えて更新し、ロックファイルを
別に用意しないで同じファイルですまそうとすれば、openした直後
にflockして読み出して更新という手順になるだろう。
ファイル更新中にシステムが落っこちると消えてしまうのを嫌って
新しい内容のファイルを別につくってできてから置き換えるという
ような構造だと、古い内容のファイル開く前に別にロックファイル
用意してそっちをflockしてからはじめるのが普通かな。
0853デフォルトの名無しさん
NGNG0854デフォルトの名無しさん
NGNG0855デフォルトの名無しさん
NGNG0856デフォルトの名無しさん
NGNG0857デフォルトの名無しさん
NGNG0858デフォルトの名無しさん
NGNG0859851
NGNG排泄処理ってなんですか?
ふざけないんできちんと教えてください
0860デフォルトの名無しさん
NGNG>> 排泄
痔を間違えてるよ。俺もだけど。
0861デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/php/1024795138/
0862デフォルトの名無しさん
NGNGそれでも怖いならDB使えや
0863デフォルトの名無しさん
NGNG0864デフォルトの名無しさん
NGNG読みも間違えてる気が…。釣り?
×ハイセツ → ○ハイタ
0865デフォルトの名無しさん
NGNG0866795
NGNG>>842 >>843で教えていただいた方法だと、
僕の環境ではエラーが出てしまいます。
幸い開発・実行ともにPerl5.8が使用出来るので、
>>797で示唆していただいたようにUTF-8を使ってみました。
#! /usr/local/bin/perl
use utf8;
use Encode;
binmode STDIN, ':encoding(shiftjis)';
my $buffer;
read STDIN, $buffer, $content_length;
while (<STDIN>) {
s/([^:])“/<k-70>$1<k\$>“/g;
s/”([^\n])/<k-70>”<k\$>$1/g;
binmode STDOUT, ":encoding(shiftjis)";
print;
}
これで問題なく処理できました。
ありがとうございました。
0868デフォルトの名無しさん
NGNGつーか、誰か使ってる人いない?
0869デフォルトの名無しさん
NGNG0870デフォルトの名無しさん
NGNG語ってよ。
あんたのレスで使えそうだったら入れてみる。
0871デフォルトの名無しさん
NGNGどこで配ってるの?
0872デフォルトの名無しさん
NGNGActiveState
0873デフォルトの名無しさん
NGNGちなみに870じゃない>俺
0874デフォルトの名無しさん
NGNGPerl.NETはPerlのコードをC#のコードに変換するだけらしい。
0875デフォルトの名無しさん
NGNG0876デフォルトの名無しさん
NGNGMSILじゃなくてC#のソースコード?
0877デフォルトの名無しさん
NGNGあんたアフォでつか?
0878デフォルトの名無しさん
NGNG0879デフォルトの名無しさん
NGNG0880デフォルトの名無しさん
NGNGスクリプトに組み込んだのですが、下の様なエラーがでます。
Can't locate auto/CGI/Session/File/expire.al in @INC (@INC contains: ./lib c:/usr/lib c:/usr/site/lib .) at lib/CGI/Session.pm line 258
クッキーに保存したセッションIDをCGI::Sessionのnewメソッドに与えた時のみ起こります。
セッション生成時(第二引数がundefの時)には起こりません。
対処法ご存じの方、おられましたらアドバイスをお願いします。<(_ _)>
0881880
NGNGご迷惑をおかけしました。
Webプログラミング板にいってきます。
0882デフォルトの名無しさん
NGNG下記の二行目において @music_file をファイルが作成された順に
sort したいのですが、何かよい方法はありますでしょうか?
( file がおいてある dir でsystem ( ls -l ) を実行してファイルと
日付のhash を作成し、日付から sort することを考えています。)
****************************************************************
opendir ( DIR, $Source_DIR ) || die "failed open dir";
@music_file = sort grep { -f "$Source_DIR/$_" } readdir( DIR );
closedir( DIR );
open( FILE, ">./$LIST_FILE" ) || die "failed open file";
foreach $music ( @music_file ) {
if ( $music =~ m/mp3$/ ) {
printf ( FILE "file://$Source_DIR/$music\n" );
}
}
close ( FILE );
****************************************************************
0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNG0886デフォルトの名無しさん
NGNG@music_file = sort { (stat($b))[9] <=> (stat($a))[9] } grep { -f "$Source_DIR/$_" } readdir( DIR );
若い順(昇順)なら、$b と $a を入れ替えればOK。
0887デフォルトの名無しさん
NGNG@music_file = sort { (stat("$Source_DIR/$b"))[9] <=> (stat("$Source_DIR/$a"))[9] } grep { -f "$Source_DIR/$_" } readdir( DIR );
でした。
0888デフォルトの名無しさん
NGNG-10点
0889886
NGNG@music_file = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { [ (stat("$Source_DIR/$_"))[9], $_ ] } grep { -f "$Source_DIR/$_" } readdir( DIR );
こっちも、昇順なら $a, $b を入れ替えればOK。
0890デフォルトの名無しさん
NGNG0891デフォルトの名無しさん
NGNGttp://www.din.or.jp/~ohzaki/perl.htm#ArrayRandom
0892デフォルトの名無しさん
NGNG0893デフォルトの名無しさん
NGNG0894デフォルトの名無しさん
NGNGppm install win32-api とコマンドプロンプトで打ってみても特に何か起こったような気配がありません。
'install' は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
とでてしまいます。
PathはC:\Perl\binに設定しているのですが、これがおかしいのでしょうか?
お願いします。
0895882
NGNG大感謝です。ありがとうございます。
889 の記述の a と b を入れ換える事によって、作成日時の
古い順に sort できております。
今まさに、完成したスクリプトが出力したリストファイル
で、音楽を聞いております。
0896デフォルトの名無しさん
NGNG---^
dir c:\Perl >tmp.txt
dir c:\Perl\bin\ppm*.bat >>tmp.txt
path >>tmp.txt
---$
というバッチファイルをコピペでつくってコマンドプロンプトで
実行して結果tmp.txtの中身をここに晒してみ
まさか、msiファイルをC:\Perlにぶちこんだだけってのが
落ちじゃないだろな
0897894
NGNGドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は ******* です
c:\Perl のディレクトリ
2004/09/05 02:47 <DIR> .
2004/09/05 02:47 <DIR> ..
2004/09/05 02:50 <DIR> bin
2004/09/05 02:47 <DIR> eg
2004/09/05 02:47 <DIR> html
2004/09/05 02:50 <DIR> lib
2004/09/04 00:28 37,368 pod2htmd.tmp
2004/09/04 00:28 16,951 pod2htmi.tmp
2004/09/04 00:27 <DIR> site
2 個のファイル 54,319 バイト
7 個のディレクトリ 17,141,141,504 バイトの空き領域
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は ***** です
c:\Perl\bin のディレクトリ
2004/06/01 12:23 46,401 ppm.bat
2004/06/01 12:23 146,840 ppm3-bin.bat
2004/06/01 12:23 46,401 ppm3.bat
3 個のファイル 239,642 バイト
0 個のディレクトリ 17,142,194,176 バイトの空き領域
PATH=C:\Perl\bin\;C:\cygwin;C:\config.sys
0898894
NGNGttp://www.ddsystems.info/ex/ex_cgi/1002.html
によると、ppmと打てば、
PPM interactive shell (2.2.0) - type \’help\’ for available commands.
PPM>
と出るようですが、自分の場合は、C:\Perl\bin で ppm とうっても何の反応もないです。
ppm install aaaa とか適当に打っても何にも返ってきません。
ppm がおかしいのでしょうか?
perl -v で確認したところ、一応Perlは正しくインストールされているみたいですが・・
0899896
NGNGOSは?
コマンドプロントでsetを実行したときのcomspec(ComSpec)の値は?
Pathの中にC:\Cygwinが入ってるのが気になるね。俺はCygwinを
まともにいじったことが無いのでよう分からんけど(^^;
cygwinを入れていてシェルの設定が中途半端?
0900894
NGNGcygwinのPathを消して、再起動してみました。
ComSpec=C:\WINNT\system32\cmd.exe とでました。
たびたびすいません。
よろしくお願いします。
0901デフォルトの名無しさん
NGNGインストールしたときにppm外してたりしないよな
0902894
NGNG多分いれてるとおもうのですが。
ttp://www.dream-seed.com/server/perl.html
のとおりにやっています。
ppm.bat はあるのですが、どうも正しく動いてくれないみたいです。
もうだめかなぁ。
0903デフォルトの名無しさん
NGNG>もうだめかなぁ。
泣きつけば助けてもらえると思ってる時点で助ける気無くすよ。
他は普通にできてるんだから、自分が何か間違ってる可能性が高いわけだ。
だったらもっと前向きに解決しようとするのが普通だろ。
多分じゃなくて、ちゃんと確認した結果を伝えてください。
0904デフォルトの名無しさん
NGNG0905894
NGNGはい、申し訳ないです。
アンインストールして入れてみたのですが、標準どおり入れています。
でもやっぱり動かないみたいです。。
0906896
NGNGPATHにC:\WINNT\system32を追加しろや。
cmd.exeのあるディレクトリがPATHにないとststem()が動かないから。
て優香、なんでPATHにC:\WINNT\system32が入ってないんだ?
0907894
NGNGすいません、おかげさまで解決できました。
そのPathが要ったようです。
長々と申し訳ありませんでした
ありがとうございました。
0908デフォルトの名無しさん
NGNG> て優香、なんでPATHにC:\WINNT\system32が入ってないんだ?
俺も気になる。これ入ってるのはシステム環境変数の方だろ。わざわざ消してんのか?
0909デフォルトの名無しさん
NGNGperlってバイナリデータを書き込みできるんですか?
例えばバイナリエディタで開いたときに 20 20 20 00 00 20 と表示されるように
ファイル書き込みしたいんですが、どうやっても 202020000020 という文字列
が出力されてしまいます。
binmode は、読み込みには関係あっても書き込みには関係なさそうです。
pack と uppack という関数もありましたが、これはプログラム内部での
変換に過ぎず、書き込み時に print を使うと結局は文字として出力されて
しまうようです。
0910デフォルトの名無しさん
NGNGprintfで書き込んだら?
0911909
NGNGprintf も print と同じく文字列として書き込みが行われてしまいます。
例えば以下のようなプログラムを実行したときファイルに書き込まれるのは、
0x20 という1byteのバイナリデータではなく、20という2byteの文字列です。
open (OUT, "> test");
$a = 20;
printf OUT $a;
close (OUT);
0912デフォルトの名無しさん
NGNG0913デフォルトの名無しさん
NGNGまず$aが16進のx20なら、$a=x20;だし、
printfは、フォーマットを指定しなきゃ意味ない。
0914デフォルトの名無しさん
NGNGvec関数については自分で調べてください。よく分らないので。
open(FH,">aaa.txt");
vec($a,0,8)=0x20;
syswrite(FH,$a);
close(FH);
0915909
NGNGおお、できました。vecとsyswriteを組み合わせるといいんですね。
ありがとうございました。
>>913
フォーマットを指定すると明示的に文字列変換が行われてしまうので、
よけい都合が悪いと思ったんです。0x20についてはその通りでした。
0916デフォルトの名無しさん
NGNG変換なしなら、\x20じゃなきゃ…。
0917886
NGNGその分、テキスト処理でめっぽう強いのだけど。
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNGぜんぜん苦手じゃないよ。おまいの技量が足りないだけ。
0920デフォルトの名無しさん
NGNGvecはちょっと用途が違うし、syswriteにいたっては無関係もいいとこだぞ。
普通はpackしてprintする。perl packでぐぐれ。
syswriteはいわばprintのバッファリングなし版。意味もわからず使うべきものではない。
0921デフォルトの名無しさん
NGNGPerlがバイナリの扱いが苦手だと思う点を述べよ
>>919
Perlがバイナリの扱いが苦手では無いと思う点を述べよ
0922デフォルトの名無しさん
NGNG>>920も出た時点で、
>Perlがバイナリの扱いが苦手では無いと思う点を述べよ
などとほざく理由を述べよ。前晒し:ぼくpack使えない。
0923デフォルトの名無しさん
NGNGpackとprintを使ったサンプルきぼん
0924デフォルトの名無しさん
NGNGsyswriteを使う場合は、アプリ側でバッファリングして、
書き出しのタイミングを自前で操作。
printの場合はseekでファイルポインタを移動させて書きこみ、
フラッシュのタイミングはPerl(Libc?)次第。
ということですよね。syswriteのようにファイルの任意のポイントを
指定して書き込む関数はprint系の関数にはないんでしょうか?
0925デフォルトの名無しさん
NGNGこんなんでどうでしょ
perl -e 'open(OUT,">tmp.txt");print OUT pack CCCC,0x50,0x65,0x72,0x7C'
0926デフォルトの名無しさん
NGNGそれではvecというのはどういう用途が正しいのでしょうか?
0927デフォルトの名無しさん
NGNG$a="abc";vec($a,1,8)=0x42;print$a
substrもvecも結局同じというみたいですね。
0928デフォルトの名無しさん
NGNG$test = "プリンター";
$mach = "プリンター";
if($test =~ /$mach/){
print"あたり\n";
}else{
print"はずれ\n";
}
と書くと、エラーがでてしまいました。
if($test =~ /$mach/){
でエラーです。
どうしてだろうかと、いろいろやってみた結果、$machがプリンタだと
エラーが起きないのに対し、プリンターだとエラーになってしまうようです。
正規表現のトラブルとして検索したのですが"ー"ではヒットせずに
困っております。
この場合、どうすればよいのでしょうか?
アドバイスいただければ幸いです。
0929デフォルトの名無しさん
NGNG0930デフォルトの名無しさん
NGNGバイナリ変換はココでもよめ。
ttp://www.mikeneko.ne.jp/~lab/perl/numerical_transform/
>>928
メタ文字が原因 /\Q$mach\E/ にしたらうごかねぇ?
0932928
NGNGリンク先は911さんへのレスでしたか。
0933デフォルトの名無しさん
NGNG0934927
NGNGという意味なのに対して、
vecの引数は「EXPRのビット長をアライメントとしたOffset番目」
という意味ですね。
似てるようでいてちょっと違いましたね。スマソ
>>933 こちらへどうぞ
http://pc5.2ch.net/test/read.cgi/unix/1005039977/
0935デフォルトの名無しさん
NGNG0936デフォルトの名無しさん
NGNG1byte のバイナリを出力するときは、chr でもOK。
print OUT chr($a);
1byte バイナリ→アスキー変換は ord 。
0937デフォルトの名無しさん
NGNGPOPでCGIにクエリを投げて、responseを取得したいのですが、
下記のように書くと、$answer1、$answer2が全く同じものが返ってくるんです。
デバッガで見ると&POPに渡した変数は、ちゃんと$issnに入ってるのに、パケットを
拾って見たところ、全く同じrequestしてるんです。
$answer1 = POP("1234-5678");
$answer2 = POP("5678-1234");
この順番を逆にするとanswer2は上手くいって、answer1に2と同じものが入ります。
根本的なミスだろうとは思うんですが・・。
↓スクリプト
0938デフォルトの名無しさん
NGNGuse LWP 5.64;
use URI;
use encoding 'utf8';
binmode(STDERR, ':raw :encoding(utf8)');
use Encode;
$answer1 = POP("1234-5678");
$answer2 = POP("5678-1234");
sub POP {
my $issn = @_[0];
my $browser = LWP::UserAgent -> new;
my $url = URI -> new('http://www-lib.ac.jp/Search');
my $response = $browser->post( $url,
[
db => "all",
isbn_issn => $issn,
submit => "Search",
],
);
$response = decode('shiftjis',$response->content);
return $response;
}
0939デフォルトの名無しさん
NGNG0940デフォルトの名無しさん
NGNG0941デフォルトの名無しさん
NGNGちょっと思ったのは
\%hogehogeってのと\@hogehogeってのは等価なのかね? 一般論として。
つまり、 ['hoge', 'hoge', 'hoge', 'hoge']と
{'hoge' => 'hoge', 'hoge' => 'hoge'}は書き方は違うけど中身は一緒?
今日まで、んなこと気にしたことなかったケド。
0942942
NGNG[ ... ]のとこを{ ... }にしたら動いたりしないかな。しないか。
0943942
NGNGだからそれは関係ないな。
0944デフォルトの名無しさん
NGNG答えではないけど、、
use LWP 5.64;
を
use LWP::UserAgent;
],
を
]
にしてみたらどうでしょう? 関係ないかな。。
0945937
NGNG文書中 POP -> POSTの間違えです。恥
>>941-944
レスありがとうございます。>>938は元のスクリプトが長いもんで、
適当に縮めて書き直しました。今風呂に入って見直してみたら、細かい
間違いがいっぱいありました。疲れ果ててました。すいません。
ただ気を取り直して、別のスクリプトを新しく書いてみたら、上手く逝ってしまいました。
元がどうして上手く逝かないかはまだわかりませんが・・。
↓一応実働します
0946937
NGNGuse LWP 5.64;
use URI;
use encoding 'utf8';
binmode(STDERR, ':raw :encoding(utf8)');
use Encode;
$answer1 = POST("200-0000"); #郵便番号を入れる
$answer2 = POST("100-0000"); #郵便番号を入れる
print $answer1."\n".$answer2;
sub POST {
my $zip = $_[0];
my $browser = LWP::UserAgent -> new;
my $url = URI -> new('http://search.post.japanpost.jp/7zip/zip2.cgi');
my $response = $browser->post( $url,
[
mode => "search",
start => "0",
end => "400",
keyword => $zip,
],
);
$response = decode('shiftjis',$response->content);
return $response;
}
0947デフォルトの名無しさん
NGNG全然別物ですから・・・
>今日まで、んなこと気にしたことなかったケド。
大丈夫かお前さん
0948デフォルトの名無しさん
NGNG打ち直さずにコピペしろってことで。
0949デフォルトの名無しさん
NGNG>>941 じゃないが、>>942 ですぐに気付いてるよ。
マターリいきましょ。
[...] は配列へのリファレンス、{...} はハッシュへの
リファレンスね。
0950デフォルトの名無しさん
NGNG0951デフォルトの名無しさん
NGNG[]と{}は別物なんだけど、LWP::UserAgentのpostはどっちも
食えるように作ってあるという話ですな。普通は混同しては
いけない。
0952ぬるぽ ◆GmgU93SCyE
NGNG0953デフォルトの名無しさん
NGNG0954デフォルトの名無しさん
NGNGおそらく、DES暗号あたりかな
0955デフォルトの名無しさん
NGNG「2ch」「トリップ」あたりでぐぐればいろいろでてくるよ。
perlならこのへんかな?
ttp://multix.jp/html/memo/030525.html#0002
0956デフォルトの名無しさん
NGNGDESてのが元々あり
平分←(鍵)→暗号文
と行き来できるもので(以下略
(XOR演算とかbitのローテーションとか)
Cryptは最初に固定の平分を暗号文にし、
その暗号文を繰り返し(以下略
(salt、patternとか)
トリップはそのcryptを利用しており
キーの2,3文字目をsaltと固定し、cryptの戻り値の末尾10文字を(以下略
($trip = substr(crypt($key, (substr($key."H.", 1, 2))), -10);とか)
適当、半分くらいは当たってるはずだ。ガッはしてあげません。
0957ぬるぽ ◆GmgU93SCyE
NGNGPHPでオナジことできればいいのになぁ・・・
0958デフォルトの名無しさん
NGNG0959ぬるぽ ◆GmgU93SCyE
NGNG0960デフォルトの名無しさん
NGNGスレタイ読め
もしくはphp cryptで検索くらいしろ。
0961デフォルトの名無しさん
NGNGperlの処理で、”Enterキーを押す”っていう操作は
perlでは、どう記述するのでしょうか?
ご存知の方是非教えて頂きたいのですが?
0962デフォルトの名無しさん
NGNG$key = <STDIN>;
if($key eq "\r\n" or $key eq "\n" or $key eq "\r"){print 'Enterキター';}
〜
0963デフォルトの名無しさん
NGNGとか
0964デフォルトの名無しさん
NGNGEnterキーとReturnキーは区別するの?
0965デフォルトの名無しさん
NGNG>>962さん
ありがとうございます!
この処理で2日間悩んでました。
助かりました。
ちなみに、>>963の改行はやったんですが、うまくいかなくて・・・
0966937
NGNG昨日上手く逝ったはずのスクリプトですが、実際動かすとやっぱダメでした。
http://www.perldoc.com/perl5.8.0/lib/LWP/UserAgent.html
によると$ua->post($url, \%formref, Header => Value,...);とあり
>>951さんの言う通りLWP::UserAgentのpostはどっちも食えるようです。
んで、分かりにくかったので、ハッシュに代入、ハッシュのリファレンスを入れました。
コレでも駄目だったんですが、>>946の郵便局のURLと郵便局のフォームのペアを入れ
ると上手く逝きます。じゃあ、CGIが駄目なのかと思い、Etherealでパケットをみると
同じパケットを送っています。元は、図書館のCGIから論文を探してくるスクリプトです。
わけわからんです。
↓スクリプト
0967937
NGNGuse LWP 5.64;
use URI;
use encoding 'utf8';
binmode(STDERR, ':raw :encoding(utf8)');
use Encode;
Tosho("issncode1");
Tosho("issncode2");
sub Tosho {
%form = (
db => "all",
wa => "w",
yo => "y",
lib_cd => "00",
isbn_issn => $_[0],
search_type => "Detail",
);
print $_[0];#変数も渡っていて
print $form{isbn_issn};#ちゃんとハッシュにも入っている
print "\n\n";
my $browser = LWP::UserAgent -> new;
my $url = URI -> new('http://www.lib.ac.jp/Scripts/WebOpac.dll/Search');
my $response = $browser->post( $url,\%form);
my $response = decode('shiftjis',$response->content);
print $response;#なのにresponseが同じ・・
print "\n";
}
0968デフォルトの名無しさん
NGNG不特定の変数名などに「なんたらかんたら」とか
「ほにゃらら」みたいな感じで'foo'と'hoge'が使われますよね?
あれの意味とか起源って、なんですか?
hogeは、日本限定とか?知ってる方、教えて下さい。
0971デフォルトの名無しさん
NGNGまあ ok かと。
http://www.ietf.org/rfc/rfc3092.txt
0972デフォルトの名無しさん
NGNG「\」を「\」に置換した上で
URLを差し替えて試してみたら正常に動きましたけど。
(Redhat上のPerl5.8.0)
そこ以外のどこかがおかしいんじゃないの
0973デフォルトの名無しさん
NGNGDES はアルゴリズムが公開されているので、
どの言語でも実装できますよ。
--
次スレよろです
0974デフォルトの名無しさん
NGNGたとえば負の数値は全て偽、みたいな?
こーゆーのがあると記述がサッパリして見やすいなとか思っただけなんで、
ないんならそれでおkです。
0975デフォルトの名無しさん
NGNG演算子のオーバーライド
0976デフォルトの名無しさん
NGNG0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNG>同じパケットを送っています
つーのはリクエストが同じってこと?
同じリクエストならこの場合は同じレスポンスが返るだろうけど
リクエストが同じなのかレスポンスが同じなのかはっきりしてちょんまげ
あとここではバックスラッシュを \ で書いても無問題だと思うよ
0979デフォルトの名無しさん
NGNGarigatorだろ。正しい英語を使いませう
0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNGPerlについての質問箱 12箱目
http://pc5.2ch.net/test/read.cgi/tech/1094579428/
おつんつん
0982937
NGNGのエスケープを助けるサブルーチンの配列のmy忘れでした。
レスくれた皆さん、ありがとうございました。なんかのために貼っておきます。
sub URI::query_form {
my $self = shift;
my $old = $self->query;
if (@_) {
# Try to set query string
my @query;
while (my($key,$vals) = splice(@_, 0, 2)) {
$key = '' unless defined $key;
$key =〜 s/([;\/?:@&=+,\$\[\]%])/$URI::Escape::escapes{$1}/g;
$key =〜 s/ /+/g;
$vals = [ref($vals) ? @$vals : $vals];
for my $val (@$vals) {
$val = '' unless defined $val;
#################### ここから日本語化パッチ部分 ####################
my @work = unpack('C*', $val);
$val = '';
0983937
NGNGif ((($c >= 0x30) && ($c <= 0x39)) || # 数値はそのまま
(($c >= 0x41) && ($c <= 0x5A)) || # アルファベット(大文字)もそのまま
(($c >= 0x61) && ($c <= 0x7A))) { # アルファベット(小文字)もそのまま
$val .= chr($c);
} elsif ($c == 0x20) { # 空白は'+'に
$val .= '+';
} else { # それ以外は%XX形式に変換する。
$val .= sprintf("%%%02X", $c);
}
}
#################### 日本語化パッチ部分ここまで ####################
#この行は削除 $val =〜 s/([;\/?:@&=+,\$\[\]%])/$URI::Escape::escapes{$1}/g;
# この行は削除 $val =〜 s/ /+/g;
push(@query, "$key=$val");
}
}
$self->query(join('&', @query));
}
return if !defined($old) || !length($old) || !defined(wantarray);
return unless $old =〜 /=/; # not a form
map { s/\+/ /g; uri_unescape($_) }
map { /=/ ? split(/=/, $_, 2) : ($_ => '')} split(/&/, $old);
}
0984937
NGNGもとはo'reillyの本にあった、サブルーチンです。日本語POSTには必須だと思われ。
0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNGuse strict;してないの?
0987デフォルトの名無しさん
NGNG無理。if(is_positive($number)){ ... } とでもするしかないな。
特定のスコープだけリテラルの意味を変えることなら出来る(perldoc overload)が、
あくまでもリテラルの意味を変えるだけだからな。
0988デフォルトの名無しさん
NGNG君はもう質問するのやめなさい
0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG「日本語化パッチ部分ここまで」の直後の
削除された正規表現を工夫すると、パッチ全体が
いらなくなるように見えるのは俺だけだろうか。
あと、今回の教訓としては、泥縄式にデバッグするときは、
「切り分け」が重要。(こっからここまでは正常、とか確認して
怪しいエリアを絞ってく) なんだけど、そこがうまくいかなかった
という感じだね。
ふつうだったら >>967 が絞り込まれた結果のはずだとみんな思うだろうし。
0991デフォルトの名無しさん
NGNG普通改造してるなんて思わないよな...
0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1094579428/
0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。