Perlコーディング初心者質問スレ Part 38
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
04/10/07 23:23:08ID:kiEzDCJF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0002nobodyさん
04/10/07 23:28:34ID:???関連スレ
CGI: Common Gateway Interface part 11
http://pc5.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc5.2ch.net/test/read.cgi/php/1030209573/
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc5.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ) part2
http://pc5.2ch.net/test/read.cgi/php/1092304968/
△▲ WebProg 初心者の質問 Part10 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1095633323/
【Perl】ファイルロック(排他処理)について語ろう
http://pc5.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc5.2ch.net/test/read.cgi/php/1034645635/
【Perl】掲示板を使ろう!
http://pc5.2ch.net/test/read.cgi/php/988890976/
Perlモジュールについて
http://pc5.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc5.2ch.net/test/read.cgi/php/1030548610/
0003nobodyさん
04/10/07 23:29:28ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
0004nobodyさん
04/10/07 23:30:33ID:???Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/
part31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記)
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
part35 http://pc5.2ch.net/test/read.cgi/php/1085557731/
part36 http://pc5.2ch.net/test/read.cgi/php/1089779036/
part37 http://pc5.2ch.net/test/read.cgi/php/1093106507/ (前スレ)
0005nobodyさん
04/10/07 23:33:11ID:???[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: 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://perldoc.com
perldoc.jp: http://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/
0006nobodyさん
04/10/07 23:34:58ID:???コーディング 【coding】
プログラミング言語を使ってソフトウェアの設計図にあたるソースコードを作成すること。
(e-Wordsより)
自分の質問がPerlに関することなのか、
それともPerlではなくCGIやHTMLについてなのかを切り分けした上で、
質問して下さい。
0008nobodyさん
04/10/07 23:39:26ID:???http://www.geocities.co.jp/SiliconValley/5656/
http://www.hyuki.com/writing/techask.html
これはMLでの作法ですが、BBSでの質問にも当てはまると思います。
例え匿名でも、回線の向こうに居るのはあなたと同じただの人ですよ。
0009nobodyさん
04/10/07 23:40:21ID:???WikipediaのPerlの項目
http://ja.wikipedia.org/wiki/Perl
0012nobodyさん
04/10/08 00:40:34ID:LN3yr29s一般的に美しいとされるコードの書き方はどのような書き方ですか?
参考になるようなソースがあればお教えください。
0013nobodyさん
04/10/08 01:16:04ID:???http://perldoc.com/perl5.8.4/pod/perlstyle.html
http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html
001412
04/10/08 02:14:31ID:LN3yr29sしかしながら、見た目の美しさではなく、
コードを後から読む人にとって、
直感的に、わかりやすいコードという意味で、美しいといいました。
誤解を招く言い方でスイマセンでした。
0015nobodyさん
04/10/08 03:17:19ID:???perlstyle にはそういう意味で美しくする為の Tips も載っているだろ?
より具体的に知りたければ、自分の書いたコードをコードレビュー系の
ML なりスレなりに投下してごらん。偏った意見が聞けて面白いよ。
http://pc5.2ch.net/test/read.cgi/php/1049514428/
001612
04/10/08 03:46:07ID:LN3yr29s参考になりました。どうもありがとう。
0017nobodyさん
04/10/08 03:58:51ID:???スレ建て乙
>>14
>コードを後から読む人にとって
それだったら、コーディング標準に従ったコード >>13のURL参照
独自ルールだとどうしても*自分にとって*美しいコードになってしまうことがあるので
質問の意図からすると、
設計の簡潔さ、適切なサンプルコード/ドキュメント(POD)を重視した方がいいんじゃないかな
場合によってはコードを読まずにすませられることもあるよ。
0018nobodyさん
04/10/08 09:25:10ID:D4NtGdWqシェルスクリプトでいうところの↓みたいなことがしたいんですが
echo "current dir is `pwd`"
以前このスレで教えてもらったのですがやり方を忘れてしまいました
ログもググってみたんですが見つかりませんでした
0019nobodyさん
04/10/08 11:14:19ID:???これが高速だし読みやすいのでお勧めだが…
(printに関して言えば、ピリオドよりコンマの方が良いが)
print "current dir is ${\`pwd`}";
print "current dir is ${\do{ `pwd` }";
print "current dir is @{[ `pwd` ]}";
ま、こんな感じで。
0020nobodyさん
04/10/08 14:50:00ID:???0022nobodyさん
04/10/08 16:02:04ID:SvnbdnXk別ウィンドウを使って表示することは可能でしょうか。
javascriptを使えばできるようなのですが、
perlのみでは無理なのでしょうか?
スレ違いなら申し訳ないです。
002312
04/10/08 16:09:32ID:HUGW4EIRどうもありがとうございます。
>>コードを後から読む人にとって
>設計の簡潔さ、適切なサンプルコード/ドキュメント(POD)を重視した方がいいんじゃないかな
>場合によってはコードを読まずにすませられることもあるよ。
ところで、PODとは、コメントのことでしょうか?
コメントだとしても、コードを読まずに済ませられるとは考えにくいので
違う気もします。宜しけれご教授ください。
0024nobodyさん
04/10/08 16:28:01ID:???スレ違いもしくは板違い。
http://pc5.2ch.net/hp/
http://pc5.2ch.net/test/read.cgi/php/1095633323/
>>23
http://perldoc.com/perl5.8.4/pod/perlpod.html
http://perldoc.com/perl5.8.4/pod/perlpodspec.html
http://perldoc.jp/docs/perl/5.6.1/perlpod.pod
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlpod.html
0025nobodyさん
04/10/08 16:39:18ID:3yz40YUbopen MAIL ,"| /usr/sbin/sendmail -t";
print MAIL "From: ".'"ほげほげ" <info@2ch.net>'."\n";
print MAIL "To: ".''."\n";
print MAIL "Cc: ".'<test@test.jp> <hoge@hoge.net>'."\n";
print MAIL "Bcc: ".''."\n";
print MAIL "Subject: ".""."\n";
print MAIL "\n";
print MAIL "test";
close MAIL;
みたいにしても動作しませんでした。
もちろん普通にtoだけいれたら動作します。
どなたかお願いします。
0026nobodyさん
04/10/08 17:35:29ID:???0027nobodyさん
04/10/08 17:47:14ID:???> ところで、PODとは、コメントのことでしょうか?
> コメントだとしても、コードを読まずに済ませられるとは考えにくいので
PODは、コメントと言うよりは、ドキュメントと言った方が適切かもしれない。
Perlの標準モジュールの多くは慣習的に、
モジュールの説明、そのモジュールの使い方(実際に動く最小限のコード)
関数/メソッドのリファレンス、... などを含んでいるので
たとえば、◯◯をしたいといったとき、
PODにそのサンプルが載っていれば内部実装のコードを読む必要はない。
(デバッグで必要になる時までは...)
002812
04/10/08 18:01:20ID:HUGW4EIRどうもありがとう。色々コード&POD読んでみます。
精進します。ありがとう。
0031nobodyさん
04/10/08 18:38:42ID:???open MAIL ,"| /usr/sbin/sendmail -t";
print MAIL "From: ほげほげ <info@2ch.net>\n";
print MAIL "To: \n";
print MAIL "Cc: <test@test.jp>,<hoge@hoge.net>\n";
print MAIL "Bcc: \n";
print MAIL "Subject: スレ違い\n";
print MAIL "\n";
print MAIL "Ccでアドレス列記はperlには関係することではない";
close MAIL;
0032nobodyさん
04/10/08 19:01:26ID:???0035nobodyさん
04/10/09 19:46:27ID:r3ZvWrWVログが10行を越したときに1行だけ残してあとのログが消えるようにするのとどっちが負荷が低いのでしょう_?
つまり、頻繁にログを1行にするのと、100行ものログを読みこむのと、どちらが負荷がかかるんでしょう。
0037初心者です。
04/10/09 20:26:36ID:fCvsZBf9以下の戻り先URLの設定でターゲットの設定は出来ないのでしょうか?
_topに戻りたいのですが、戻れません。
# 戻り先URL
$home = 'http://xxxxx.com/index.html';
誰か教えて下さいませ。大変困ってます。<(_ _)>
0038nobodyさん
04/10/09 20:29:04ID:???スレ違いもしくは板違い。
http://pc5.2ch.net/hp/
http://pc5.2ch.net/test/read.cgi/php/1095633323/
0039nobodyさん
04/10/09 21:00:25ID:LGUhwPv/SMTPを使ってのメール送信で送れてはいますが
OEでの受信で宛先の部分が
undisclosed-recipients になってしまいます。
送信元は正常に表示されているのですが。
どこを修正すればよいでしょうか?
お願いします。
use Net::SMTP;
$smtp = Net::SMTP->new('***.***.ne.jp'); #SMTPサーバ
$smtp->mail(from@test.ne.jp); #送信元
$smtp->to(to@test@ne.jp); #宛先
$smtp->data();
$smtp->datasend("Subject:メール\n"); #件名
$smtp->datasend("メール本文");
$smtp->dataend();
$smtp->quit;
004039
04/10/09 21:03:05ID:LGUhwPv/× $smtp->to(to@test@ne.jp); #宛先
○ $smtp->to(to@test.ne.jp); #宛先
004139
04/10/09 21:04:23ID:LGUhwPv/0043nobodyさん
04/10/09 21:21:16ID:???> $smtp->mail(from@test.ne.jp); #送信元
$smtp->mail('from@example.jp'); # MAIL FROM
> $smtp->to(to@test@ne.jp); #宛先
$smtp->to('to@example.jp'); # RCPT TO
> $smtp->datasend("Subject:メール\n"); #件名
> $smtp->datasend("メール本文");
$smtp->datasend("To: 39 <to\@example.jp>\n"); # To: ヘッダ
$smtp->datasend("Subject: メール\n");
$smtp->datasend("\n");
$smtp->datasend("メール本文");
0045nobodyさん
04/10/09 21:46:43ID:LGUhwPv/返信ありがとうございます。
$smtp->mail(to@test.ne.jp); のすぐ下に
$smtp->datasend("To: to@test.ne.jp\n"); を
追加してみたけど駄目でした。
どこがまずいのでしょうか?
0046nobodyさん
04/10/09 21:48:33ID:LGUhwPv/ありがとうございます。
やってみます。
0047nobodyさん
04/10/10 00:20:52ID:mkQG3wAc操作したいのですがうまくいきません
my $p = { data => 1 };
&abc($p);
print "$p->{data}\n";
sub abc {
my $p = shift;
$p->{data} = 2;
}
↑のようにやってみたのですがなぜかダメでした
再帰処理がしたいので関数内から直接変数の値をいじることはできません
0048nobodyさん
04/10/10 00:32:57ID:???そのコードは問題なく動くので別の所がおかしいのだろう。
use strict; や -w オプション、デバッガで地道に調べてくれ。
0049nobodyさん
04/10/10 00:48:31ID:???0050nobodyさん
04/10/10 02:42:47ID:???書き込みとか削除とかをifで分けていく部分はどういう風にしたらいいんですか?
0051nobodyさん
04/10/10 03:08:11ID:???0052nobodyさん
04/10/10 03:10:22ID:???&write;
} elsif ($mode eq 'delete') {
&delete;
}
こんな感じのt所です。
0053nobodyさん
04/10/10 03:11:28ID:???http://module.jp/dist/web+db-press6-perl-oo.pdf
0055nobodyさん
04/10/10 03:18:58ID:vb66WTKp@{$AoA[$i]} = @array で代用できるという事がよく分かりません。
@{$AoA[$i]} = @array と言うのはどういうことですか?
@($AoA[$i]) = @array との違いを教えてください。
0056(1/2)
04/10/10 04:56:32ID:???普通の配列変数を書く時の @array って書き方。コレ、本当は @{array} の
{ } を省略したものなんだよ。@{ と } で挟まれたホニャララを配列として扱い
ますよ、って意味で、ホニャララが 裸のワード だったら普通の配列変数と
して扱われるんだ。
@{array} = (0,2,4,8); # array という名前の配列変数
ホニャララはリファレンスでも構わなくて、配列に対してできる操作は
同じようにできちゃう。配列の要素を見る時は ${ ホニャララ }[ 添え字 ]
って構文になるよ。
$a_ref = [1,3,5,7]; # 名無しのリストリファレンス
print @{array}; push @{array}, 10; ${array}[0] = 12;
print @{$a_ref}; push @{$a_ref}, 9; ${$a_ref}[0] = 11;
そして当然、代入も。
@{array} = (0,2,4,8);
@{$a_ref} = (1,3,5,7);
文法的に間違えようのない場所なら、この { } は省略できるんだ。
print @array;
print @$a_ref;
0057(2/2)
04/10/10 05:01:32ID:???Perl の変数は予め宣言しなくても使えるよね。この振る舞いと同じように、
未定義な「場所」をムリヤリ配列として使おうとすると、本当にそういう事に
しちゃうんだ。その「場所」がスカラー値しか収められない「場所」なら、
それ自体はスカラー値であるリストリファレンスが収まるってわけさ。
@{AoA} = (); # 空っぽの配列
# スカラー値を収められる入れ物に、リストリファレンスを作って入れる
${AoA}[0] = [0,2,4,8];
# ${AoA}[1] は配列だと勝手に決めて、代入しちゃう!
@{${AoA}[1]} = (1,3,5,7);
気をつけなきゃいけないのは、未定義でもリファレンスでもない「場所」を
ムリヤリ配列として使おうとした時。perl はこういう時、下の例なら $foo の
値、つまり hoge って名前の配列変数を勝手に使っちゃうんだ。
$foo = 'hoge'; # ただの文字列
@hoge = (2,4,6,8);
@{$foo} = (0,1,2,3);
print @hoge; # 0123
この危険な機能の名前はシンボリックリファレンス。 use strict 'refs'; と
唱えておく事で禁止できるよ。
0058nobodyさん
04/10/10 14:32:49ID:bziwCOA4どのような関数がありますでしょうか?
例えば、test@aaa.ne.jpの aaa.ne.jpだけを取得したいんです。
ご存知の方お願いします。
0060nobodyさん
04/10/10 15:21:22ID:bziwCOA4indexは検索文字が対象文字列に存在するかのだと思いましたが
どのようにすればよいんでしょうか?
0061nobodyさん
04/10/10 16:18:08ID:???my $addr_spec = 'test@example.com';
# http://tohoho.wakusei.ne.jp/wwwperl2.htm#index
# http://tohoho.wakusei.ne.jp/wwwperl2.htm#substr
my $domain = substr $addr_spec, index($addr_spec, '@') + 1;
# http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlre.html
($domain) = $addr_spec =~ /([^@]+)\z/;
006255
04/10/10 19:15:24ID:vb66WTKpありがとうございました。
つまり
$a_ref = [0,2,4,6];
などと記述があった後に
@{$a_ref} = (1,3,5,7);
と書かれていたら
$a_ref = [1,3,5,7]; と読替えて良いと言うことでしょうか?
006339
04/10/10 20:18:00ID:bziwCOA4できました。
ありがとうございました。
0064大文字小文字混在をアルファベット順にソートしたい
04/10/10 21:23:27ID:0NABqG2Bこれを得点の高い順に並べ、さらに同じ得点同士ではアルファベット順に並べて
IDを取り出したいと思います。そこで以下のようにしました。
%data= ('aaa' => 90, 'bbb' => 80, 'CCC' => 80, 'DDD' => 70,);
@id_array = sort { $data{$b} <=> $data{$a} or $a cmp $b} keys %data;
しかし、これでは同じ得点の人が
大文字のアルファベット順→小文字のアルファベット順になってしまいました。
(上の例ではaaa, CCC, bbb, DDD,の順になる)
アルファベットの順(aaa, bbb, CCC, DDDの順)に並べ替える方法はありますか?
0065nobodyさん
04/10/10 21:35:49ID:???自分で sort の中に何が書けるかわかってないんじゃない?
まぁいいや。
sort { $data{$b} <=> $data{$a} or lc($a) cmp lc($b) }
とか、大文字と小文字を無くすようなことをしてやれば、全て正解でしょうに。
006664
04/10/10 22:02:50ID:0NABqG2Bできました。
文字コード自体が大文字アルファベット→小文字アルファベットの順に
なってるので、仕様だと思ってあきらめていました。
ありがとうございます。・゚・(ノД`)・゚・。
0067nobodyさん
04/10/11 00:30:18ID:???いや、だいぶ違う。
@$a_ref = (...)は新しいリファレンスを作らないし、tieやblessなどの影響はそのまま。
$a_ref = []は新しいリファレンスを作る。
特に後者にする必要がなければ、前者の方法を使った方がいい。
006862
04/10/11 01:38:46ID:21NinhMEわかりました。あの後、ラクダ読んでなんとなく
感覚が掴めました。ありがとうございました。
0069nobodyさん
04/10/11 17:04:09ID:???漏れは直さないでそのまま使えてるんだけどなんで一般的に直す必要があるのでしょうか?
0070nobodyさん
04/10/11 17:30:37ID:???スレ違い。
http://pc5.2ch.net/test/read.cgi/php/1095633323/
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616
0071nobodyさん
04/10/12 00:56:44ID:J8ZBB7PX掲示板のCGIを作ってる最中なんだけど、
(1)全ての書き込みを一つのログファイルにする
(2)書き込み毎にログファイルをつくる
ログが1000件あると仮定して10件を表示する場合、どちらの方がリソース食うだろう?
(1)の場合、処理手順は少ないが余計なデータを大量に読み込む。
(2)の場合、opendir、readdirでファイル名を読み込み、かつ各々のファイルを読み込むので、
処理は繁雑になるが余計なデータをメモリ上に展開しない。
はやりシステムとのやり取りが多くなる(2)の方がコスト高いのだろうか?
0072nobodyさん
04/10/12 00:59:02ID:???スレ違い。
http://pc5.2ch.net/test/read.cgi/php/1034645635/
0073nobodyさん
04/10/12 01:04:57ID:???儂のケースでは、データーが300件ぐらいで使ってたフリー鯖でゴルァされたのでsql導入した。
0075nobodyさん
04/10/12 01:29:03ID:???seekで位置決めしてread,writeってのもあり。
0076nobodyさん
04/10/12 01:35:04ID:???レスありがとうございます。とりあえず、一般的(と思われる)(1)の方法でやってみます。
データは可変長ですが、固定長にしてoffsetで狙い撃ちもアリですね。ちょっと工夫してみます。
>>73
すいません。そのスレ知りませんでした。
0077nobodyさん
04/10/12 01:52:29ID:???0078nobodyさん
04/10/12 10:44:09ID:???open IN,$dat.dat
@var[50..60]=<IN>
これは$dat.datを全部読んでいるんですか?それとも60行目で処理が終了しますか?
0079nobodyさん
04/10/12 11:21:32ID:???0080nobodyさん
04/10/12 11:27:40ID:???読むことは読むけど、速いことは速いんじゃない?
今のCPUで読み込みファイルの大きさで遅いってことは、普通の取り扱う範囲の
テキストファイル(1M以下程度)だとあり得ない希ガス。
Perlが一番遅いのって、「値のコピー」周辺だと思うんだけどネェ。
(特にリスト系)
まぁ、ファイルの大小と、スライス有・無でベンチとってみれヴぁ?
0081nobodyさん
04/10/12 11:47:38ID:???前スレにファイルの扱いの方が遅いと書いてあった希ガス
よほどたいそうなモン作らない限りは誤差の範囲だろ
0082nobodyさん
04/10/12 11:59:34ID:???これの作り方教えて下さい
0083nobodyさん
04/10/12 12:11:37ID:???0084nobodyさん
04/10/12 15:01:19ID:???出力結果の見方がわかりません。
テンプレにはベンチマーク関連の資料が見当たらないのですが、
見方などが載っているサイトをご存知の方いませんか?
0085nobodyさん
04/10/12 16:54:23ID:???>>3
http://perldoc.com/perl5.8.4/lib/Benchmark.html
http://pc5.2ch.net/test/read.cgi/php/997829243/
出力のどの部分が分からんのか具体的に示した方がいいよ。
0086nobodyさん
04/10/13 12:37:35ID:SrofvYG0ただし、$p1 〜 $p7はそれぞれ違う数字になるように代入したい
と思い、こんなコードを考えたのですが
008786
04/10/13 12:38:00ID:SrofvYG0$p2 = int(rand 7);
while($p1 == $p2){
$p2 = int(rand 7);
}
$p3 = int(rand 7);
while($p1 == $p3 or $p2 == $p3){
$p3 = int(rand 7);
}
$p4 = int(rand 7);
while($p1 == $p4 or $p2 == $p4 or $p3 == $p4){
$p4 = int(rand 7);
}
$p5 = int(rand 7);
while($p1 == $p5 or $p2 == $p5 or $p3 == $p5 or $p4 == $p5){
$p5 = int(rand 7);
}
$p6 = int(rand 7);
while($p1 == $p6 or $p2 == $p6 or $p3 == $p6 or $p4 == $p6 or $p5 == $p6){
$p6 = int(rand 7);
}
$p7 = int(rand 7);
while($p1 == $p7 or $p2 == $p7 or $p3 == $p7 or $p4 == $p7 or $p5 == $p7 or $p6 == $p7){
$p7 = int(rand 7);
}
008886
04/10/13 12:38:40ID:SrofvYG0p1〜p100までに1〜100までの数字をそれぞれ違う数字が入るようにするなんてするとひどいコードになる事に・・・
うまくループ構文使えばもっと簡単なコードになる気がするのですが
私では作れませんでした・・・どなたかご存知でしたら教えていただけますでしょうか。
(ちなみになぜこんな事をやりだしたかというと、特定個数の全てのアイコンを毎回順序をランダムで表示したいと考えたからです)
連続カキコすいません。(改行エラーでたので)
0089nobodyさん
04/10/13 12:41:40ID:???例えば、普通にリンクを貼るだけならできるのですが、
自サイトへはinner、他サイトへはouterというスタイルを適用したいと思っています。
ログの例:(MyIDを含むのが自サイトとします)
http://localhost/MyID/<BR>http://www.2ch.net/
出したい出力結果(HTML上):
<A href="http://localhost/MyID/"class="inner">http://localhost/MyID/</A><BR><A href="http://www.2ch.net/" class="outer">http://www.2ch.net/</A>
sub link { # 引数に渡すのはログ全体
$_[0] =~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+MyID[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<A href="$2" class="inner">$2<\/A>/g;
$_[0] =~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<A href="$2" class="outer">$2<\/A>/g;
}
こう記述すると、前者も後者も全てouterになってしまいます。
if ($_[0] =~ /MyID/) {
$_[0] =~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+MyID[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<A href="$2" class="inner">$2<\/A>/g;
} else {
$_[0] =~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<A href="$2" class="outer">$2<\/A>/g;
}
こうすると、今度は自サイトへのリンクは貼られるのですが、他サイトへのリンクは貼られなくなってしまいます。
上記の出したい出力結果を出すには、どのように記述したらよいのでしょうか。
009186
04/10/13 13:33:52ID:SrofvYG0配列ってランダマイズできるんですか・・・。
知りませんでした汗
ありがとうございました。探してやってみます。
0092nobodyさん
04/10/13 13:44:56ID:???@array=();
for ($count = 0; $count < 7; $count++) {
push(@array,$count);
}
&shuffle( \@array );
sub shuffle {
my $array = shift;
my $i;
for ($i = @$array; --$i; ) {
my $j = int rand ($i+1);
next if $i == $j;
@$array[$i,$j] = @$array[$j,$i];
}
}
&shuffleを呼び出す前と、呼び出した後で@arrayの中身を見てみよう。
0094nobodyさん
04/10/13 15:22:33ID:???@outにランダムな数値を出力。
@in = (1 ..100);
@out = ();
srand;
foreach (@in) {
my $r = int rand (@in + 1);
push(@out, $in[$r]);
$out[$r] = $_;
}
0096nobodyさん
04/10/13 15:48:10ID:???srand(time());
%hash = map {$_ => rand()} 0 .. 6;
@array = map $_, sort {$hash{$a} <=> $hash{$b}} keys(%hash);
print "@array\n";
0097nobodyさん
04/10/13 16:04:53ID:???List::Utilのshuffle使うな
0098nobodyさん
04/10/13 16:07:16ID:???モジュールに頼りっきりになるのもアレだが、でも使えるものは使っていきたいよね。
0099nobodyさん
04/10/13 16:11:23ID:???↑の配列の中から18に一番近い数字を取り出すみたいなのはどうしたらいいでしょうか?
0100nobodyさん
04/10/13 16:20:30ID:???$seed =18;
$tmp = $seed;
@data = (12,15,20,50);
for(@data){
my $diff = abs($_ - $seed);
$min = $_ if($diff <= $tmp);
}
print $min;
こんなんでどない?
010199
04/10/13 16:24:16ID:???$seed =18;
$tmp = $seed;
@data = (12,15,20,50);
for(@data){
my $diff = abs($_ - $seed);
if($diff <= $tmp){
$min = $_;
$tmp = $diff;
}
}
print $min;
0102nobodyさん
04/10/13 16:27:05ID:???abs($_ - $seed);が0の時はlastで抜けちまった方が良さげ
0103nobodyさん
04/10/13 16:32:45ID:???0104nobodyさん
04/10/13 16:37:15ID:???reduce {abs($a-$seed)<abs($b-$seed)?$a:$b} @data
010586
04/10/13 18:17:10ID:???書いていただいた全てのコードが勉強になりました。
一つ一つ検証して試してみたいと思います。
0106nobodyさん
04/10/14 00:02:36ID:pD0/ztzCforなどで一個一個数えていくしかないのでしょうか?
010889
04/10/14 00:15:43ID:???それともこういうのは理論上無理なんですかね・・・
0109nobodyさん
04/10/14 00:33:02ID:???'C,3,青紫',
'B,4,赤',
'C,6,青',
'A,7,緑',
'A,9,紫',
'B,10,黄');
こんな感じである配列の先頭にあるa,b,cの数を数えて
連想配列に
%count = (A,3,
B,1,
C,2);
こんな感じに持って行くにはどうしたら良いんでしょう?
0110nobodyさん
04/10/14 00:46:44ID:???という配列のなかから一番多いものだけを取り出すってのはどうしたらいいですか?
この中だとりんごに当たりますね。
0111nobodyさん
04/10/14 00:49:57ID:???0113nobodyさん
04/10/14 01:31:30ID:???まずurlにマッチングさせてからinnerかouterか判定させれば?
urlの正規表現についてはググればすぐに出てくるので。
あと、エスケープする必要があるものとそうでないもの調べてくれ。
0114nobodyさん
04/10/14 02:27:52ID:???ここはアルゴリズムを質問するスレではない。
「こういうアルゴリズムを考えたので Perl で実装したいんですが
どうコーディングしたら良いですか?」
という質問形式にして出直してきたまえ。
例えば、いったん各々の個数を全部数え上げるというアルゴリズムで行くなら、
ハッシュをインクリメントしていって、数え終った後でソートする、というのが素直だろうな。
0115nobodyさん
04/10/14 05:34:49ID:???0116nobodyさん
04/10/14 06:51:34ID:ETIFZxwkNet::SSH::Perlを使ってサーバに入り、任意のメールアドレスに対してメール
を送信するスクリプトを作る。
【スクリプト】
#!/usr/bin/perl -w
use Net::SSH::Perl;
$host = "www.test.net";
$user = "hogehoge";
$pass = "2ch_test";
$cmd = "mail hoge\@hoge.ne.jp";
$body = "www.test.net is ok\n";
$ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass);
$ssh->cmd($cmd);
$ssh->cmd($body);
【説明】
スクリプトを実行したとき、指定したサーバにログインすることはできるので
すが、それ以上処理が進まず、メール送信もされません。ただ、スクリプトを
実行させてキーボードから文字を入力してCtrl-Cで処理を中断するとメールは
配信されます。
[mona@localhosst mona]% ./test.pl<Enter>
これはテストです。<Enter>
Ctrl-C
【教えて欲しいこと】
$bodyの内容を自動的に標準入力に代入し、メールを送信する。
加えて、サーバからの切断も自動的に行ってくれる。
以上の二点を解決したいです。
よろしくお願いします。
0117nobodyさん
04/10/14 08:14:10ID:???for(@a){
@b = split / | /; #全角or半角スペースで切る
}
for(@b){
print;
}
というコードを実行すると何故か
ゼ
と表示されます。これはどういうことでしょうか?
$aの「ァー」の部分を色々変えてみましたが、
こうなるのは「ァー」と「ぁー」です。
どなたか分る方いたら教えてください。
0118nobodyさん
04/10/14 08:36:03ID:eMIY0T+Hの表はユーザーエージェントの解説なのですが、表の一番下にあるような
「J-PHONE/4.0/J-SH51/SN*********」という文字列で、
SN以降を削除し他の部分だけを残したいんです。その場合の正規表現は
どう書けばいいのでしょうか?
$abc =~ s/(.+)[SN](.+)/$1/; だとダメでした。どなたかお力添えをお願いします。
0120nobodyさん
04/10/14 10:36:01ID:???たぶんソースをeucで書いてるだろうから、
use encoding 'euc-jp';
を頭に追加すれば直ると思うが。
unicode機能を有効にしないperlでは日本語の2バイトコードは
1つの文字としては扱えず、1バイトずつバラバラのバイト列と
なってしまう。
"ァー" = "\xa5\xa1\xa1\xbc"
/ | / = /\xa1\xa1| /
なので、ァーの部分は真中の\xa1\xa1の部分を区切りとして
splitされてしまい、\xa5\xbcが出力される。これは「ゼ」。
同様に「ぁー」のときは「ぜ」になってるはず。
0121nobodyさん
04/10/14 10:38:58ID:???http://www.din.or.jp/~ohzaki/perl.htm#JP_EUC_JP
ここから下を読むことを勧める。
0122118
04/10/14 10:39:49ID:eMIY0T+Hレスありがとうございます。
でもそれではうまく行きませんでした。
SN以降が削除されずにそのまま出力されているようです。
0123118
04/10/14 10:43:11ID:eMIY0T+H感謝感謝です。ありがとう。
0125117
04/10/14 12:42:18ID:???コードはEUCで書いてるのですが
扱ってるデータがS-JISだったりします。
use encoding 'euc-jp';
したら、データが化けてしまいます。
そういう場合
:コードの文字コードと 扱ってるデータの文字コードが違う場合:
どう対処したらよいのでしょうか?
0128nobodyさん
04/10/14 13:45:02ID:???最低限の検索ぐらいはやった上で質問しなきゃ。
コーディングでググれば?
検索わからない?
http://pc6.2ch.net/pcqa/
0131117
04/10/14 14:05:05ID:???http://www.din.or.jp/~ohzaki/perl.htm#JP_Trans
にそのまんま答えが書いてありました。
お騒がせいたしました。
0132nobodyさん
04/10/14 17:55:56ID:8JHhLpH4は
my *takesi;
と同じと考えてよろしいでしょうか?
0133nobodyさん
04/10/14 18:02:41ID:???コーディング 【coding】
プログラミング言語を使ってソフトウェアの設計図にあたるソースコードを作成すること。
(e-Wordsより)
>>126は何故に>>125に対してこれを読めって言ったの?
文字コード問題は設計とは関係ないってか?そんなアホな事はないよな。
そもそもよほどのことでない限りコーディングと無関係にはなれないんだがな。
例えば俺の話とかなwww完全にすれ違いってやつだ。
まあお前ら少しは言葉の勉強もしろよ。
0136nobodyさん
04/10/14 23:56:21ID:mdncFzXxこの shift ってどういう意味なんでしょうか?
関数ですか?
0137nobodyさん
04/10/15 00:34:17ID:???$c = "にちわ"
変数$aに$bと$cを結合したもの、つまり
"こんにちわ"を代入するには
$a = $b.$c
で大丈夫でしょうか?
0138nobodyさん
04/10/15 00:39:03ID:???>>137と似てるんですが、
$b = "co"
$c = "jp"
の場合に $a に co.jp を代入するにはどうすればいいですか?
$a = $b\..$c
で合ってます??
0142nobodyさん
04/10/15 08:34:27ID:???何スレぐらいかかるだろうか。
0143nobodyさん
04/10/15 08:35:47ID:0zK8noVIlog.txtを編集するために
bbs1.cgiでflockした場合
bbs2.cgiで編集しようとした時にも
ロックされてるんですか?
0144nobodyさん
04/10/15 10:12:58ID:???shift (@data);
とかならわかるんですけど、
スカラー = shiftという意味がわからないのです。
0145nobodyさん
04/10/15 10:54:53ID:???という文のみのファイルを作って、プラウザからアクセスすると指定URLに飛びますが、
上記の文より前に
print "Content-type: text/html\n\n";
などと書かれていると、ブラウザ上に「Location: http://www.2ch.net/」という文字列が表示されてしまいます。
やりたい事は、フォームから検索をかけて、検索処理中の間は特定のページを表示して、
検索が終了したらその結果を表示する画面に遷移する、ということです。
「検索処理のリクエストを受ける → 特定のページを出す「お待ちください」など → 検索終了 → 結果表示」
要するに、1回のPerlの処理で、ブラウザ上で複数のページ間を遷移させる事は可能でしょうか。
0146nobodyさん
04/10/15 11:09:31ID:???マニュアルのshiftの項をよく読め。
ttp://perldoc.jp/docs/perl/5.6.1/perlfunc.pod とか。
0148nobodyさん
04/10/15 13:29:36ID:???例えば
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/Javascript">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
を、
print "Content-type: text/html; charset=Shift_JIS\n";
print "Content-Style-Type: text/css\n";
print "Content-Script-Type: text/Javascript\n";
print "cache-control: no-cache\n";
print "pragma: no-cache\n\n";
にした場合、きちんと返ってるのでしょうか?
0149nobodyさん
04/10/15 13:33:40ID:???0150nobodyさん
04/10/15 13:45:29ID:???0151nobodyさん
04/10/15 13:55:55ID:???0152nobodyさん
04/10/15 14:55:30ID:???一点目のアドバイス。
「きちんと返っているかどうか確認する方法を教えてください」と質問すれば
いじめられることもなかっただろうに。
二点目のアドバイス。
どっちにしても Perl と全く関係ない質問なので、
WebProg初心者スレなどで聞く方が正解。
0153nobodyさん
04/10/15 15:35:31ID:???bbs2.cgiがflock使うなら勿論ロックになる。
flockはセマフォでの唯一のロック獲得争いにすぎない。
そのロックしないプログラムには通用しない。
0155nobodyさん
04/10/15 16:21:08ID:???bbs.cgiでlog.txtに書き込みするためロックしました
そのままdelete.cgiでlog.txtの書き込みの一部を削除しようとした場合には
ロックはされてないということでいいんですか?
0156nobodyさん
04/10/15 16:57:04ID:???カギのかからないトイレのドアに使用中と札を下げるようなもの。
その札を見てくれる奴には効果はあるが、ハナから見ちゃいねー
奴には無効。delete.cgiがどっちの奴かはオレにはわからない。
0157nobodyさん
04/10/15 17:40:29ID:???delete.cgiが、flockでlog.txtに対するロックを獲得しようとすれば、ちゃんと排他制御がなされる。
(bbs.cgiがロックを返すまで待つか、即座に獲得失敗するかはモード次第)。
しかし、delete.cgiがflockを行っていないのなら、bbs.cgiによる排他制御は無意味。
bbs.cgiがロックを得ている・得ていないに関わらず操作可能。
flockは、お手軽なロック機構にすぎない。
(ロック用ディレクトリとか、スリープするか即座に失敗させるかを自力でやらなくて良いって程度のもの)。
0158nobodyさん
04/10/15 17:49:21ID:???http://pc5.2ch.net/test/read.cgi/php/1024795138/
0159nobodyさん
04/10/15 17:55:33ID:???>flockはセマフォでの唯一のロック獲得争いにすぎない。
これは勘違いだったようだ。perlのflockがセマフォ使ってるわけじゃないか。
もう氏ぬ。
0160nobodyさん
04/10/15 20:46:48ID:M3+xPf5Cどうしたらいいのでしょうか? 普通はブラウザのボタンから起動されると
思うのですが、ある時間が来ると自動で動かしたいのです。よろしくお願いします。
0162nobodyさん
04/10/15 23:13:44ID:???下の下の方(flock(2)やfcntl(2)の下のほう)ではセマフォつかってるよ。多分。
それでも↓は意味不明だけど。
> >flockはセマフォでの唯一のロック獲得争いにすぎない。
0163nobodyさん
04/10/16 02:52:59ID:???どちらも実行ステップは100だとしても、やはり後者の方がサーバに対する
負荷は少ないのだろうか。
0164nobodyさん
04/10/16 03:14:53ID:???0166nobodyさん
04/10/16 12:33:14ID:???計測の方法が分かりません。。。
ググったらWin鯖は無理と書いてあったんですが、Win鯖で出来るソフトありませんか?
0168nobodyさん
04/10/16 21:45:26ID:???ちゃんと排他は行われるでしょうか?
0169nobodyさん
04/10/16 23:05:32ID:???# カウントファイルの読み込み
open(FILE, "+<./count.dat") or die("エラー:カウントファイルが開けません");
eval{ flock(FILE, 2);};
$count = <FILE>;
# カウントファイルの書き込み
seek(FILE, 0, 0);
print FILE ++$count;
close(FILE);
# サーバ出力
print <<END;
Content-type: text/html
中略)
END
Apachでエラーログをみると Premature end of script headers と出てしまいます。
どの部分を訂正すればよいのでしょうか?ご存知の方、ご指導お願いします。
0170nobodyさん
04/10/16 23:13:07ID:???Content-type: text/html
中略)
0171nobodyさん
04/10/17 01:00:06ID:???このdieの部分はどこに出力されるのですか?ログとか?
0172nobodyさん
04/10/17 01:03:49ID:???0173nobodyさん
04/10/17 01:38:29ID:sz1VkLQM$dbh->{NAME}
が配列へのリファレンスだとして、
$dbh->{NAME}->[0]ではアクセスできる状態です。
foreach($dbh->{NAME})
{
print;
}
foreach($$dbh->{NAME})
{
print;
}
等とやってもうまくいきませんでした。
0174nobodyさん
04/10/17 01:39:32ID:???0176nobodyさん
04/10/17 10:10:48ID:???中略)の部分は
<html>
<head><title>perlアクセスカウンター</title></head>
<body>
<P>あなたは$count番目の訪問者です。</p>
</body>
</html>
END
Premature end of script headers
エラー:カウントファイルが開けません のエラーログが出ます。
open or die の文がおかしいのかと思ったのですが、良くわかりませんでした。よろしくお願いします。
0177nobodyさん
04/10/17 10:20:37ID:???Content-type:text/htmlの後に改行が2つ(\n\n)必要だった希ガス
0178nobodyさん
04/10/17 10:21:41ID:???0179nobodyさん
04/10/17 13:45:28ID:???双方が協調して動作するためには、同じ方式のロックメカニズムを使用する必要があるが、
perlのflockはOSが提供しているflockとは限らない、PHPは知らない。
プラットフォームインディペンデントに作るなら、昔ながらのロックファイル方式か、
OSの提供する排他制御のプリミティブを直接呼び出すのがいいだろう。
0180nobodyさん
04/10/17 22:56:51ID:???0183180
04/10/18 01:23:59ID:???0184nobodyさん
04/10/18 04:17:33ID:???sub a
{
my $daskin;
$daskin="かきくけこ";
&b;
&c;
}
sub b
{
my $daskin;
$daskin="あいうえお";
}
sub c
{
print "$daskin";
}
こういったスクリプトを書いた時、&a、&b、の中で$daskinは局所化されているので
&c内のprintの表示が空になることを期待していたのですが、「あいうえお」と表示されてしまいます。
変な質問ですが、みなさんにとっては納得のいく結果でしょうか?
私の局所化処理が間違っている場合、教えて下さいm(__)m
0185nobodyさん
04/10/18 05:07:01ID:???自己解決いたしました。
上記のスクリプト、ここへの転載も含め、私の記述が間違っていたようです。
0186nobodyさん
04/10/18 13:44:39ID:???メッセージ:
$message
ここまで
EOF
こういう記述があるとして、$messageにはランダムにメッセージが入るのですが、
ここに何も文字列が入らなかった場合、HTMLで見ると
メッセージ:
ここまで
このように、間が空行になってしまいます。
ここを上手く詰められるような記述方法は無いでしょうか。
0187nobodyさん
04/10/18 13:54:10ID:???メッセージ:
$messageここまで
EOF
0189nobodyさん
04/10/18 18:54:11ID:???sprintf("%s, %02d-%s-%4d %02d:%02d:%02d GMT",
$day,$mday,$mon,$year+1900,$hour,$min,$sec);
というような形にしたいのですが、曜日だけが変換のネックと
なっています。どのようにこの日の曜日を計算させればよいの
でしょうか?
0191nobodyさん
04/10/18 21:38:36ID:???2.http://bbb.b.b/b/cgi
1のプログラム上から引数を渡して2のプログラムを動作させて
結果を1のプログラムに返すようなことって可能でしょうか?
2のサーバーのローカルにあるデータベースからデータを取得して
1のサーバーのローカルにあるデータベースにデータを保存したいと
おもっております。 言語はperl使用です。
0193nobodyさん
04/10/19 10:09:36ID:???何スレも前で既出のもんとかを既出の一言で片付けられたってわかるわけねーだろアフォ
どうせ本当に既出かどうかの確認もしてねぇんだろ?(pp
ん?何スレ目で話題が出たか言えるか?無理だろうなぁ日本語読めてないっぽいもんなぁ(・∀・)ニヨニヨ
0196nobodyさん
04/10/19 14:27:41ID:IcRPasE8request() とrequest()の間ってやっぱsleepとか入れて間を開けた方がいいのでしょうか?
具体的には ヤフーの株価データなんですけど
0198nobodyさん
04/10/19 17:42:02ID:6g0jZqZR0199nobodyさん
04/10/19 17:45:10ID:???0200nobodyさん
04/10/19 19:19:06ID:???0201nobodyさん
04/10/19 20:44:07ID:AGmXypRw現在、ADSLですが、DDNSは使っていないので、固定Webアドレスが保証できない状態です。
ADSLモデムのルーター機能を通していますので、当然ルーターにグローバルIPが振られてます。
では、プライベートIP上のCGI実行Progでこのルーターのグローバル
IPを得ることはできます?
あるperlのCGI実行スクリプトがWebサーバー上のフォルダへのフルパス(http://〜)
を要求しているので、グローバルIPが固定でない場合ですから、その都度prog的にIPを取得すれば使えるのでお願いします。
win me
AN HTTPD
ActivePerl5.8.4
です。
0202nobodyさん
04/10/19 20:57:26ID:???ページの取得にはLWP使用。
0203nobodyさん
04/10/19 21:25:04ID:???片方ではcommon.plというところでとまってしまいます
片方ではすんなり動きます
おそらく何か重要な部分を設定ミスしてると思うのですが
わかる範囲でチェックをしたつもりなのですが
1から重要な場所をチェックできるようなサイトをどなたかしりませんか?
もしくは直感的にどこが悪いか指摘していただいても結構ですので
よろしくお願いいたします。
0204nobodyさん
04/10/19 21:36:22ID:???0205201
04/10/19 22:15:51ID:???ありがとうございます。
ルーター設定ページを読み込んで、読み取る方法も確かにそれもありですね
ベタですね。確かに^^
おそらくActivePerlなので、Win用ActiveXコンポーネント(dllなど)が利用できるので
できますよね。WIN32APIも呼べるはずですが、…そのサンプルを今探しております。
P…面倒だからやはりDDNSか固定IP…
いやがんばります。できたら報告致します・
0206nobodyさん
04/10/19 23:13:46ID:???0208nobodyさん
04/10/20 04:50:52ID:aP/RN7icそれだけじゃわかんない。
0209nobodyさん
04/10/20 10:36:58ID:???for($i=2;$i>0;$i--){
if (rename("file.unlock","file.lock")) {last;}
}
if($i<0){
die "Failed file lock";
}
処理
rename("file.lock","file.unlock");
これに「異常終了しファイルロックが1分以上かかっていたら修正する」という処理を入れたいんですが、どんな方法がありますか。
0210nobodyさん
04/10/20 10:41:01ID:???条件が $i>=0 です。
0211nobodyさん
04/10/20 11:05:53ID:???http://www.din.or.jp/~ohzaki/perl.htm#File_Lock
http://pc5.2ch.net/test/read.cgi/php/1097158988/
0212203です
04/10/20 11:51:17ID:???現在mein.cgiというのを動かしているのですが
# CGI 初期設定のインポート
require"../config/default.cfg";
# 変換ライブラリのインポート
require"../common/jcode.pl";
# CGI共通ライブラリのインポート
require"../common/common.pl";
という順番でrequireしていっています
片方では問題なくcommon.plはとおるのですが、片方では
さばのログを読む限りではcommon.plを読み込んでいる最中に
500エラーとなってとまってしまっています。
ちなみにエラーで止まる部分は
この部分→use Date::Calc qw(Delta_DHMS);
my($days, $hours, $min, $sec) = Delta_DHMS($young_year, $young_mon, $young_day, $young_hour, $young_min, $young_sec,
$old_year, $old_mon, $old_day, $old_hour, $old_min, $old_sec);
です。
0213nobodyさん
04/10/20 12:12:49ID:???貼った方がいいと思うけどな...
0215nobodyさん
04/10/20 12:31:34ID:???0216nobodyさん
04/10/20 12:36:07ID:???0217nobodyさん
04/10/20 13:28:26ID:???ありがとうございました
0218nobodyさん
04/10/20 13:40:35ID:???0219203です
04/10/20 13:43:29ID:???Date::Calc
のモジュールが入っていませんでした
どうもお騒がせしました
0220nobodyさん
04/10/20 14:01:44ID:???事故解決したようだが、注意しとく。
まずひとつめ。「BEGIN failde」なんてなってるところからして
コピペじゃなくて手打ちしただろ? 手打ちは間違えて混乱のもと
になるのでこういうときはできる限りコピペするのが基本。どう
してもできないときはしょうがないが、鯖のログなら普通コピペ
できるはずだ。
またuseしてるモジュールがないときは、エラーメッセージは
Can't locate ナントカ.pm in @INC (@INC contains: (中略)) at ほげほげ line XX.
BEGIN failed--compilation aborted at ほげほげ line XX.
って2行でる。勝手に1行目削られるとナントカ.pmがないっていう
いちばん肝心な情報がわからなくなるわけだ。だからちゃんとした
アドバイスを受けたければエラーメッセージをそのまま貼れって
いわれるのよ。
次になんか質問するときは気をつけよう。
0221nobodyさん
04/10/20 14:42:43ID:???ファイル名にマルチバイト文字が使われているファイルがサーバーにあるとして、
そのファイルに直接アクセスしようとしても404になり、
マルチバイト文字の部分だけをURLエンコードすると正常にアクセスできます。
検索CGIを作っていまして、ファイル名にマルチバイト文字がある場合、
URLエンコードを行なってから検索結果画面を出そうと思っています。
例えば、このCGIからマルチバイト文字をファイル名に使ったファイルへのパスが
../data/俺俺.txt
だとします。
この場合、../の部分を絶対パスに置き換えてから検索結果に出力しているのですが、
http://www.domain.com/data/俺俺.txt
の「俺俺」の部分だけをURLエンコードする方法をご存知の方はいないでしょうか。
Perlメモにて全角文字の有無を検出する方法はわかったのですが、
全角文字の部分だけを変換して変数に保存したいのです。
0222nobodyさん
04/10/20 14:48:18ID:???$path =~ s/(全角文字列にマッチする正規表現)/URLエンコードする関数($1)/ge;
とかでいいんじゃないの?
0223nobodyさん
04/10/20 15:03:45ID:???0224221
04/10/20 15:18:11ID:???出力されるページ及びスクリプト自体はSJISなので、
EUC変換を行なってから下記のコードを追加しました。
# Perlメモの正規表現より「ASCII以外」の文字列がある場合
if ($path =~ /[\x8E\xA1-\xFE]/) {
# 「ASCII以外」の文字列をエンコードする
$path =~ s/([\x8E\xA1-\xFE])/'%'.unpack("H2", $1)/eg;
}
とりあえずはこの方法で解決できそうです。
即レス感謝です。
0226221
04/10/20 16:05:39ID:???ちなみにローカルでのテスト環境は、「Win2000Pro ActivePerl5.6.1 AN HTTP Daemon 1.42k」です。
HTMLの読み物として「リンクの方法.txt」というファイルが実際にありまして、
とりあえずそれを検索する事でテストしています。
「リンクの方法」はSJISですと「%83%8A%83%93%83%4E%82%CC%95%FB%96%40」、
EUCですと「%A5%EA%A5%F3%A5%AF%A4%CE%CA%FD%CB%A1」となるようです。
一部省略してますが、該当部分のソースを下に書かせていただきます。
$temp_euc = $temp; # $tempはsjisで、ファイル名だけが入ってます
&jcode::convert (\$temp_euc, "euc"); # $tempをEUCにした$temp_eucを用意
if ($temp_euc =~ /[\x8E\xA1-\xFE]/) { # Perlメモの正規表現より「ASCII以外」の文字列がある場合
$temp_euc =~ s/([\x8E\xA1-\xFE])/'%'.unpack("H2", $1)/eg;
}
print <<"HTML";
<A href="$absolute_dir\/$temp_euc">$temp</A> # 絶対パスとファイル名を結合したパスへとリンク
HTML
この方法ですと、>>224氏が言ったように、
<A href="http://www.domail.com/%A5%EA%A5%F3%A5%AF%A4%CE%CA%FD%CB%A1.txt">リンクの方法.txt</A>
となり、<A>タグ内のリンク先のファイル名がEUCとなって、ファイルシステム上のファイル名の関係で使えませんでした。
もう少しやり方を模索してみます。
0227221
04/10/20 16:10:55ID:???要するに、マルチバイト文字だけをURLエンコードしたいが、
マルチバイト文字を正確に検出するにはEUC形式である必要がある。
しかし、そのままEUCをURLエンコードしてもファイルシステムの都合上使えないため、
マルチバイト文字に該当する部分だけをSJISでURLエンコードができれば、ということです。
0229460
04/10/20 17:03:41ID:???if ( A ){ if ( B ){ 〜 }}か
if ( A , B ){ 〜 }
で良いかな?
0230nobodyさん
04/10/20 17:08:37ID:???0231nobodyさん
04/10/20 17:08:54ID:???0233231
04/10/20 17:09:17ID:???0236221
04/10/20 17:24:04ID:???申し訳ないですが、もう少し方法を具体的に教えていただけないでしょうか。
「EUCで取り出した」とはどの部分を指すのでしょうか。
$temp_euc =~ s/([\x8E\xA1-\xFE])/'%'.unpack("H2", $1)/eg;
のように、一括で変換を行なうわけではないということですか?
0237nobodyさん
04/10/20 17:28:45ID:???その例でいくと
unpack("H2",$1)
のところを
unpack("H2",eucをsjisに変換する関数($1))
にすればいいってことでしょ。
0241nobodyさん
04/10/20 22:16:04ID:???, -,:' / ̄) i{'r‐-、 `ヽ、
. _...,,o‐y ,:'- '⌒ ⌒ヽ. `ヽ' ,
(o( ,' / / 、 `ヾ. ヾ,
,:'´//7,' ,' .,' ,:' ! } i !', ':, ':, ゙:,
,' / ,' {l. ! {/ ,イ / }| !|', !. ', ', ゙,
ハ〃 ! !| | | ∠/ ,:'-ノ} /リ l ,ム. ! } |!
ハヽ、ゝ!| l | ,:',;='ィ'、'´ ,'.ノ ノ.,;lノ=、l .,' ,' ,' ノ
{ l l ', |'ヲi(_ノ.} ´ i(ノ.}゙!ノ,:',:''´
', h. ', ',゙、 ':゙゙_.ノ. ':゙_ノ〃ン
':, { ',', ':,':, 丶 ,' l .}
ヾ ':,':, ':ヾ、._ 「´/ ,' | .,' / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
`ヾ-、`ヽ_ `´ _,.ィリ.ノ ,' < なんとなかるよ、絶対大丈夫だよ!
リ';',ヾ| ` ‐┬ ´ _ノノ,'/ \______________
ヾ,、-- 、 _ | ´ノ'
f ヾ、..___ ヽ、 ー‐''
/_......_ \
0242nobodyさん
04/10/20 22:31:34ID:???0243nobodyさん
04/10/20 22:35:28ID:xGLMj0YBこのコードの意味がさっぱり分からんのでオシエテクリソ-
0244nobodyさん
04/10/20 22:56:55ID:???$abc, $def の2人が「俺の物だ」って奪うんだよ。
でも不思議なことに奪われた袋の中身はなくなっていなーい。
0245nobodyさん
04/10/20 23:02:27ID:???0246nobodyさん
04/10/20 23:14:24ID:xGLMj0YB@_は変数ではないですよね?
もう少しヒントクリソー
0247nobodyさん
04/10/20 23:26:27ID:???0248nobodyさん
04/10/21 01:10:59ID:???$str =~ s/([\x81-\x9f\xe0-\xfc])([\x40-\x7e\x80-\xfc])/sprintf("%%%02X%%%02X",ord($1),ord($2))/eg;
っと、半角カナ用にもう一押し必要か。残念!
\xa0-\xdf斬り。
0249nobodyさん
04/10/21 01:31:19ID:???ASCII文字って厳密にはどこまでを指してんだ?
半角英数字記号をASCIIってとらえるんなら、
0250nobodyさん
04/10/21 02:46:20ID:???0251201
04/10/21 05:43:48ID:???LAN側からのみルーターにプライベートアドレスでtelnetでアクセス
で情報を得る。
0252nobodyさん
04/10/21 10:50:09ID:???my ($abc, $def) = @_;
print ($abc, $def);
print \n;
print @_;
する
0253221
04/10/21 11:33:49ID:???$temp_euc = $temp; # $tempはsjisで、ファイル名だけが入ってます
&jcode::convert (\$temp_euc, "euc"); # $tempをEUCにした$temp_eucを用意
if ($temp_euc =~ /[\x8E\xA1-\xFE]/) { # Perlメモの正規表現より「ASCII以外」の文字列がある場合
$temp_euc =~ s/([\x8E\xA1-\xFE])/'%'.unpack("H2", &euc2sjis ($1))/eg; # ここを変更
}
print <<"HTML";
<A href="$absolute_dir\/$temp_euc">$temp</A> # 絶対パスとファイル名を結合したパスへとリンク
HTML
sub euc2sjis { # 追加したサブルーチン
my $str = $_[0];
&jcode::convert (\$str, "sjis", "euc");
return $str;
}
>unpack("H2",eucをsjisに変換する関数($1))
と言って下さったように変えてみたのですが、HTML部に表示されるエンコードされたURLは変わらずEUCのままでした。
追加したサブルーチンが動いていないのかとも思って確認しましたが、
単体で動かして確認したところ、sub euc2sjisは正常に動いているようです。
他の方が提示してくださった方法も見てみます。
0255nobodyさん
04/10/21 12:09:34ID:???なんか、そこはかと遠回りしている気がするよ。\Wをエンコードするだけじゃ動作しなかったっけ?別に正確なURLエンコードを目指さなくても動作すればそれでいいのでは?
0256nobodyさん
04/10/21 12:24:56ID:???諦めるのかw
0257nobodyさん
04/10/21 12:30:19ID:a34sr5QLa0001
a0002
a0003
という風に増加する変数を作りたいのですがどうすればいいでしょうか?
参考になるサイトなんかあったら教えてください。
宜しくお願いします
0259nobodyさん
04/10/21 12:39:13ID:???0260nobodyさん
04/10/21 12:55:04ID:???レスありがとうございます。素朴な疑問ですが、
アルファベット文字含んでても、++で問題なく a002 になるんでしょうか?
>>259
調べてみます。ありがとうgざいます。
0263nobodyさん
04/10/21 13:25:31ID:???0264221
04/10/21 14:44:50ID:???半角カナ以外では正常に実行できました。
とりあえずはこの方法で実装しようと思います。
あとは半角カナの対応ですか・・・
0265nobodyさん
04/10/21 15:11:42ID:???\x5Cを含む表や申が入っている漢字でも上手く行く?
気になったからやってみたけど
Win2k+Apache1.3.31+ActivePerl v5.6.1の環境で正常動作しないんだよな
0266221
04/10/21 15:25:17ID:???「Win2000Pro ActivePerl5.6.1 AN HTTP Daemon 1.42k」という環境で実行してます。
実際に導入するのは、悪名高い@ni○tyのCGI鯖ですが。
「―ソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予禄.txt」
という、わざとらしく\x5Cを使った文字で構成されたファイル名を用意して、
このテキストファイル内の文字を検索して結果画面を出してみたところ、
<A href="%81%5C%83%5C%84%5C%87%5C%89%5C%8A%5C # 略 # .txt">―ソЫ\噂浬欺圭構 # 略 # .txt</A>
というHTMLが出力され、実際にそのリンクからファイルへアクセスできることは確認できました。
また、そのテキストファイル内に「―ソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予禄」という内容を書き、
同じく「―ソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予禄」で検索して正常に結果が表示されることから、
今のところは>>248氏の処理で半角カナを扱えない点以外での問題は無さそうです。
0267nobodyさん
04/10/21 15:43:18ID:???my @str = qw(
http://example.com/data/リンクの方法.txt
http://example.com/data/俺俺.txt
http://example.com/data/ハンカクカナA.txt
http://example.com/―ソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予禄.txt
);
s{([\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])}{
my $chr = $1;
$chr =~ /^[\x00-\x7F]\z/
? $chr
: join('', map sprintf('%%%X', ord), split //, $chr)
}eg for @str;
print join "\n", @str;
# SEE ALSO: http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0268265
04/10/21 16:25:51ID:???エンコードは問題ないのにアクセスできないという不思議な現象に陥ってました
結局ANHTTPDに変更したらあっさり解決したのでApacheが悪かったようです
しかし何故Apacheじゃ見えなかったんだろう?
うーん気になるな・・・
0270nobodyさん
04/10/21 16:52:10ID:???for (@配列) { 〜 }
って、これって
foreach (@配列) { 〜 }
と繰り返す回数って違うの?
0271nobodyさん
04/10/21 16:57:06ID:???0272221
04/10/21 17:56:10ID:???が、肝心の s{ 以下の処理の部分が何をしているかが不明なので、ちょっとまだ導入できないです・・・
? と : が if else って事くらいしかわからない上に、色々と省略された書き方をされているようなので、
理解には時間がかかりそうです。
一文字ずつ分解して、[\x00-\x7F]以外のものはordで数値変換してsprintfで16進数に書き出しているということですよね。
splitを消すと\x5Cがおかしくなるようですが、何の処理をしているかもまだ理解の範疇にはないようです。
省略した書き方とかしたこと無いんで、冗長なコーディングしか出来ない自分が悲しい・・・
あと、省略できるものも極力省略しないという書き方をしているので(自分が理解できなくなると困るので)、
このソースをもとに何とか書き換えて実装してみようと思います。
0273nobodyさん
04/10/21 20:11:32ID:a34sr5QLサブルーチンとして起動させると、作業を終える前に次のコードに移ってしまいます。
これはどうやって防げばいいでしょうか?
0274nobodyさん
04/10/21 20:52:06ID:???そのサブルーチンの最後に何かフラグを立てて、
それが立ってなければ待つってのは?
0275nobodyさん
04/10/21 21:15:46ID:???サブルーチンという言葉の使い方が間違っているように思えてならない。
ひょっとして「子プロセス」とかそういうモノを指しているのか?
0276273
04/10/21 21:40:12ID:a34sr5QLいわゆる.plファイルです。
aというモジュールがあります。
b(.pl)というモジュールからaをuseしてます。
.cgi からbモジュールをrequireすると、aモジュールの作業を完了しないまま、
bモジュールの次のコードに移ってしまいます。
.cgiにから直接aモジュールをuseしたら、問題は
発生しませんでした。
0277nobodyさん
04/10/21 22:08:58ID:???0278nobodyさん
04/10/21 22:14:52ID:???ああわかった。それはあれだ。
use したファイルはコンパイル時に読み込まれて実行されるが、
require したファイルはコード実行時に読み込まれて実行される。
b が require された時点ではコンパイルがとっくに終っているので
b の中で use した a が実行される機会は永遠に巡ってこない。
0280278
04/10/21 22:31:20ID:???0281273
04/10/21 22:51:54ID:???require、use云々ではないかもしれません。
wait;ってのが気になってるのですが、
これはどうやって使えばいいのでしょうか?
ググッテも情報量がひっじょーに少ないとです。
ヒロシです
0282nobodyさん
04/10/21 23:06:49ID:???wait は子プロセスの終了を待つ関数なので、使えない
0283nobodyさん
04/10/22 10:48:37ID:???if (nyuryoku == '\0') {exit(0);}
て書けるけど、perlだとどう書きますか。以下の何入れても
quer!が出ちゃうんです。
$var=<STDIN>;
chomp($var);
if ($var eq "\0") {
exit(0);
} else {
print "quer!\n";
}
0284nobodyさん
04/10/22 10:50:06ID:cSoqDRBP0287nobodyさん
04/10/22 11:42:34ID:Y4MW0wLE自分で実装するしかないのでしょうか?
0288nobodyさん
04/10/22 11:55:42ID:+fQGbTx6"E6%8E%B2%E7%A4%BA%E6%9D%BF"
となると思います。
そして本来UTF-8のコードである "E6%8E%B2%E7%A4%BA%E6%9D%BF" を誤って
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C",hex($1))/ge;
でデコードすると
"牙ず? "
となってしまいます。
この "牙ず? " を元のUTF-8のコード "E6%8E%B2%E7%A4%BA%E6%9D%BF" に戻すには
どのように処理したらいいのでしょうか?
どなたか教えて下さい。
0289nobodyさん
04/10/22 12:20:13ID:???バイト列としてはちゃんとデコードできているが、utf8として解釈すべき
バイト列をEUCだと思って見てるから変に見えるだけじゃない?
EUCで表示したければ適当にutf8→eucに変換すればいい。
use Jcode;
$str = "%E6%8E%B2%E7%A4%BA%E6%9D%BF";
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C",hex($1))/ge;
print Jcode->new($str)->euc,"\n";
0290nobodyさん
04/10/22 12:45:55ID:pO/k5T0Y手持ちのマニュアルで16進定数の記述方法が
$a='/abcd';
となっていたので携帯用絵文字を定義しようとしたのですが、
print $a;
をやると、/abcdと出てしまいます。
' を " に変えたり色々してみたのですが上手くできません。
正しい16進定数の代入の仕方を教えて下さい。m(__)m
0291nobodyさん
04/10/22 13:17:36ID:???0292nobodyさん
04/10/22 13:17:37ID:???0293nobodyさん
04/10/22 13:33:16ID:???0294nobodyさん
04/10/22 14:27:39ID:pO/k5T0Yありがとうございます。
今からやってみます。(;;
0295nobodyさん
04/10/22 15:33:52ID:pO/k5T0Yありがとうございました!!!!!
0296nobodyさん
04/10/22 17:38:09ID:gkwMnLH6よろしくお願いします。
環境:FreeBSD 4.7 UNIX O/S
perl5.6.1
0297296
04/10/22 17:45:28ID:gkwMnLH6下手くそな文章で申し訳ありませんが、よろしくお願いします。
0298nobodyさん
04/10/22 17:54:42ID:???0300nobodyさん
04/10/22 18:02:41ID:???http://perldoc.com/perl5.8.4/pod/func/system.html
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=tar&dir=jpman-4.7.0%2Fman§=1
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#How_can_I_capture_STDERR_from_an
0301300
04/10/22 18:07:22ID:???http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=tar&dir=jpman-4.7.0%2Fman&sect=1
0303nobodyさん
04/10/22 19:26:58ID:???としたら、
apacheのエラーログにUnrecognized characterというエラーが表示されました。
どうも、テストという日本語に問題があるようですが、
この場合、どうすれば日本語を利用できるようになるでしょうか?
phpを以前ちょっといじっていて、htmlの組み込み安さに感動したんですが、
perlは結構面倒なんですかね?
0304nobodyさん
04/10/22 19:31:59ID:kB/Ig1ML0305nobodyさん
04/10/22 19:32:44ID:PwMLf+Ap$data=new CGI;
$name=$data->param('name');
$mail=$mail->param('mail');
$message=$message->param('message');
こうやって取り出したデータの中の文字は、
URLエンコードされたままではなく元に戻されているのでしょうか?
0307305
04/10/22 19:50:08ID:PwMLf+Apプリントしてみたら元に戻っていたので、あれ?と思ったんです。
今までずっと$name=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
やってたんですけど。
実は要らなかったのかなと思いまして。
実際どうなんでしょう?
ついでに、文字コードなんかはどうなっているのでしょうか?
0308nobodyさん
04/10/22 19:58:14ID:???0311nobodyさん
04/10/22 20:05:07ID:???漏れは敢えて「やってみなきゃわからんのは頭悪過ぎ。まず man を読め」と言うことにする
0313nobodyさん
04/10/22 20:56:34ID:???0315303
04/10/22 21:00:19ID:???だれかヘルプみー
0318nobodyさん
04/10/23 15:43:12ID:EsL8XLQNperlには、Cにおけるfprintfのような関数はないのでしょうか?
print FILE hogehoge;
というのが何行も続いてしまい、違和感を感じるのですが。
0319nobodyさん
04/10/23 16:40:33ID:???Perlは元々レポート作成用言語ディスよ?
fprintfに限らず、テキストの、文字入出力、ファイル入出力においての利便性は
Cとは比較にならんて。
ヒアドキュメントでも、format でも sprintf でも好きなもので対処すれば?
0320nobodyさん
04/10/23 16:41:54ID:???の「||」の意味が分かりません。
だれか教えてくださいませ
0321nobodyさん
04/10/23 16:43:05ID:???or と ほぼ同じ。 or よりも優先順位が高いので or と書いておいたほうが
意図どおり動くことが多いはずだよ。
0325nobodyさん
04/10/23 17:42:48ID:???sprintfで解決しました。
printする文字列を関数呼び出しで作成するというのは考えが及びませんでした。
どうもありがとうございました。
0326nobodyさん
04/10/23 19:41:00ID:???perlで利用することは不可能でしょうか?
権限ないディレクトリにはディレクトリ作成できなかったので、
sudoで特定のユーザにmkdirの権限与えたのはいいものの、
perlで使おうとしても使えないんですね。
telnet経由しかむりぽなのでしょうか?
0327nobodyさん
04/10/23 19:55:17ID:???コーディング 【coding】
プログラミング言語を使ってソフトウェアの設計図にあたるソースコードを作成すること。
(e-Wordsより)
自分の質問がPerlに関することなのか、
それともPerlではなくCGIやHTMLについてなのかを切り分けした上で、
質問して下さい。
0328nobodyさん
04/10/23 19:55:48ID:???いや、普通にできると思うけど。具体的にどうやってるか示されてない
のでこれ以上はなんともいえんがな。
でもmkdirのような引数しだいでどこにでもディレクトリ作れるコマンドを
sudoで許可するのはあまり感心しないな。
0329326
04/10/23 20:20:45ID:???としています。
aユーザからbユーザのディレクトリに newというディレクトリ
を作成するようにしていますが、
上記ではうまくいきません。
bユーザディレクトリの権限をaユーザのものにし、
my $makedir = `mkdir $user_dir/new`;
とした場合は問題なく作成されます。
宜しくお願いします
0330nobodyさん
04/10/23 22:28:08ID:???0331nobodyさん
04/10/23 23:18:04ID:???次の質問よろ
0332nobodyさん
04/10/24 10:16:22ID:???何か意味があるんですか?
0333nobodyさん
04/10/24 10:38:56ID:???perlコーディングには関係ないと思うんですが...
サザエさんの、来週もまた見てくださいねぇ〜、hogehugu が起源です。
0334nobodyさん
04/10/24 12:22:59ID:???0336nobodyさん
04/10/24 19:38:54ID:5pufjC0Pこちらを参考に、アップロードのCGIを作成しているのですが、
アップロードを行うと、同フォルダにゴミファイルのようなものが出来てしまいます。
これを、消す事は出来ないのでしょうか?
0337nobodyさん
04/10/24 19:40:35ID:???0338nobodyさん
04/10/24 20:14:53ID:5pufjC0P0340nobodyさん
04/10/24 20:38:56ID:5pufjC0Pはい、そうです。
0342nobodyさん
04/10/24 20:47:25ID:5pufjC0Pclose($filename);
close(OUT);
としたら、作成されないようになりました!(これで、大丈夫ですよね)
大変ありがとうございました。
0343336
04/10/24 21:57:58ID:B/djfAD8アップロードしたファイルの名前を変更したいのですが、
print(OUT $file);
rename("$filename", "123456.xls");
close($filename);
close(OUT);
と、したのですが、これでは駄目なのでしょうか?
試してみたところ、上手くいきませんでした。
0344nobodyさん
04/10/24 22:08:01ID:???0346336
04/10/24 23:10:44ID:B/djfAD8renameの位置を変えて、色々といじったら、うまくいきました。
>>345
アドバイス、ありがとうございます!
度々申し訳ありません、もうひとつ質問させてください。
このコードでは、HTML部分でWinとMacを最初に入力するようにしていますが、
Winを使用しているのにMacを選択してしまった・・・と言う場合に、
何か不都合が発生するのでしょうか?
自分で試したところ、どちらでも特に問題なくアップできましたので・・・
できれば、この入力部分は省きたいと思っておりますので、
必要無い、との事でしたら削除しようと思っております。
0347nobodyさん
04/10/24 23:33:53ID:???0348nobodyさん
04/10/25 11:29:41ID:???それwindowsの話かな? unix系だとopen直後にunlinkしてプロセス終了時に
一緒になくなる一時ファイル作るってわりとありがちな手なんだけどね。
0349nobodyさん
04/10/27 07:17:45ID:???Jcode.pm をスクリプトに同梱して配布したとしても
サーバ側でインストールがされていないと使えないものなんでしょうか?
この辺の仕組みがよくわかりません……。
0350nobodyさん
04/10/27 07:53:40ID:???とりあえずインストールしてなくても動かすことはできるみたいですね。
スレ汚しすみません。
0351nobodyさん
04/10/27 09:59:20ID:???とあるドメインから、別のドメインのディレクトリ一覧、及びファイルの読み込みを行いたいのですが、
下記のようにするとオープンエラーになります。
(改行が多いと言われたので、次に書きます)
別ドメインのディレクトリ内容やファイルの取得は出来ないのでしょうか?
もし可能でしたら方法を知りたいのですが、お教えいただけませんでしょうか?
0352nobodyさん
04/10/27 09:59:56ID:???# ディレクトリの一覧を取得
if( !opendir(DIR,"CGIを設置しているところとは別のドメインのディレクトリ") ){
print"OpenErr";
}else{
foreach $file( readdir(DIR) ){
print "$file<BR>\n";
}
closedir(DIR) ;
}
--------------------------------------------
# ファイルの中身を取得
if (!open(IN,"CGIを設置しているところとは別のドメインのファイル") ){
print"OpenErr";
}else{
@data = <IN> ;
foreach $file(@data){
print "$file<BR>\n";
}
close(IN) ;
}
--------------------------------------------
0353nobodyさん
04/10/27 11:42:36ID:???openで失敗してるんだろ、$!参照(print"OpenErr:$! at ",__LINE__; )
たぶん、権限ナシと予想するが
つーか、別のドメインってリモートじゃないよな
0354nobodyさん
04/10/27 12:15:49ID:???えーと、見当違いなレスだったらすみません。
使用したいドメイン名は書けませんが、要は
○○○.com にあるファイルを ×××.net で読み取る…と言う事をしたいのです。
リモートではないです。
権限の方、確認してみます。
0355351
04/10/27 12:32:51ID:???>353さん
もちろんオープンで失敗していますので、エラーのメッセージとなります。
なので、オープン成功するにはどうしたら良いのかなーと。
そもそも無理なのでしたら仕方ないのですが、BLOG等では他の日記データとかを取り込んで
表示する仕組みとか有るみたいなので、どうにか方法はあると思うのですが…
もしPerl側の工夫で出来るなら、どうすればよいかヒントを頂けると助かります。
権限(ファイル置いているサーバ側の設定?)とかの変更が必要でしたら、
管理者に作業してもらおうと思います。
0356nobodyさん
04/10/27 13:13:09ID:???バーチャルホストか?
どうもそうじゃないように見えるんだけどな・・・
VHでやってるなら権限次第だな
そうじゃないなら質問内容をもうちょっと的確に書けるくらい勉強しよう
あと最低限>>1は必ず目を通そうな
0357351
04/10/27 13:37:48ID:???>>356さん
お手間おかけしましてすみませんでした…
もう少し勉強してきて、それでいて判らなければまたよろしくお願いします。
どうも有難う御座いました。
ちなみにバーチャルホストではなく完全に別ドメインのサーバで、
例えて言うと、”google.co.jp内の特定のファイル”を読むCGIを、
yahoo.co.jp内に設置したいのでした。
(読み込みたいファイルの名称やURLは固定のものです)
0359nobodyさん
04/10/27 17:10:04ID:???うざい
質問するレベル以前
つーか、open失敗する理由が、$!にセットされるから、先ずそれを表示させてみろ
まさか、open(IN,"http://www.yahoo.com/hoge")とかやってないだろうな?
0360nobodyさん
04/10/27 18:11:49ID:???0361nobodyさん
04/10/27 20:31:12ID:???0363nobodyさん
04/10/27 21:59:06ID:???use base 'EXPORTER';
use LWP::Simple;
our @EXPORT = ('open');
sub open{
}
ここまで書いた後は頼んだ>>364
use subs qw(open);
*open= sub { get($_[0]); };
$url="http://www.hogehoge/";
$data= open($url);
0365nobodyさん
04/10/28 01:47:21ID:GkfPSbvyハッシュのリストを作ってはみたものの
どうやってサブルーチンから出せばいいのかわからなくなりました。
sub XXX{
…
push @{ HoA{key_name} }, "value1", "value2";
…
return (??????);
}
このような場合ってどうやってリターンすれば宜しいでしょうか??
0366nobodyさん
04/10/28 02:07:20ID:GkfPSbvy0368nobodyさん
04/10/28 08:42:07ID:???こう?
return \%Hoa;
で、
$refHoA->{key_name}->[0]
0369nobodyさん
04/10/28 09:10:58ID:???my %HoA;
&XXX(\%HoA);
print @{$HoA{'key_name'}};
exit;
sub XXX {
my $refHoA = $_[0];
push @{$$refHoA{'key_name'}}, "value1", "value2";
return(0);
}
0370nobodyさん
04/10/28 09:56:08ID:???そんなことしない
サブルーチンで局所化した変数でもリファレンスを返すと、スコープ外でも変数の内容は維持される。
なんか変な気もするが、そういうものらしい
なんでかはしらない(局所化してもスコープ外で実際に破棄されるわけではない?)
つーか、perlモジュールのコンストラクタは普通に局所化したハッシュをblessしてるし
0371nobodyさん
04/10/28 09:56:09ID:???sub XXX {
my $HoA;
push @{$HoA->{key_name}}, "value1", "value2";
return $HoA;
}
0372nobodyさん
04/10/28 14:04:58ID:???my宣言した変数は内部に被参照カウンタを持っていて、
それが0にならない限りデータ領域は解放されないです。
サブからリファを返した場合、そのリファを保持する限り
領域も保持され、破棄すると領域も解放されるです。
0373365
04/10/28 14:35:37ID:???どれも有効でしたが、368氏の方法が一番マッチしました。
ありがとうございました。
0374nobodyさん
04/10/29 18:08:56ID:jolcQ+aO今ローカル環境がないのであまり無茶なテストをサーバでしたくないために質問しました。すみません。
アンダースコアは大丈夫なことは知っています。
ハイフンもハッシュのキーになら使えるということも知っています。(クォート必要ですが)
変数名にも使えるのでしょうか?
例)
$a-a = 1;
$aa- = 1;
$-aa = 1;
確か一番下はダメなはず。
宜しくお願いします。
0376374
04/10/29 18:25:42ID:jolcQ+aO>ぐぐった
>出てきた
だから?ぐぐるのもここで質問するのも同じだろ。
まぁ、ぐぐったら出てくるという回答だとしたら・・・
ありがとうございました。ハイフンは使えないようで。それでは失礼します。
0377nobodyさん
04/10/29 18:28:19ID:oV9k/ZOoうわすげームカツクこいつ
マジで死ね 首吊って今すぐ死ねや 糞が
0378374
04/10/29 18:39:04ID:jolcQ+aOたかが2ちゃんでの出来事にいちいち本気になるなよ
0380nobodyさん
04/10/29 18:46:02ID:oV9k/ZOoハァ?それが関係あんのか?
更に胸糞悪ぃなてめぇは
0381374
04/10/29 18:47:36ID:jolcQ+aOそもそも2ちゃんで本気になるお前らがおかしいだろ
ムキになるなよ
0384nobodyさん
04/10/29 18:52:42ID:???ttp://perldoc.com/perl5.8.4/pod/perlstyle.html
最後の項目を声に出して読みましょう。
>>376
> ぐぐるのもここで質問するのも同じだろ。
false
0385374
04/10/29 18:54:15ID:jolcQ+aOお前が死んだらいいんじゃないか?
自分のために人が何かしてくれるとでも思ってるの?
いい加減自立しろよ、な。
嫌いなやつは「氏ね」なんて理屈は小学生レベルだぞ。
もうすこし大人になったほうがいいんじゃないか、な。
0387nobodyさん
04/10/29 18:56:36ID:???0388nobodyさん
04/10/29 19:05:53ID:???の最後の文字列を消すようにはどのようにすればいいでしょうか?
この場合は、$abc=123にしたいです。
0389nobodyさん
04/10/29 19:37:50ID:???0390nobodyさん
04/10/29 20:26:27ID:???0391nobodyさん
04/10/29 20:45:30ID:???登録や削除のできるCGIを作っています。
一つのフォームから、いくつかのsubmitを使って、それぞれ処理を変えたいのですが、
どのようにすればよいでしょうか?
なんとなく、nameを使ったり、受ける側でif文を書けばいいのかな?という感じなのですが、
どうやって、if文でsubmitのnameを受けたり、分岐したりすれば良いのか分からない状態
です。
どうぞ、よろしくお願いします。
0394nobodyさん
04/10/29 20:59:11ID:???すいません、その書き方が分からないので・・・
if文になるんでしょうか?
突然言い渡された仕事で、何が何だかさっぱりな状況なのでお願いします・・・。
連投になってしまい、すいません
0395nobodyさん
04/10/29 21:25:48ID:???<INPUT name=text1>
<INPUT name=text2>
<INPUT name=text3>
<INPUT name=text4>
<INPUT type=submit value="ここ押せ" name=hoge>
-----------------
-------cgi--------
#!/usr/bin/perl
require 'cgi-lib.pl';
require 'jcode.pl';
&ReadParse(*in);
$txt1 = "$in{'text1'}";
$txt2 = "$in{'text2'}";
$txt3 = "$in{'text3'}";
$txt4 = "$in{'text4'}";
&jcode'convert(*txt1,'sjis');
&jcode'convert(*txt2,'sjis');
&jcode'convert(*txt4,'sjis');
処理
---------
こんなもんだろ。
0397nobodyさん
04/10/29 22:00:17ID:???なんかどこをみても載ってない気がする。
0399nobodyさん
04/10/29 22:58:21ID:buGH5/R10400nobodyさん
04/10/29 23:26:28ID:???まあ裸では使えないが${'...'}のかたちにすりゃほとんど
なんでもアリ。
そうまでして使いたいものかどうかはギモンだがな。
${'a-a'} = 1;
${'aa-'} = 1;
${'-aa'} = 1;
0402nobodyさん
04/10/30 00:47:08ID:???こんなことはできますか?
0403nobodyさん
04/10/30 00:48:20ID:???0404nobodyさん
04/10/30 01:10:10ID:???どこがいけないのでしょうか。
0405nobodyさん
04/10/30 01:17:43ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsyn.html#Simple_statements
0406nobodyさん
04/10/30 01:44:29ID:???ありがとうございます。
読んだ上で色々やってみましたが、このような書き方は仕様上不可能のようですね。
お手数おかけしました。
0407nobodyさん
04/10/30 03:37:08ID:???これって常識ですか?
省略したときに $_ を使うようになる条件て何かあるんですか?
0410nobodyさん
04/10/30 10:23:50ID:???0411nobodyさん
04/10/30 10:59:58ID:eCRfKScU文字列ソートを
@data = sort{(split(/\,/,$b))[2] cmp (split(/\,/,$a))[2]} @data;
としてたものを、文字の数でソートしたいと思い、
@data = sort{(split(/\,/,length$b))[2] <=> (split(/\,/,length$a))[2]} @data;
とやってみましたが、ソートしてくれません。
lengthの位置を色々変えてみましたが、ソートしないかエラーかでした。
どうすれば(この場合)[2]番目の文字数でソートできるのでしょうか。
0412nobodyさん
04/10/30 11:13:52ID:zVFP7DHQ環境 -> Linux + Perl5 + cgi-lib.pl
kentさんのjoyfulとか、ほかモジュールを使わないでアップロード機能を
装備しているスクリプトを参考に下記のようにやってみたのですが、
まったくダメダメクンのようです。
ユーザーのファイルを受け取るには、これ以外何をやればよいでしょうか?
どうか教えてください。
$upfile = $in{'img'};
if ($upfile) {
$upfile =~ s/\\/\//g;
$img_file = basename $upfile;
open OUT,">$img_file";
binmode OUT;
binmode STDOUT;
print OUT $in{'img'};
close OUT;
chmod (0666,$img_file);
0413nobodyさん
04/10/30 11:25:33ID:???http://perldoc.com/perl5.8.4/pod/func/length.html
http://perldoc.com/perl5.8.4/pod/func/split.html
http://perldoc.com/perl5.8.4/pod/func/sort.html
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_do_I_sort_an_array_by_anyth
>>412
http://cgi-lib.berkeley.edu/
0414nobodyさん
04/10/30 11:27:57ID:???@data = sort{length((split(/\,/,$b))[2]) <=> length((split(/\,/,$a))[2])} @data;
>>412
デリミタの処理が一切見当たらない。
enctype="multipart/form-data"でPOSTしたらどんなデータが送られてくるのか?を確認するよろし。
0415412
04/10/30 11:39:40ID:zVFP7DHQ参考にしてみます。
>>414
>enctype="multipart/form-data"でPOSTしたらどんなデータが送られてくるのか
File::Basenameで取得したファイル名の中に、ローカルパスが格納されています。
001.jpg -------------------------------------------------------------
C:\Documents and Settings\admin\My Documents\My Pictures\任天堂\001.jpg
---------------------------------------------------------------------
てことは、$in{'img'}をopen DATA,"$in{'img'}";する必要があるってことです?
0417412
04/10/30 14:08:03ID:zVFP7DHQみなさまありがとうございました。
0418nobodyさん
04/10/30 14:28:37ID:???諦めた方がいいね
0419nobodyさん
04/10/30 15:15:30ID:???英数字が使えて、最初の文字列にのみ数字を禁止するような
正規表現はどのようにすればいいでしょうか?
正規表現難しすぎる・・・。本読んでも頭がこんがら・・・
分かりやすいサイトあったら教えてください
0420nobodyさん
04/10/30 15:27:19ID:???http://pc5.2ch.net/test/read.cgi/php/1069245758/ に入門しる
0421nobodyさん
04/10/30 17:16:32ID:???車輪の再発明ではなく勉強のためなら↓を見るよろし。シンプルだ。
ttp://tohoho.wakusei.ne.jp/cgi/wwwupl2.txt
実用化するにはもう少し手を加えたほうがよいが。
0422nobodyさん
04/10/30 20:00:53ID:M6l56cQxcgiの再起呼び出しは可能なのでしょうか。
cgi上のフォーム で、cgiの一部を書き変えたいのですが。
0425nobodyさん
04/10/30 23:39:13ID:???1 -> 2 -> 3
と変更していく変数$aを作りたいのですが、
どうすればいいでしょうか?
大まかな方法は何となく分かるんですが、
ロック制御などについてよく分かりません。
0426nobodyさん
04/10/30 23:39:44ID:JL00AQ8N0427nobodyさん
04/10/30 23:58:31ID:???0428nobodyさん
04/10/31 06:04:57ID:PbybcUUPと
s/abc/c/;
s/bbc/c/;
とではどっちが速いですか?
0429nobodyさん
04/10/31 06:43:53ID:/9xW7Y/Dとして、
$query->param('File')
で受け取った値を、同じ(type="file")として別のCGIなどに
渡す事はできないのでしょうか?
調べてみたところ、(type="file")はセキュリティのため、
初期値を設定したりスクリプトで値を操作することが出来ないとされており、
同じ内容を受け渡す事ができず、困っております。
よろしければ、おしえてください。
0431nobodyさん
04/10/31 07:46:09ID:???0432nobodyさん
04/10/31 08:21:16ID:???これらの対応する変数の大きい順番に処理A,B,C,Dを行いたいのですがどうすれば良いでしょうか?
0433nobodyさん
04/10/31 08:23:04ID:???出来ないように作られているので出来ない。
出来るようにすると、お前以外の世界中の人が困るようになるので、出来るようには出来ない。
0434nobodyさん
04/10/31 08:34:02ID:???さんざんガイシュツだがLWP。HTTP::Request::Commonのマニュアルに
例つきで説明されてるのでよく読め。
0435nobodyさん
04/10/31 12:18:51ID:???パスワード認証画面が携帯電話(au W11H)で表示することができないです
<tr>
<td class="ent2">
<table border=0 cellpadding=0 cellspacing=5 width="100%">
<tr>
<td colspan=2>$title</td>
</tr>
<tr>
<td>ユーザー名 :</td>
<td><input type=text name=id size=15 value="$cid"></td>
</tr>
<tr>
<td>パスワード :</td>
<td><input type=password name=pw size=15 value="$cpw"></td>
</tr>
<tr>
<td></td>
<td><input type=checkbox name=cook value="1" $checked>
パスワードを記憶する</td>
</tr>
<tr>
<td colspan=2 align=right height=50 valign=bottom>
<input type=submit value=" OK ">
<input type=reset value="キャンセル"></td>
</tr>
</table>
行数足りなくて最後の方ちょっと省略しましたが
これを携帯で表示させるにはどうすればいいのでしょうか?
0436nobodyさん
04/10/31 14:15:22ID:???丸投げ改造スレへドゾー。
0437nobodyさん
04/10/31 14:18:58ID:???lsコマンド使って、Bサーバのあるディレクトリの一覧を取得するようなことは
可能でしょうか?
0438nobodyさん
04/10/31 14:32:57ID:???いくつかのやり方に応じて適切な条件が揃わないとできんよ。
つーか、逆に言うとそれをやられないように作られてるんだから。
0439nobodyさん
04/10/31 16:29:29ID:???しかし初心者だけにセキュリティ的な部分が非常に気になります・・・。
何かセキュリティ的に大丈夫かどうかチェックする方法ないですかね?
2chでさらす以外で。
他の初心者さんたちはどうしてるんだろ?
0440nobodyさん
04/10/31 16:37:53ID:???じゃなきゃ自分が上級者になる。
0441nobodyさん
04/10/31 22:09:05ID:???只でやりたかったら、どっかで晒すか知り合いに頼むしかないだろ。
金かける気があるならhttp://www.softek.co.jp/Sec/WebProbe/のようなツール使う。
0443nobodyさん
04/10/31 23:47:52ID:???XSSは当然として、セッションハイジャックやSQLインジェクションなど
その他色々。
0445nobodyさん
04/11/01 01:09:12ID:CTnWn+hAうるせーー!!!!!
0446nobodyさん
04/11/01 04:25:18ID:rUgrlUVh月がOctのように英語表記になってしまいます。
これはどのように数字に変更すればいいのでしょうか?
0447nobodyさん
04/11/01 10:51:27ID:???%Month = (Jan=>1, Feb=>2...)みたいなハッシュを用意しといてひけば
とりあえず数字にはなる。
0448nobodyさん
04/11/01 13:02:20ID:???みたいに12行書く。
0449nobodyさん
04/11/01 13:03:07ID:???0450nobodyさん
04/11/01 19:42:22ID:IPrYAMkf100単位でのキリ番は、
$a = substr("カウント値",-2,2);
if($a eq '00'){ print "キリ番"; }
で処理しています。
連番に関してはなかなかいいアイディアが思い浮かびません。
参考となるカウンターやアイディアをご教授ください。
0451nobodyさん
04/11/01 19:52:51ID:???0454nobodyさん
04/11/01 21:05:16ID:IPrYAMkf確かにダサイのですが要望があったので色々と試してました。
0の連続するきっちりのキリ番やゾロ目なら数十桁くらいを配列にいれて
比較してたのですが、連番となると数が多すぎて…
0455nobodyさん
04/11/01 21:17:07ID:???キリ番やゾロ目なら正規表現使う方が賢明だろう
連番はアイデアがないが
「自分が数字を見たとき連番かどうかをどうやって判断しているのだろう?」と
自分の頭の中の認知回路を自己分析してみると
実装可能なアルゴリズムを思いつけるかもしれん
0456nobodyさん
04/11/01 21:18:46ID:???sub zorome { my($x)=@_; $x % ('1' x length($x)) == 0; }
連番:
sub renban { my($x)=@_; zorome($x - substr('123456789', 0, length($x)-1));}
あたりでどう?
0457nobodyさん
04/11/01 21:25:11ID:hZSImnu8while(($var =~ /(\d)/) and ($var =~ s/$1{3}//)){print "連番やん\n";}
0458450
04/11/01 21:49:58ID:IPrYAMkf>>456、>>457様、ありがとうございます。
教えて頂いたものは負荷も少なく凄いです。
正規表現に疎いためまだ理解できていないのですが…
連番は何個からとかは特に決めていません。
12でも連番のキリ番として扱う予定です。
>>457様
$varに数値をいれるとして、$1の部分が理解できません。
これだと例えば1114も連番となってしまいますか?
0459nobodyさん
04/11/01 22:11:56ID:???0460nobodyさん
04/11/01 22:35:50ID:???$x =~ /^(\d)\1*$/
なのでこっちの方がシンプルかも? (最初が数字でその後0個以上の
同じ数字が文字列の最後まで続く)
最低n桁にしたければ*のところを{n-1,}にすればいい。たとえば
最低4桁なら
$x =~ /^(\d)\1{3,}$/
0461nobodyさん
04/11/01 22:38:27ID:???index("123456789", $x) >= 0
という手もある
0462nobodyさん
04/11/01 23:26:45ID:???入力チェックが効果的ってどっかで見た気がするが。
0463450
04/11/01 23:27:32ID:IPrYAMkf>>460、>>461様ありがとうございます。
正規表現でのゾロ目チェックは参考になりました。
連番でindexを使うのは気付きませんでした。
マルチだし、ハイジャックて・・・
0466nobodyさん
04/11/02 00:52:58ID:???セッション管理を必要としない仕様にする。
SQLを必要としない仕様にする。
そもそもセッション管理やSQLを使用しているのか疑問なのだが。
使用しているのならどこが穴になるのか想像できるはず。
ttp://www.atmarkit.co.jp/fsecurity/special/30xss/xss01.html
ttp://www.atmarkit.co.jp/fsecurity/rensai/webhole01/webhole01.html
0467nobodyさん
04/11/02 08:25:16ID:s3D5jAc8サイズはあっているのですが画像の上の10%くらいで変換がおわってあとは真っ黒になります
なにが原因なのでしょうか
use Image::Magick;
$i = Image::Magick->new;
$i->Read('test.jpg');
$i->[x]->Scale("200");
$i->Write("temp.jpg");
0468nobodyさん
04/11/02 09:46:11ID:???0469462
04/11/02 10:19:20ID:???0471467
04/11/02 10:55:21ID:MX3i4yL1$i = Image::Magick->new;
$i->Read('test.jpg');
$i->Resize(width=>200, height=>150, blur=>0.7);
$i->Write("temp.jpg");
これも駄目でした
0472nobodyさん
04/11/02 11:55:28ID:???なんか出てるかもよ。
ttp://www.imagemagick.org/www/perl.html#erro
0473nobodyさん
04/11/02 14:27:15ID:???使う事は出来ないんでしょうか?
foreach(@list){
if(/$pattern/$a){
print "true";
}else{
print "false";
}
}
正規表現を勉強しようと、
CGIで正規表現と複数の文字列をPOSTし、
文字列がマッチするか検証するスクリプトを書いています。
0476nobodyさん
04/11/02 18:01:53ID:???$a=4 if $b;
$b=5 if $b;
と
if($b){
$a=4;
$b=5;
}
なんか{}(ブロック)をなくす方が処理が早いみたいなこと聞いて
こんなつまらないことで悩んでる状況。
0477nobodyさん
04/11/02 18:19:17ID:???その月が何日が最終日なのかを調べるほうほうは
どのようにつくればいいのでしょうか?
0478nobodyさん
04/11/02 18:22:06ID:???0479nobodyさん
04/11/02 18:41:26ID:???それがものすごい回数繰り返されるループの中とかなら、
ベンチとって選べ。
そうでなければどうせ誤差ぐらいしか違わないから自分が
見やすいと思うほうにしとけ。
一般論としては、動くの作って動作速度に不満が出てから
プロファイラでどこが時間食ってるか調べて集中的に直せ、
と言われているようだ。
軽くベンチした感じでは、$bがfalseならif(){}の方が
3倍ぐらい早いが、$bがtrueなら25%ぐらい遅い。
0480nobodyさん
04/11/02 18:52:04ID:???my($y,$m) = (shift,shift);
my @days = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
return 0 unless (1 <= $m and $m <= 12 );
$m-- == 2
? $days[$m] + ($y % 4 == 0) - ($y % 100 == 0) + ($y % 400 == 0)
: $days[$m];
}
0482nobodyさん
04/11/02 21:02:59ID:???も、べんちまぁくしてねぇ(はぁと)
0483nobodyさん
04/11/02 21:03:44ID:???それだと条件分岐の評価が2回行なわれるので、
条件式次第では遅くなる可能性があるよ。
$a=4, $b=5 if $b;
$b and $a=4, $b=5;
($a,$b)=(4,5) if $b;
$b &&= 5 and $a = 4;
労力の割にはたいした効果が期待できないので、
最適化のためにblockを消したりとかは、した事ないけど。
0484nobodyさん
04/11/02 22:26:47ID:???04110222
をGMTで同じように8桁で表したいのですが、どの様にするのが
よいのでしょうか?
一旦、unix timeにして、-9時間して、戻すのが順当でしょうか?
できれば、use Time::Localはしたくありません。
(それが使えない環境などがありそうなため)
perl JST GMT でググってもTZとかしかでてきませんでした。
よろしくお願いします。
0485nobodyさん
04/11/02 22:27:49ID:???だれかおしえてくらさい
↓ここの部分
http://pc5.2ch.net/test/read.cgi/php/1097158988/l100
0486nobodyさん
04/11/02 22:31:43ID:???0487nobodyさん
04/11/02 22:49:38ID:???0488nobodyさん
04/11/03 00:48:07ID:???動作をしたいんですが、これはどうすればいいでしょうか?
index と substr を使う方法を思いついたのですが、
もっとスマートな関数とかありますでしょうか?
0489nobodyさん
04/11/03 00:52:38ID:???0492nobodyさん
04/11/03 07:37:05ID:???特にSWFのサイズ取得とかあるサブルーチンあったら教えてくださいませ
0493nobodyさん
04/11/03 07:42:15ID:???あとは自分で何とかしる。
$_ = '04110222';
my @a = /(..)/g;
my @m = qw/31 28 31 30 31 30 31 31 30 31 30/;
$m[1]++ unless $a[0] % 4;
my $t = 946652400 + 3600 * ($a[3] + 24 * int $a[2] - 1 + 365 * $a[0] + (3 + $a[0]) / 4);
$t += 86400 * $m[$_] for 0..$a[1] - 2;
print scalar localtime $t;
0494nobodyさん
04/11/03 12:14:21ID:???この辺だったか。
http://search.cpan.org/~ysas/SWF-File-0.37/lib/SWF/File.pm
0495nobodyさん
04/11/03 13:27:44ID:???Time::Localってperl本体に付属してたと思ってたんだけど、
分離されたんだっけ?
あとGMTにするのはgmtime使うかtimezoneいじるべきで
unix timeを9時間戻すのはよろしくないと思うよ。
0496nobodyさん
04/11/03 15:09:23ID:???0497nobodyさん
04/11/03 15:24:21ID:???> GMTにするのはgmtime使うかtimezoneいじるべきで
漏れもそう思うが、
> unix timeを9時間戻すのはよろしくないと思うよ。
これには何か理由があるのか?
0498484
04/11/03 15:46:43ID:???質問の仕方が悪かったかもです。
どうやらgoogle君に聞いてみると、Time::Localは標準ライブラリらしいです。
なのでどの環境いっても使えそうです。
重くなりそうという根拠のない理由から、できれば避けたいと書きました。
#標準ライブラリということを確定的できる情報元ってないんでしょうか…
何をしたいかというと、
0411031500という時間をcookieのexpire時間にしたいのですが、cookieではGMT
でJSTを指定できないらしいので変換をしなくてはならないのです。
>>493さんのコードちょっとむずかしすぎてまだ理解できてないです…
以下のURLのサブルーチンでunix timeにはできそうです。
http://www.ybi.co.jp/koike/qa3000/qa3165.htm
0499nobodyさん
04/11/03 15:56:35ID:???http://perl.infoware.ne.jp/documents.html
0500nobodyさん
04/11/03 16:07:16ID:???うるう秒が間に入るとずれるから。ちゃんとサポートされたシステム
での話しだけど。
クッキーのexpire時間ぐらいならそう厳密じゃなくていいから
構わんと思うけどね。
0501nobodyさん
04/11/03 16:41:00ID:???5.8.4の標準ライブラリなら
http://www.perldoc.com/perl5.8.4/lib.html
確実に知りたいのなら
perldoc perlmodlib
0503nobodyさん
04/11/03 16:55:54ID:???あんまりこだわる必要はないと思うけど?
それよりも、なぜにcookieのexpireで人間的日付を元にするのかが気になる。
単純に timeから30日間有効 とかにしてしまえば楽なのに。
0504nobodyさん
04/11/03 17:10:11ID:???情報ありがとう!
やはり1つの関数で勝手にファイル判別してくれるとかはないんですかね?
まぁ手動で見分けて条件分岐すればいいんでしょうけども・・・。
0505nobodyさん
04/11/03 17:12:48ID:???前に、そういうサブルーチンを見かけた気がするんですが検索しても見つかりませんでした。
よろしくお願いします。
0509nobodyさん
04/11/03 18:31:44ID:???なるほど、4年に一度狂う位なら問題なさそうなので、unix timeにして-9時間に
しようかと思います。
標準ライブラリは、導入されていなかったり、過去のバージョンであるかわからない
とのことなのでやっぱり使わないほうが無難な気がするので使わない方向でいきます。
>>503
なぜ、人間的日付かというと、その時間になったら掲示板に投稿できなくなるという
改造を自分でして、読みやすいから0411031700みたいな形で設定ファイルに保存
するという形をとったからです。
ここから間違いかもしれませんが…unix timeで保存した方が良かったのかもしれませんね。
#やっぱり見やすいからそうしました。
0511nobodyさん
04/11/03 19:27:43ID:???ここを探してみそ。
http://age.s22.xrea.com/talk2ch/
# 正しいID算出方法かどうかの保障はないけど。
>>504
見つけたら是非とも報告よろしくー。
0513nobodyさん
04/11/03 22:16:22ID:???トリップの作り方はわかったのですが、
↓ここのIDはどうやって作るんでしょうか?
356 :Now_loading...774KB :04/11/03 21:01:50 ID:j7+5/dK/
誰かよろしくお願いします。
0515nobodyさん
04/11/04 00:33:21ID:???0518nobodyさん
04/11/04 00:56:38ID:???$#xxは$[変えるとそれにつれて変わるので(要素数-1)として
使うのは危険だと習った。
$[ = 1;
@xx = (1,2);
print $#xx+1;
$[をいじったスクリプトなんて書いたことないけどね。
0519nobodyさん
04/11/04 01:03:20ID:???0520515
04/11/04 01:27:14ID:???0521515
04/11/04 03:06:36ID:???0522nobodyさん
04/11/04 03:30:18ID:???0524nobodyさん
04/11/04 11:55:35ID:3xCNLIZD処理させたいんですが、この場合環境変数とif文使えばいいんでしょうか?
0525524
04/11/04 11:56:51ID:???0526nobodyさん
04/11/04 12:48:50ID:???ブラウザに丸見えになりますよね?
で、一応暗号化はしたんですけど、例えばネットカフェに
データが残ってて、解析されたら終わりってことですよね・・・
う〜んどうすればいいものか。
他のスクリプトはどうやっているんでしょ?
0527nobodyさん
04/11/04 12:54:01ID:???<input type="text" name="url" value="">
</form>
上記のようにアクション先にその場で入力された
URLを指定することってできるでしょうか?
0530527
04/11/04 13:40:32ID:???0531527
04/11/04 13:41:16ID:???0532526
04/11/04 13:52:12ID:???0534nobodyさん
04/11/04 14:45:41ID:???0536nobodyさん
04/11/04 15:34:22ID:???「変数を」別のスクリプトに渡す
ということは、foo.cgi->Browser->bar.cgiの過程で
foo.cgiが出力した値をbar.cgiに渡したいということか?
0538nobodyさん
04/11/04 15:51:48ID:???海外で手に入れた会員管理の有料perlプログラムを使ってるんですが、
http://****.com/****.cgi?password=***** みたいな感じで
ログが残って、ログアウトしたあとも、ブラウザの戻るとかで
会員画面に入れるんだが、
詐欺プログラムですか、これは?
perlのことあまり詳しくありませんが、これなんとかする方法ありますか?
0540nobodyさん
04/11/04 16:03:30ID:???そういうセッション管理で一般的に使われるのはCookieだな。
Passは最初の認証だけ使って、後はセッションIDをCookieへ入れといて、
ワンタイムパスワードをPOSTさせて認証処理・・・って感じになるのかな。
本なんかをちょっと見ただけで実際に作ったこと無いから、落とし穴があるかも。
Cookieは気をつけないとPOST以上に危険だから注意
あと、
>ブラウザに丸見えになりますよね?
の一言が気になるんですが、まさかtype="hidden"を知らないなんてことは・・・
0541nobodyさん
04/11/04 22:34:38ID:???0542nobodyさん
04/11/05 00:12:53ID:???ActivePerl入れて、インターネットゾーンでも使えるようにレジストリ緩めれば、language=perlで好きなことできるよ。
そんな糞ページ誰も見ないがな。
0544nobodyさん
04/11/05 04:30:09ID:127p6d3j例:-a、-l、-h、-v、-r、<引数なし>を引数とする。
現在、引数を見て処理させる場合、
if ($#ARGV == "0") {
if ($ARGV[0] eq "-a") { 処理1; }
elsif ($ARGV[0] eq "-l") { 処理2; }
elsif ($ARGV[0] eq "-h") { 処理3; }
elsif ($ARGV[0] eq "-v") { 処理4; }
elsif ($ARGV[0] eq "-r") { 処理5; }
else { &error; }
}
elsif ($#ARGV == "1") {
if ($ARGV[0] eq "-a" && $ARGV eq "-l") { 処理5; }
elsif ($ARGV[0] eq "-l" && $ARGV eq "-h") { 処理6; }
elsif ($ARGV[0] eq "-h" && $ARGV eq "-v") { 処理7; }
elsif ($ARGV[0] eq "-v" && $ARGV eq "-r") { 処理8; }
elsif ($ARGV[0] eq "-r" && $ARGV eq "-a") { 処理9; }
else { &error; }
}
などとしていますが、引数が増えるとそれだけ組み合わせも増えるわけで
現在引数による分岐だけで混乱しています。しかもこのスクリプトを実際に
使用する場合、引数の順序も固定されてしまうので、表現力が乏しくなります。
それぞれの引数に数字を割り当てて、それをfor (@ARGV)で見ていって
それらを加算した結果で処理させる方法などを考えましたが、
数字を割り振るコツも分かりません。
引数や、それらの組み合わせが増えたとき、どういう風に対処すれば
分かりやすく、作りやすいスクリプトが書けるのでしょうか。
よろしくお願いします。
0545544
04/11/05 04:39:45ID:127p6d3j正しくは以下の通り。
if ($#ARGV == "0") {
if ($ARGV[0] eq "-a") { 処理1; }
elsif ($ARGV[0] eq "-l") { 処理2; }
elsif ($ARGV[0] eq "-h") { 処理3; }
elsif ($ARGV[0] eq "-v") { 処理4; }
elsif ($ARGV[0] eq "-r") { 処理5; }
else { &error; }
}
elsif ($#ARGV == "1") {
if ($ARGV[0] eq "-a" && $ARGV[1] eq "-l") { 処理5; }
elsif ($ARGV[0] eq "-l" && $ARGV[1] eq "-h") { 処理6; }
elsif ($ARGV[0] eq "-h" && $ARGV[1] eq "-v") { 処理7; }
elsif ($ARGV[0] eq "-v" && $ARGV[1] eq "-r") { 処理8; }
elsif ($ARGV[0] eq "-r" && $ARGV[1] eq "-a") { 処理9; }
else { &error; }
}
0546nobodyさん
04/11/05 04:46:45ID:???引数をハッシュに代入してexistsで条件分離したら?
for(@ARGV){
$param{$_} = '1'; #値自体はなんでもいい。
}
分岐は
if(exists $param{'-a'}){ 処理1;}
とか
if($param{'-a'} == 1){ 処理1;}
みたいの。
0547nobodyさん
04/11/05 06:55:34ID:???my %table = (
'a' => sub{ print "処理1" },
'l' => sub{ print "処理2" },
...
'r' => \&r_part,
'al' => \&r_part,
'hl' => sub{ print "処理6" },
...
);
sub r_part{ print "処理5" }
my $key = join('', sort @ARGV);
if (exists $table{$key}){
$table{$key}->();
} else {
print "ERROR";
}
0548547
04/11/05 07:02:16ID:???0549nobodyさん
04/11/05 07:51:54ID:???getoptとか、そんなのはダメ?
http://www.aplawrence.com/Unix/perlgetopts.html
0550544
04/11/05 10:39:14ID:T3r+ugEGありがとう御座います!
ぱっと見た感じでは
>>546さんと>>547さんは同じ処理ですか?
連想配列にこういう使い方があったと知って、眼から鱗の初心者です>私
両方を試してみます。ありがとうございます。
>>549
煩雑な徒手作業のところをできる限り自動化/半自動化していく積もりで
ゆくゆくはこうしたモジュールを有り難く使った方が効率が良いとは考え
ているのでこういう助言は本当に助かります。
ありがとうございます。
早速実験してみます。
ありがとう御座いました。
0551nobodyさん
04/11/05 11:05:29ID:vXdBVIeu正規表現で
s/ //g;
とやっても空白がマッチしなくなりました
s/\s//g;
ならマッチします
原因と元に戻す対処法を教えてください
0552551
04/11/05 11:19:18ID:vXdBVIeu0553nobodyさん
04/11/05 11:36:35ID:vAMAiFLGttp://tohoho.wakusei.ne.jp/wwwperl2.htm
こちらのsocket関数の項目に書かれているスクリプトを自分の
スクリプトに組み込んでますが
自分の使っているサーバーでperl -wcでスクリプトチェックを行ったら
Unquoted string "stdout" may clash with future reserved word at aaa.cgi line 543.
このような警告文が表示されました。
select(stdout);
のstdoutをAAAとか別のものに置き換えたらこの警告文が回避できましたが
別のものに置き換えても正常に動くのでしょうか?
perlのバージョンはThis is perl, v5.8.2 built for i386-freebsdです。
0554nobodyさん
04/11/05 11:56:32ID:???0555553
04/11/05 12:26:44ID:vAMAiFLGどうも有り難うございます。
stdoutをそのまま大文字にしても動くんですね
0556nobodyさん
04/11/05 13:45:35ID:uR92YhZOアドレス欄にIDとパスワードが表示され、
そのIDとパスワードを含んだアドレスを入力すると、
ログが記録されないのです。
(cgiの認証画面から入力するときちんと記録されます)
ログ記録はこんな感じなのですが。。。
どこか間違っているのでしょうか
sub record {
local($date,$time,$agent,@data);
# 時間&ホスト取得
$date = &get_time;
$time = time;
&get_host;
# ロック開始
&lock if ($lockkey);
# ログファイルの読み込み
open(IN,"$prvdir/$logfile") || &error("Open Error: $logfile");
@data = <IN>;
close(IN);
# ブラウザ情報
$agent = $ENV{'HTTP_USER_AGENT'};
$agent =~ s/&/&/g;
$agent =~ s/</</g;
$agent =~ s/>/>/g;
$agent =~ s/"/"/g;
0557556続き
04/11/05 13:45:59ID:uR92YhZO# ログ更新
while ($max <= @data) { pop(@data); }
unshift(@data,"$in{'id'}<>$date<>$host<>$agent<>$time<>\n");
open(OUT,">$prvdir/$logfile") || &error("Write Error: $logfile");
print OUT @data;
close(OUT);
# ロック解除
&unlock if ($lockkey);
}
0558556続き
04/11/05 13:54:30ID:uR92YhZOどなたか解る方お願い致します。
sub pwCheck {
local($f,$id,$pw,$check,$time);
if ($mode eq 'enter') {
$time = time;
if ($in{'cook'} eq "") { $in{'cook'} = 0; }
&set_cookie($in{'cook'}, $time);
}
$f=0;
open(IN,"$prvdir/$pwdfile") || &error("Open Error: $pwdfile");
while (<IN>) {
($id,$pw) = split(/:/);
if ($in{'id'} eq $id) { $f++; last; }
}
close(IN);
if (!$f) { &error("認証できません"); }
$pw =~ s/\n//;
$check = &decrypt($in{'pw'}, $pw);
if ($check != 1) { &error("認証できません"); }
&fileOpen;
if ($mode eq 'enter') { &record; }
exit;
}
0559nobodyさん
04/11/05 14:09:48ID:???0560nobodyさん
04/11/05 15:14:14ID:???まず、メソッドについて勉強したら良いんでないかい?
http://www.google.com/search?num=100&hl=ja&inlang=ja&safe=off&c2coff=1&q=GET+POST+%24ENV%7B%27REQUEST_METHOD%27%7D&lr=lang_ja
0561nobodyさん
04/11/05 15:21:59ID:???何をしたくて、どこがどのように思った通りに動いてくれないのか
わからない…。
URLにクエリーが表示されちゃって困ったよー。って話じゃない…?
0562nobodyさん
04/11/05 16:10:54ID:???0563伊藤
04/11/05 17:14:02ID:???0564nobodyさん
04/11/05 21:03:45ID:w/zBhN/Xこれを新しいウィンドウで開きたい場合はどのように書き直せばいいのでしょうか?
以下のようにするとエラーなんです。
よろしくお願いします。
print " <a href=\"$script?action=icondisp&type=$FORM{'type'}\" target="_blank">$lbl_iconlist</a>\n";
0565nobodyさん
04/11/05 21:17:13ID:???バーカ
print ' <a href="' . $script . '?action=icondisp&type=' . $FORM{'type'} . '" target="_blank">' . $lbl_iconlist . '</a>' . "\n";
0566nobodyさん
04/11/05 21:38:56ID:w/zBhN/X全角にスペースにしわすれました
すいません
0567nobodyさん
04/11/05 22:58:07ID:???printf qq| <a href="%s?action=icondisp&type=%s" target="_blank">%s</a>\n|;
$script, # スクリプトのお名前
$FORM{'type'}, # typeの値
$lbl_iconlist; # アイコソリスト(文字列)
0568nobodyさん
04/11/05 22:58:54ID:???あらやだ。
> printf qq| <a href="%s?action=icondisp&type=%s" target="_blank">%s</a>\n|;
printf qq| <a href="%s?action=icondisp&type=%s" target="_blank">%s</a>\n|,
0569365
04/11/05 23:36:15ID:???でいいんじゃないの?
0570nobodyさん
04/11/06 02:52:14ID:???0572nobodyさん
04/11/06 09:00:12ID:???0573nobodyさん
04/11/06 10:24:21ID:???0574nobodyさん
04/11/06 14:55:07ID:???ところで、NullPointerExceptionをPerl語にすると何?
0575nobodyさん
04/11/06 16:06:17ID:???0576nobodyさん
04/11/06 16:06:35ID:???0577nobodyさん
04/11/06 17:29:59ID:???ブラウザにファイルの内容を送ろうと思うのですが,どうすれば良いでしょうか?
以下だとファイルが壊れてしまいます.
open(FILE,"$FileName");
binmode(FILE);
print <FILE>; ←while(<FILE>){print $_ }でもだめ.
close(FILE);
送りたいファイルは40KB程度ですが,数MB程度のファイルも対応できるとうれしいです.
お知恵をお貸しくださいm(_ _)m
0578577
04/11/06 17:41:38ID:???よろしくお願いします.
0579nobodyさん
04/11/06 17:53:55ID:???環境によっては binmode(STDOUT); がいるんじゃないかな。
あと、バイナリファイルなら行読み込みにせず、readでバイト数指定して読み込み
while (read(FILE, $buffer, 1024*10)) ... バッファサイズは適当に
printで出力する場合はバッファoffするのも忘れずに $|=1 (念の為
0580nobodyさん
04/11/06 17:58:03ID:???binmode(STDOUT) してないだけじゃないの?
つーか、壊れるという曖昧な表現じゃなくて
バイナリエディタで比較してみたら こういう違いがでてきた、ってな感じで話してくれないと。
まぁ、それ見りゃ自分でもおかしいとこに気づくんだろうけどね
0581580
04/11/06 17:59:28ID:???カコワリィ
0582577
04/11/06 18:12:10ID:???レスありがとうございました。
原因は二つで,binmode(STDOUT)されてないこと,行読みした結果,改行コードが欠落したことでした.
>>579
「$|」というのはPerlの環境変数のようなものなのでしょうか?
print $|;だと値を返すようですが・・・
手元の資料&Google先生を調べても分からなかったのですorz
>>580
ご指摘,ありがとうございます.
「どういう風に壊れたのか」を説明する必要がありました.
失礼しました.
0583nobodyさん
04/11/06 19:13:15ID:???Don't mind, 既知問題っぽかったから推測で書いちゃったけど
実は全然違う原因だったって事はよくあるからね.
>>582
$|は検索しにくいのが難点だな。Perl バッファリングで調べると詳細でてくるよ。
0585nobodyさん
04/11/06 20:47:26ID:55uCUnw3/ ̄'☆ )>>1
/ > /
☆をダブルクリックするとかめはめ波が出るぞ
注)設定とか環境のせいで正常にかめはめ波しないときがあります
0587nobodyさん
04/11/06 20:56:12ID:ZyicEXrdを実行すると、「p.tif」 のファイル名が文字化けしてしまいます。
「use encoding "shift_jis";」の行を外すと、正常に「あ.tif」に変換
されるのですが、この行を残したままrename するにはどうすれば
よろしいでしょうか?
use encoding "shift_jis";
chdir 'c:\\test';
rename "p.tif", "あ.tif";
0588nobodyさん
04/11/06 21:13:32ID:jPPLQ8mN/ ̄'☆ )>>587
/ > /
☆をダブルクリックするとかめはめ波が出るぞ!
注)設定とか環境のせいで正常にかめはめ波しないときがあります
0589nobodyさん
04/11/06 21:20:51ID:???iso-2022-jp|shift-jis|euc-jp|multipart\/mixed
という記述をします。これを応用して、『英語か日本語にマッチ』するかどうかを記述するには
どうすればよいでしょうか?
0590587
04/11/06 22:56:11ID:???よろしくお願いします。
use encoding "shift_jis";
use Encode;
chdir 'c:\\test';
$str = encode("shiftjis","あ.tif");
rename "p.tif", $str;
0591nobodyさん
04/11/06 23:23:01ID:???no encoding;
で一旦切ってしまって、処理後にもう一度
use encoding "shift_jis";
しておく…のはあまりスマートじゃないですね。。
>>589
「キャラクタセットが英語または日本語である場合マッチ」ということなら、
http://www.iana.org/assignments/character-sets
↑と睨めっこして、必要なのを足していくとか。
(キャラクタセットの指定が無かったり、Unicodeを使われたら、終わりな気もするけど。)
0592nobodyさん
04/11/07 19:03:48ID:???する方法をど忘れしてしまったので教えてください。
「#」じゃなく。
0593592
04/11/07 19:14:26ID:???=comment # ここからコメント
=cut # ここまでコメント
0594nobodyさん
04/11/07 19:14:34ID:???0595nobodyさん
04/11/07 20:51:25ID:OKDqn1bD@dat = split(/*/, <DAT>);
これで合ってると思うのですが、どうしてもエラーになってしまいます。
*DATは存在します。ちゃんと*で区切られています。
0596nobodyさん
04/11/07 20:53:39ID:???0597nobodyさん
04/11/07 20:54:42ID:V/bBugXz誰かお願いします。
文字列 $xx=あいうえおaiueo
から2番目の'い'を取り出だすとき
substr($xx,1,1);ではだめで
全角は2バイト分なので
substr($xx,3,2);でないとだめなようです。
0599597
04/11/07 21:00:05ID:V/bBugXzランダムに生成された全角半角混合の文字列
$xx=げあじgraふぇeあefaじえeaあい;
から9番目のeを取り出す方法を教えて
0601nobodyさん
04/11/07 22:01:19ID:???0602nobodyさん
04/11/07 22:03:13ID:???my @moji;
foreach ($xx =~ /[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]|[\x20-\x7e\xa0-\xdf]/g) {push (@moji,$_)}
print $moji[8];
0603nobodyさん
04/11/07 22:40:30ID:???そこまでやったら、直接取り出せばいいんじゃない?
my $p = 9;
my ($moji) = ($xx =~ /([\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]|[\x20-\x7e\xa0-\xdf]){$p}/);
print $moji;
お勧めは、version5.8以上なら>>600さんの通りEncodeで、
それ未満なら、
http://search.cpan.org/~sadahiro/String-Multibyte-1.05/Multibyte.pm
0604nobodyさん
04/11/08 00:46:30ID:???my @moji = ($xx =~ /[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]|[\x20-\x7e\xa0-\xdf]/g);
print @moji[2..8];
なんにせよ環境も要件もよくわからんと返しようがないのぉ。
0605597
04/11/08 02:03:34ID:???トリップ生成用途だったのですが、これでうまくいきそうです。
みなさんどうもありがとうございます。
0607595
04/11/08 11:09:36ID:IV2+5aK4で代入したら、$data[0]にしか代入されていません。
どなたかよろしくお願いします。
0608nobodyさん
04/11/08 12:07:11ID:???その場合の <DAT> は一行しか読み込まないので、当然そうなるだろう。
というか何がしたいのだいったい。
ひょっとして君のやりたいことは @data = <DAT> だったりしないか。
0609nobodyさん
04/11/08 13:34:38ID:???0610595
04/11/08 15:22:15ID:hLOeveWjあっ、すみません。<DAT>はファイルハンドルです。
>>608
なぜこの場合だと一行しか読み込まないのですか?
では、どうすればすべての行を読み込んでくれますか?
説明不足ですみません。返答お願いします。
0612595
04/11/08 16:59:14ID:x02iMqC5すみません。やっていることがおかしかったですね。
ありがとうございました。
0613nobodyさん
04/11/08 17:06:22ID:???http://www98.sakura.ne.jp/~jun/perl/
どなたかここの移転先を知りませんか?
Perlに関するTipsや排他制御について、リファレンスについて説明してあったサイトなのですが
何時の間にかなくなったようで、、、、
0614nobodyさん
04/11/08 17:17:29ID:???閉鎖したんじゃないですかね?
どうしても見たいなら
ttp://web.archive.org/
でも使って下さい。
0615nobodyさん
04/11/08 21:29:51ID:???とすると改行\nが消えないですが、それを消して配列に代入する方法はありませんか。
0616nobodyさん
04/11/08 21:45:10ID:???0617nobodyさん
04/11/08 21:57:37ID:???{ local $/ = undef; @var = split(/\n/, <IN>); }
あたりかな。ただしファイルの末尾の空行が消えるのが嫌なら、
splitの第3引数に負の値を与えるとともに、splitしたあとで
@varの最後の要素を捨てる必要があるだろう。
普通に読んだ後でchomp @varした方が書くのは楽だね。
0618nobodyさん
04/11/08 22:31:46ID:???0619nobodyさん
04/11/09 00:16:14ID:???これを回避するにはいちいちヒアドキュメントを閉じるしかないですか?
0620nobodyさん
04/11/09 00:47:01ID:???0623nobodyさん
04/11/09 06:54:36ID:???このスレで質問するとよく言われます。。
>617>618
ありがとうございます。
0624nobodyさん
04/11/09 07:22:29ID:???言われないように努力したりしないの?
釣りだと思われるような質問しちゃってるんだよ?
0625nobodyさん
04/11/09 07:43:45ID:???例えばWindowsで下を実行すると
print $^O
> MSWin32
とか出ますが,WinXPとかWin98とかくらいまで詳しく知るには,どういう方法がありますか。
(できればUnix系でも詳しく知りたいです)
0626nobodyさん
04/11/09 09:36:25ID:enWymUQXされていないかとかしたいのですが、どうやってやったらいいのでしょう?
$url = "http://www.example.com/file.jpg";
@data = stat $url;
とかやっても取れないので(うすうすわかっていましたが)。。。
ウェブ上のデータとstatの内容を取得する方法を教えてください。
0627nobodyさん
04/11/09 09:59:56ID:???lwpでもなんでもいいけど
httpのヘッダで
Date か Last-Modified みるしかなかんべ。
取れなかったら諦めるしかない。
0628nobodyさん
04/11/09 10:07:38ID:enWymUQXありがとう。
そういうものなんですか。
0629nobodyさん
04/11/09 18:49:56ID:???$hoge =`uname -m`; とか。
詳しいことはUNIXのコマンドリファレンスでも探せば良し。
>>626
他のサーバーのデータは、
socketでソケット作って、connectで繋いで初めて得られる。
色々複雑だから、素直に解説本読みなはれ。
0630nobodyさん
04/11/09 19:46:44ID:???http://aspn.activestate.com/ASPN/docs/ActivePerl/lib/Win32.html
use Win32;
print join(', ', Win32::GetOSVersion()), "\n";
print join(', ', Win32::GetOSName()), "\n";
0631nobodyさん
04/11/09 22:34:49ID:???ありがとうございます。こんな風にしていろいろな環境でOS名を取得できました。
# 自分の目的のためには下の例で事が済んだのですが。
#-------
my $OS;
if ( $OS = `uname -s` ) {
#do nothing
} elsif ( !$OS and eval{require Win32} ) {
$OS = ( Win32::GetOSName() )[0];
} else {
die "MacPerl?";
}
print $OS;
> Linux, FreeBSD, Win2000, Win98...
#-------
my $OS = $^O;
if ( $OS eq 'MSWin32' ) {
require Win32;
$OS = ( Win32::GetOSName() )[0];
}
print $OS;
> linux, freebsd, Win2000, Win98...
0632nobodyさん
04/11/09 23:22:24ID:mn5HDpbSアクセスしてみたら、真っ白のページが表示されます。
んで、ホームページのソース表示してみたら、
確かにそこにはhtmlソースがちゃんとあるんだけど、
表示されていない。
原因はどんなことが考えられますでしょうか?
0634nobodyさん
04/11/09 23:31:31ID:???つうか原因探ってほしいならソースをどっかにあげましょう
0635632
04/11/09 23:34:40ID:mn5HDpbSContent-Type: text/html; charset=EUC-JP
<html lang="ja"><head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP">
<title>test</title>
このコードに問題ありますか?
0636632
04/11/09 23:36:40ID:???他ブラウザで試したら表示されました。
企業から配布されてるスクリプトなのにテキトーだなぁ
サンクスでした。
0637nobodyさん
04/11/10 00:18:59ID:sQyPPo3Ncronでcgiを動かすにはどのように設定ファイルを書けば宜しいのでしょうか。
/public_html/a.cgi
にありますcgiを例えば1時間毎にa.cgi?a=1&b=2とパラメータを渡してcronで
実行したいのですが。
よろしくお願い致します。
0638nobodyさん
04/11/10 00:22:22ID:???0639nobodyさん
04/11/10 00:37:27ID:sQyPPo3N大変申し訳ありません。
該当スレを御存知でしたらお願いしたいのですが。
0641nobodyさん
04/11/10 05:09:30ID:???perl /public_html/a.cgi
パラメータは渡せるが動的にするのはcronじゃ無理じゃないかな〜(知らないだけかも)
ちなみにコマンドラインのときはGETメソッドじゃなく引数になるから受け方違うよ
a=1とb=2が決まってるなら
ファイルの最初に宣言した方が早い
どうしてもCGIとして動かしたいならばWWW経由で/public_html/a.cgiを呼び出すプログラムが必要
それよりコマンドラインでperlを使ったことなさそうだけど
作るときちゃんと文法チェックしてるのかな?
0642nobodyさん
04/11/10 08:39:47ID:QcwLl9v+晒し上げ。
0643nobodyさん
04/11/10 11:45:26ID:I1NueUmNとかして、ディスクの使用状況をテキストに書き出したいんだけど、
これじゃあ戻り値を取得できないですよね。
どうやったら取得できますか?
0644nobodyさん
04/11/10 11:55:42ID:I1NueUmN自己解決しますた。m(_ _)m
0645nobodyさん
04/11/10 16:07:28ID:???どのようにしたらいいのでしょうか?
ファイル作成後に「ダウンロード」とボタンを表示してクリックしたら
ファイルをダウンロードするみたいな感じです。
0646nobodyさん
04/11/10 17:04:37ID:I1NueUmNprint "<a href=\"file\">DL</a>\n";
0647nobodyさん
04/11/10 18:18:53ID:???結構な頻度で値が取得できません。
ですが、少し時間をおいて取得すると値が取得できるので、
cookie作成のスピードよりもリダイレクト後のページで値を取得してるっぽいです。
従いまして、cookie作成時に少し時間を開けてからリダイレクトしたいのですが、
sleepを入れても意味がありませんでした。
この様な場合の対処方法をご存知の方がいらっしゃいましたら、どうかご教授ください。
よろしくお願いいたします。
0648nobodyさん
04/11/10 20:55:28ID:sQyPPo3Naaa,bbb,ccc,ddd
111,222,33,4444
このようなファイルがありaaa,bbb,ccc,dddを読み込んだ後にaaa,bbb,ccc,dddを削除して
ファイルを上書きするような処理です。
よろしくお願いします。
0649nobodyさん
04/11/10 21:03:44ID:???「ダウンロード」とボタンをクリックしたらファイルを作成して
print "Location: http://www.example.com/file.zip\n\n"
0650nobodyさん
04/11/10 21:52:59ID:QZhMSK0DダウンロードボタンをクリックしてCGIでperlを動かした先で
$length = (-s $file);
print "Content-type: application/octet-stream\n";
print "Content-disposition: attachment; filename=hoge.dat\n";
print "Content-Length: $length\n\n";
open(fp, "<$file");
binmode(fp);
print <fp>;
close(fp);
するとOKだと思う
0651nobodyさん
04/11/10 21:55:59ID:QZhMSK0D削除したい行以外を別の一時ファイルに書き込んで、元のファイル名にリネームする
で良いんじゃない?
他にいい方法があれば知りたい
0652nobodyさん
04/11/10 21:57:30ID:???0653nobodyさん
04/11/10 22:21:12ID:???クッキーを食べない時と食べる時がある状況が良く分からないけど…。
<meta http-equiv="refresh" ..>
を使ってクライアント側で飛ばして見るとか。
# 状況は改善されない予感。
0654nobodyさん
04/11/10 22:24:11ID:QZhMSK0D0655nobodyさん
04/11/10 22:30:47ID:???あぼーんすると変な状態で残ったりする。別ファイルに書き込み、
書き終わったらrenameなら書き換え前か書き換え後のどっちかには
なるので、オレはこのほうが好き。
0657nobodyさん
04/11/11 00:08:27ID:???IEでcookieが急に読めなくなった。(前はできてました。)
プログラムAでcookie送信してプログラムBに遷移して
そのcookieを取ろうとしても取れなかった。
他のcookieは取得することができました。
ネスケでは大丈夫だったんだけどなぁ。
ちなみにCGI.pm使って
$hoge=param('hoge');
とやって$hogeが空になっており、
cookieのフォルダを見るとちゃんとそのcookieがありました。
0659nobodyさん
04/11/11 00:52:30ID:???0660657
04/11/11 01:49:17ID:???paramのとこcookieです。
>>659
クッキーの設定も疑って全て許可にしてもだめだったのです。
でも、今家のPCで同じスクリプト走らせたらできました・・・。
で、サーバの方も試したらできました。
仕事場のPCからやった時はできなかったんですよほほほ。
ご迷惑おかけしました。
0661nobodyさん
04/11/11 11:33:09ID:???エラー出したいんですが、
どうすればいいんでしたでしょうか?
~[0-9]を使えばいいことはわかるんですが・・・
if($a=^[0-9]){
echo"error";}
何か間違ってますか?(^^;
0662nobodyさん
04/11/11 11:35:42ID:???0665nobodyさん
04/11/11 13:59:06ID:???0666nobodyさん
04/11/11 14:33:41ID:tk5UM/xB記載されている内容を処理しファイルに書きたいのですが
可能でしょうか?
基本的なことですみません。
何の言語を覚えたらいいのかわかりませんので。
0667nobodyさん
04/11/11 14:54:37ID:???0668nobodyさん
04/11/11 15:18:47ID:tk5UM/xB以下のようなことをWindows XP上でしたいのです。
できますか。
実行したら、例えばこの板のスレッド一覧
http://pc5.2ch.net/php/subback.html
を読んで
インデックス/スレタイ/その時点での書き込み数
をCSVファイルに書き込むようなものです。
中でリンクから各スレを読んで>>1のハンドルも取得できればなおよいです。
0670nobodyさん
04/11/11 15:21:57ID:???0671nobodyさん
04/11/11 15:28:02ID:riaohoToperlプログラムをローカルPCで実行
ネット上のウェブページの情報を取得
いろんな処理
ローカルPCに保存
ってこときゃ?
0672671
04/11/11 15:29:21ID:riaohoToすまそ
0673nobodyさん
04/11/11 15:32:15ID:R3WWGPIlチェックして必要があれば弾いたり空いている場所に追加したり削除する
CGIを作りたいのですが・・・・。
ユーザー名の入ったファイルを行入力演算子で配列に読み込んで、
それをいろいろやってから再び配列に戻して、最後に
$i=0;
while($i<=$count){
print FILE "$username[$i]\n";
$i++;
}
みたいに、改行して出力すれば次にCGIを呼び出したときに再び
行入力演算子で配列に読みこめるファイルが作成できるのでしょうか?
何度もやったのですが、どうしてもうまくファイルが作成できないのです。
0674nobodyさん
04/11/11 15:33:41ID:???そんな感じぢゃな。
perlプログラムをローカルPCで実行 → ActivePerl をゲットせよ
ネット上のページの情報を取得 → LWPの使い方を習得せよ
解読処理 → HTMLをパースする方法、正規表現とか HTML::Parser とかを習得せよ
CSVファイルに書き込む → まあ何とでもなるぢゃろう
>>672
その FILE とかいうファイルハンドラは
当然書き込みモードで open されとるんぢゃろうな?
0676673
04/11/11 15:35:58ID:R3WWGPIlいえ、入力モードで開いて配列に読み込んで、
一旦閉じてから再び出力モードで開いてます
0677nobodyさん
04/11/11 15:46:34ID:tk5UM/xBありがとうございます。
>>675
覚えてからできないのがわかったら悲惨ですから
先に確認したいと思いました。
じゃ勉強始めます。
0678nobodyさん
04/11/11 16:00:47ID:???スレの中身見るのは、自分で作りな。
use LWP::Simple;
$url = "http://pc5.2ch.net/php/subback.html";
@lines = split(/[\r\n]/, get($url));
foreach my $buf (@lines) {
if ($buf =~ /<base href="([^\"]+)"/){
$base_ref = $1;
last;
}
}
foreach $buf (@lines) {
if ($buf =~ /<a href="(\d+)\/l50">(\d+):(.*)\((\d+)\)/){
$thethread = $1;
$num = $2;
$title = $3;
$rescount = $4;
print "$thethread, $num, $title, $rescount\n";
}
}
0679nobodyさん
04/11/11 16:42:01ID:???このスクリプトの問題点を調べたいのですが、どのようにすればよい
かアドバイスを頂けたらと思います。
利用しているスクリプトは、余裕派掲示板です。
http://specters.net/cgipon/
バージョンは、2.62と、3.00 beta7を利用しておりどっちが
CPUを食っているかはまだわかりません。
そこまでCPUを使ってるのにkillしないサーバ屋もサーバ屋ですが、
とりあえず、他人の迷惑になるので調査したいのですが、とっかかり
がわかりません。
発生頻度は、1-2日に1回位起きてるのかもという位で、まだ
詳しくはわかりません。
よろしくお願いします。
0680nobodyさん
04/11/11 16:49:47ID:???0683nobodyさん
04/11/11 20:23:40ID:???>レンタルサーバにてたまにcgiがCPU 90%を長時間(600hとか)使うことがあります。
600時間てあんた、一体何動かしてるんだ?
ほぼ一ヶ月だぞ?
0686nobodyさん
04/11/11 21:11:26ID:Z05OwTsMそれを指定した位置から指定した位置の複数文字([6]から[14]までの文字)を
$hogeに入れるにはどうしたらよいですか?
0687nobodyさん
04/11/11 21:16:03ID:???$hoge .= $hoge[$i];
}
0688nobodyさん
04/11/11 21:35:44ID:Z05OwTsM多謝!!
0689nobodyさん
04/11/11 22:09:33ID:???0690nobodyさん
04/11/12 00:37:35ID:???0691nobodyさん
04/11/12 00:44:05ID:???0692nobodyさん
04/11/12 00:47:37ID:???$value =~ s/\n//;としてもだめでした。
perlバージョンは最新です。windows2000です
0694nobodyさん
04/11/12 01:02:48ID:???0696nobodyさん
04/11/12 01:18:01ID:???0697nobodyさん
04/11/12 03:20:48ID:???$hoge .= $foo; と $hoge = $hoge . $foo; は同じ
>>692
漏れはどっちでも対応できるように $value =~ s/\r?\n//g; ってしてる。
0698nobodyさん
04/11/12 07:17:05ID:???思い出しました、ありがとうございます
0699nobodyさん
04/11/12 09:07:08ID:bxBJtrFyのような文字列中からアルファベット三文字のリストを抜き出そうとしています。
my(@list) = $_ =~ /(?:^|[^A-Z])([A-Z]{3})[^A-Z]/g;
foreach (@list) {
print "$_\n";
}
にしてみたのですが抜き出されるのは
AAA,DDD,FFFの3つでAAA_のマッチのあとのBBBとDDD_のあとのEEEがとれません><
0701nobodyさん
04/11/12 10:29:01ID:???これでどうよ?
my $t = "AAA_BBB ZZZZ-DDD_EEE/FFF.AAA";
my(@list) = $t =~ /(?:^|[^A-Z])([A-Z]{3})(?=[^A-Z]|$)/g;
foreach (@list) {print "$_\n";}
最後のAAAにマッチさせたくないのであれば|$の部分をカット
0702699
04/11/12 16:58:54ID:bxBJtrFyありがとうございました。
0703nobodyさん
04/11/13 12:05:38ID:???実行環境を判定して場合分けしようと思いましたが、定番の方法があれば教えてください。
一応、こんなことしか思いつかないのですが・・
$^X=~/exe$/i
0706nobodyさん
04/11/13 13:50:49ID:???my $os = $^O;
my $separator = '/';
if ($os =~ /^MSWin/i or $os =~ /^dos/i or $os =~ /^OS2/i){
$separator = '\\';
} elsif ($os =~ /^MacOS/i) {
$separator = ':';
}
でも構わないと思うけど。
# 手抜きするなら、/[:\/\\]/で区切るとか。
0707nobodyさん
04/11/13 15:05:09ID:???やりたいことをまずは書いたほうが解決は早いよ。
ディレクトリ部分を削除してファイル名のみにしたいとか。そんな感じじゃないの?
0708nobodyさん
04/11/13 17:15:37ID:OROQk2Kk方法はありますでしょうか?
0709nobodyさん
04/11/13 17:46:23ID:???はい
0710nobodyさん
04/11/13 17:49:37ID:j/c/9VEEinfoseekのwebメールサービスで本文の文字化けが起きてしまいます。
例)あああああ → ??????????
ヘッダには以下のものを設定してあります。
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
ググってみたところ同じ問題を抱えているweb管理者さんがたくさんいることはわかったのですが
解決方法を見つけることはできませんでした。
文字化けさせない方法があったら教えてくださいませ。
0711nobodyさん
04/11/13 18:46:27ID:???0712nobodyさん
04/11/13 19:12:30ID:j/c/9VEEレスありがとうございます。
実は以前は""で括っていました。
これが文字化けの原因かも?と思い現在は""を外しているわけですが
やはり文字化けしてしまっているという状況です。
この問題が解決できれば、多くのWeb管理者さんが助かることになると思います。
(もちろん私もですが…)
どうか皆さん、お知恵をお貸しください。
0713nobodyさん
04/11/13 19:20:00ID:???0714nobodyさん
04/11/13 19:33:36ID:j/c/9VEEレスありがとうございます。
何度も見直しているのですが、PCのメーラから送ったものと特に違う箇所は無いのです。
(Received、Message-ID、X-Mailer等は抜かします)
Subjectは両方ともISO-2022-JPのBでエンコーディングして(されて)います。
0715nobodyさん
04/11/13 19:40:31ID:???とにかく化けたメールのヘッダを晒してみんしゃい
0716nobodyさん
04/11/13 19:42:20ID:???0717nobodyさん
04/11/13 19:56:16ID:???メール送信してみたが、文字化けはしない。
710の使っているCGIとHTMLのソースを見たら、原因が分かるかも。
0718nobodyさん
04/11/13 20:03:52ID:???>>708じゃないけど、よかったら教えてくださいな。
>>710
本文の文字コードが2022-JPかどうかをもう一度確認。
0719710
04/11/13 20:07:15ID:j/c/9VEEあまり綺麗なソースではないので恥ずかしいのですが、よろしくお願いします。
xxxの箇所は伏せさせてください。
my $mailer = '/usr/sbin/sendmail';
my $mlfr= 'xxx@xxx';
my $mlto= 'xxx@infoseek.jp';
my $mlsb= 'xxx';
my $mlmsg = "あああああ";
my $mlhd= "Reply-to: $mlfr" . "\n" . "MIME-Version: 1.0" . "\n" . "Content-Type: text/plain; charset=iso-2022-jp" . "\n" . "Content-Transfer-Encoding: 7bit" . "\n" . "From: $mlfr" . "\n" . "To: $mlto" . "\n" . "Subject: $mlsb" . "\n\n";
my $err = 0;
open( MAIL, "| $mailer -t -f'$mlfr'" ) or $err = 1;
if ( $err == 0 ) {
print MAIL $mlhd;
print MAIL $mlmsg;
print MAIL "\n";
close( MAIL );
}
なお、通常のメーラ、そしてyahooやhotmailなど他の無料メールサービスでは正常に表示されています。
0720nobodyさん
04/11/13 20:35:30ID:???0721nobodyさん
04/11/13 21:16:07ID:???でエラー出てないから、送ってるコードはiso-2022-jpじゃ無いだろ。
コード変換しろ。
0722710
04/11/13 21:17:27ID:j/c/9VEE鋭いご指摘ありがとうございます。
素晴らしく見事に見過ごしてました…orz
$mlmsgにコード変換かますことで解決しました。
皆さんありがとうございました。
0723nobodyさん
04/11/13 21:19:42ID:???- - - - - ここまで釣り - - - - -
0724nobodyさん
04/11/13 21:25:31ID:???...
0725nobodyさん
04/11/13 21:26:44ID:???|
│
/V\ J
/◎;;;,;,,,,ヽ
_ ム::::<,,゚ A゚>::| ジーーッ
ヽツ.(ノ:::::::::.:::::::.:..|)
ヾソ:::::::::::::::::.:ノ
` ー U'"U'
0726nobodyさん
04/11/13 21:33:59ID:???...
0727710
04/11/13 21:37:32ID:???でも決して釣りなどではありませんから、ええ本当に…('A`)
例えば大手サイトでもこんな感じで…
ttp://www.e-casio.co.jp/support/080.html
とにかくすみませんでしたorz
0729nobodyさん
04/11/14 00:51:05ID:???my ($err);
my $mailer = '/usr/sbin/sendmail';
my $mlfr= 'xxx@xxx';
my $mlto= 'xxx@infoseek.jp';
my $mlsb= 'xxx';
my $mlmsg = "あああああ";
my $mlhd= "Reply-to: $mlfr" . "\n" . "MIME-Version: 1.0" . "\n" . "Content-Type: text/plain; charset=iso-2022-jp" . "\n" . "Content-Transfer-Encoding: 7bit" . "\n" . "From: $mlfr" . "\n" . "To: $mlto" . "\n" . "Subject: $mlsb" . "\n\n";
if (open( MAIL, "| $mailer -t -f'$mlfr'" ))
{
print MAIL $mlhd;
print MAIL $mlmsg;
print MAIL "\n";
close( MAIL );
} else {
$err = 1;
}
関係ないけど、こんなのどう?
0731nobodyさん
04/11/14 09:59:57ID:???Reply-to: $mlfr
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
From: $mlfr
To: $mlto
Subject: $mlsb
EOF
0732nobodyさん
04/11/14 10:57:46ID:???0733nobodyさん
04/11/14 13:07:57ID:???そのままprintしてもいいよね
print MAIL <<_EOF;
Reply-to: $mlfr
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
From: $mlfr
To: $mlto
Subject: $mlsb
_EOF
0734nobodyさん
04/11/14 19:41:44ID:???sendmailがよきにはからってくれるが、明示的に
print MAIL <<_EOF;
Reply-to: $mlfr\r
MIME-Version: 1.0\r
Content-Type: text/plain; charset=iso-2022-jp\r
Content-Transfer-Encoding: 7bit\r
From: $mlfr\r
To: $mlto\r
Subject: $mlsb\r
\r
_EOF
とする方が望ましい。
0735nobodyさん
04/11/14 20:17:27ID:???0736nobodyさん
04/11/14 20:17:29ID:???Reply-to: $mlfr
...
EOF
0737nobodyさん
04/11/15 00:54:44ID:Pp2G7AAwperlのスクリプト中で、あるURLのhtmlファイルを取得して、そのファイルの
データを処理したいのですが、その取得方法がわかりません。
ぜひご教授お願いします。
0739nobodyさん
04/11/15 01:40:44ID:???本気で言ってるのか?
>>737
http://pc5.2ch.net/test/read.cgi/php/1097158988/351-
0740nobodyさん
04/11/15 02:56:46ID:???@data = (
'あ,1,A',
'い,2,B',
'う,3,C',
'え,4,D',
'お,5,E',
'か,6,F',
);
という例があったとして、これを数字でソートし、
さらに4にもっとも近い順からソートしたいのですが、これが上手くいきません。
方法があれば何卒教えて頂きたく思います。どうか宜しくお願いします。
0741nobodyさん
04/11/15 04:31:28ID:???for(@data){
$data{$_}=abs(4 - (split(/,/,$_))[1]);
}
foreach (sort {$data{$a} <=> $data{$b}} keys %data){
print $_, "\n";
}
0742nobodyさん
04/11/15 07:00:56ID:???sort{ $a->[0] <=> $b->[0] }
map{ [abs((split(/,/))[1]-4), $_] } @data;
--
# 数字は8桁以内
my @new = map{ substr($_, 8) }
sort{ $a cmp $b }
map{ pack('A8A*', abs((split(/,/))[1]-4), $_) } @data;
--
# >>741さんと同じハッシュ使用
my %temp = map{ $_ => abs((split(/,/))[1]-4) } @data;
my @new = sort{ $temp{$a} <=> $temp{$b} } keys %temp;
0743nobodyさん
04/11/15 08:47:06ID:???map{ sprintf('%08d%s', abs((split(/,/))[1]-4), $_) } @data;
だね…。
0744nobodyさん
04/11/15 10:38:06ID:???>740さんの例題をすこし弄って、
@data = (
'赤,あ,1,A,6',
'青,い,2,B,5',
'赤,う,3,C,4',
'青,え,4,D,3',
'赤,お,5,E,2',
'青,か,6,F,1',
);
これを>740さんの質問通り三つ目で四に最も近い数字でソートします。
この後が僕の質問なんですが、
これを更に一番目でソートし、最後に五番目でソート…
というのは出来ますでしょうか?
具体的にはこんな感じでしょうか?
@data = (
'青,え,4,D,3',
'青,い,2,B,5',
'青,か,6,F,1',
'赤,う,3,C,4',
'赤,お,5,E,2',
'赤,あ,1,A,6',
);
一応、>741さんや>742さんの解答を参考に頑張ってみたんですが、
やっぱり上手くいきませんでした。
複雑だし無理かもしれませんがどうかお願いします。
0745nobodyさん
04/11/15 11:14:04ID:???できなければ駱駝本を買って sort 関数のところを読め
0746nobodyさん
04/11/15 12:09:37ID:44z8JY7I気付いたら、以下のようなメッセージが極々々まれに出てるのに気付きました。
Character in "C" format wrapped at [フルパス]/jcode.pl line 554.
行554には $s2e{$code} = pack('CC', $c1, $c2); とかかれているのですが、
恥ずかしながらなぜ警告(?)メッセージが出てるか自分でわかりません。
どなたか教えて頂けないでしょうか?
(ネットで探してみましたがちょっとよく分からくて)
0747nobodyさん
04/11/15 13:27:24ID:???0748nobodyさん
04/11/15 14:04:03ID:???とりあえず診断メッセージがわからないときはperldiag(1)を
見るのがいいと思うのだが。
Character in "C" format wrapped in pack
(W pack) You said
pack("C", $x)
where $x is either less than 0 or more than 255; the "C" format is
only for encoding native operating system characters (ASCII,
EBCDIC, and so on) and not for Unicode characters, so Perl behaved
as if you meant
pack("C", $x & 255)
If you actually want to pack Unicode codepoints, use the "U" format
instead.
0749nobodyさん
04/11/15 15:03:24ID:44z8JY7Iありがとうございます。英語力は全く無いのですが、
0〜255の範囲以外のが来てるのでエラーになっているのですね。色々試しています。
0750737
04/11/15 21:26:40ID:YvLIGcESありがとうございます。LWPを使ってうまくいきそうです
(何をやってるのか自分でまだ理解できてなかったりしますが・・・)
0751nobodyさん
04/11/15 22:45:40ID:v6KPj5Kw1回のプロセスで何度も検索する場合、あらかじめハッシュを作った方が速くなるのでしょうか?
いまいちハッシュの性能というのが分からないのですが、検索キーをかえるたびに
1行目から値を探していくのと、ハッシュにキーを入れて値を得るのと、
ハッシュのほうが速そうな気がするんですが、やっぱり速いでしょうか?
0752nobodyさん
04/11/15 23:40:04ID:???case by caseとしか言いようが・・・
行という言葉を簡単に使ってるけども、
実際には行の切り出しという処理が入るわけだし、
それなら固定長でデータを扱う方が早いわけだし、
ハッシュというか位置インデックスを作れば固定長の呪縛が無くなるし、
というか何度も検索する必要があるのか?という根本的な疑問も残るし、
長くなったがオレの言いたいことはこれだね!
なんで試してみない?
0753nobodyさん
04/11/15 23:47:01ID:???実際二つ作ってみるのが早いですよね。めんどくさがって申し訳ないです。
組み合わせの検索をする感じなんですが、大体2500〜40000くらいの組み合わせから
条件に合うものをピックアップする感じで、やはりとにかく試すことにします。
ありがとうございました。
0754nobodyさん
04/11/15 23:51:24ID:???よくわからんが、もし言いたいことが
while($hairetsu[$index] ne $hikaku){ $index++; }
と
$index = $hash{$hikaku}
を比べたいのなら、後者の方が圧倒的に速い
0757751
04/11/16 00:18:23ID:???ああ読み違えました!のかな?
今必要としているのは、キーと値の両方で、キーはただの行数とかじゃなくって
ユニークなデータなので、while($hairetsu[$index] ne $hikaku){ $index++;}
の方だと無理なのかもしれません。ごめんなさいよく分かりません。
0758nobodyさん
04/11/16 00:23:16ID:???1000行ベタ検索した方が速い。30000行でもそうだったかな。
0759nobodyさん
04/11/16 00:35:13ID:???そりゃDBのが速いが、pnamazuが介在してるからか、
たいして変わらなかった。QDBMあたりでやったらどう
かな。こんどやってみるか。
0760nobodyさん
04/11/16 03:12:24ID:???何回も検索するならソートしてから二分探索するかハッシュ作った方が全然速い。
要素が1000個でも。
0761nobodyさん
04/11/16 06:55:09ID:???1回の検索ではリニアサーチの方が速いんなら、何回やっても
リニアサーチの方が速いだろうが(プッ
1*n < 1.2*n、ほれ回数が多くなるほど差は広がる。
0763nobodyさん
04/11/16 08:47:34ID:???mod_perlなんかならハッシュだな。つまり、何回も検索する際、
perlを起動しなおさない。作ったハッシュをメモリに保存しとく。
あと、namazuとかsufaryとかindexファイルを別に作っておくとか
すれば、>>760でOK.
0764nobodyさん
04/11/16 11:13:02ID:???リニアサーチよりハッシュの方が速いということ?
0766nobodyさん
04/11/16 16:53:03ID:???require 'ファイル';
って最初の方に読んじゃってますか?
そのファイルが必要な処理がある直前(複数箇所)で
requireしてるんだけど問題ありますかね?
複数箇所と行っても一回の起動では一箇所しか呼び出しません。
0767nobodyさん
04/11/16 17:34:24ID:???遅レス御免。
これで処理しても示されてる結果にはならないが、
条件が複数のソートはこんな感じでいいと思う。
$sort_routine = sub {
my @La = split /,/, $a; my @Lb = split /,/, $b;
abs(4 - $La[2]) <=> abs(4 - $Lb[2]) || $La[0] cmp $Lb[0] || $La[4] <=> $Lb[4];
};
@ahoo = sort $sort_routine @data;
0768762
04/11/17 06:08:04ID:???質問内容は
・3の要素でソート
・1の要素で安定なソート
・5の要素で安定なソート
で、その順番を逆転させれば一回でできる訳ですね。
5の要素でソート、同じ値なら1の要素でソート、同じ値なら3の要素でソート。
use sort "stable";
my @new = map{ $_->[3] }
sort{ $a->[0] <=> $b->[0] or $a->[1] cmp $b->[1] or $a->[2] <=> $b->[2] }
# sort {$a->[1] cmp $b->[1] or $a->[2] <=> $b->[2] } # 3と1の要素だけでソート(例示と同じ結果を得る)
map{ my @v = split(/,/); [$v[4], $v[0], abs($v[2]-4), $_]; } @data;
>>745
つっこんでごめん。
0769767
04/11/17 07:36:26ID:???せっかくその場で考えたのに、空しいぜ。
よく読んで頭冷やしてくるか。
>>766
条件などで読むファイルを変えたいときは、
途中に書いたことはあったけどね・・・。
何でもないときは、先頭に書くのが基本でしょ。
そのプログラムが、どのファイルに依存しているかを明示しておけば、
後々運用管理するのに楽になるし。
0770nobodyさん
04/11/17 17:56:42ID:???0771nobodyさん
04/11/17 18:32:44ID:tQLRR4kH何も出力できません。
open (OUT,"> test/$test");
while(<$fh>){ #$fhはファイルハンドルが入っている
prin OUT $_;
}
close(OUT);
という処理を繰り返し実行すると2つ目のファイルは
なにも表示されません。
1回実行したあとファイルハンドル($fh)を表示してみましたが、
確かに指し示しているファイルは1回目と変わりません。
ファイルハンドルを書き出した後ファイルハンドルって
どうなってしまうのでしょうか?
0773771
04/11/17 19:13:30ID:tQLRR4kHforでも同じでした。
0774771
04/11/17 19:20:12ID:tQLRR4kHできました。書き出す前にtellでファイルハンドルの場所を
取って来て、書いた後seekで戻す事によって解決しました。
お騒がせしました。
0775はなわlo
04/11/17 19:25:22ID:???ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
0776nobodyさん
04/11/17 19:38:43ID:GNPvE3vb何かよいモジュールなどありませんでしょうか。
0777nobodyさん
04/11/17 19:39:43ID:???0779質問です
04/11/18 01:55:30ID:U6GG0aJq$size = -s "$file";
print "Content-Disposition: attachment; filename=\"$file\"\n";
print "Content-Length: $size\n";
print "Content-Type: application/octet-stream\n\n";
open(DAT, "$file");
while(<DAT>){
print;
}
close(DAT);
のようなコードで file.xxx をダウンロードしたいのですが、
ダウンロード画面はちゃんとでてダウンロードできるのですが、
ファイルが壊れて保存されます。これはなんででしょうか。
OSはwindowsでapacheで動かしてます。。
0780nobodyさん
04/11/18 02:59:31ID:???DATもSTDOUTもbinmode()せにゃあかんのでは?
0781779です。
04/11/18 04:26:15ID:???ありがとうございます。
感謝感謝。
0782nobodyさん
04/11/18 11:15:20ID:???↑のような文字列から数値部分(123)だけを取り出す場合、どう書くのがスマートでしょうか?
TO:[数値] という書式は固定です。
0783nobodyさん
04/11/18 11:17:02ID:???$no = $1;
0785nobodyさん
04/11/18 13:06:46ID:If69CbzI1 while s/<font([\s\w\=\#\"\'\+\-]+)>/<font$1>/i;
1 while s/<\/font>/<\/font>/i;
これは"が"に変換されてるデータ($_)から"を"に戻し、
fontタグを有効にする処理ですが、これでは$_内の全ての"が"に戻ってしまいます。
しかし、"に戻す必要があるのはfontタグの"のみです。
最初にいきなりs/"/"/g;などとやらず、fontタグの"だけを"に戻す方法すにはどの様にすれば良いでしょうか?
0786nobodyさん
04/11/18 13:10:17ID:???s/";/"/g;
1 while s/<font([\s\w\=\#\"\'\+\-]+)>/<font$1>/i;
1 while s/<\/font>/<\/font>/i;
これは"が";に変換されてるデータ($_)から";を"に戻し、
fontタグを有効にする処理ですが、これでは$_内の全ての";が"に戻ってしまいます。
しかし、"に戻す必要があるのはfontタグの";のみです。
最初にいきなりs/";/"/g;などとやらず、fontタグの";だけを"に戻す方法すにはどの様にすれば良いでしょうか?
0787nobodyさん
04/11/18 13:13:42ID:???s/&quot;/"/g;
1 while s/<font([\s\w\=\#\"\'\+\-]+)>/<font$1>/i;
1 while s/<\/font>/<\/font>/i;
これは"が&quot;に変換されてるデータ($_)から&quot;を"に戻し、
fontタグを有効にする処理ですが、これでは$_内の全ての&quot;が"に戻ってしまいます。
しかし、"に戻す必要があるのはfontタグの&quot;のみです。
最初にいきなりs/&quot;/"/g;などとやらず、fontタグの&quot;だけを"に戻す方法すにはどの様にすれば良いでしょうか?
0788nobodyさん
04/11/18 13:14:13ID:???0789nobodyさん
04/11/18 13:32:05ID:???0790nobodyさん
04/11/18 13:38:18ID:???説明不足ですいません。
BBSのログで、保存する時点ではタグに関わる記号&;<>は全てデコードしてあります。
で、読み出して表示する際に許可したタグのみ有効にする仕組みになってて、fontタグのみ有効にしてます。
0792789
04/11/18 13:54:44ID:???0793nobodyさん
04/11/18 14:08:47ID:???こうかなあ。
0795nobodyさん
04/11/18 16:41:16ID:???って事にしました。
0796nobodyさん
04/11/18 17:13:54ID:???0797nobodyさん
04/11/18 17:54:10ID:???&hiroyuki; → &hiroyuki;
みたいに実態参照が定義されていない場合のみ & をエスケープしようと思ったら、
定義されているやつを全部リストとかで持ってないとダメなんだろうか。
使えるモジュールとかありますか?
0798nobodyさん
04/11/18 18:15:24ID:???HTML::Entities
decode_entitiesに食わせて変化するか(定義されていれば変化する)
または、
%entity2charハッシュのキーにあれば定義されている
といったあたりでいけると思う。
0800nobodyさん
04/11/18 19:09:44ID:???ありがとう。うまくいってるようです。
でも借りてるサーバーには HTML:: が無いんだけど、まあコピーして置いとけば動くだろう。
0801nobodyさん
04/11/18 19:59:02ID:???すいません。<>も&lt;&gtに変換された状態なのを説明してませんでした。
<>のままの状態だと>>793さんので出来ました。
0802nobodyさん
04/11/18 21:45:59ID:???s!<(/?font\b.*?)>! (my $s=$1) =~ s/"/\x22/g; "<$s>" !egis;
ではどう?
<font **>と</font>の両方を < > も含めて戻せると思うんだけど。
0803nobodyさん
04/11/18 21:57:39ID:???ばっちり復元出来ました!すげー!
FONTタグで囲まれたデータ部分の&lt;&gt;&quot;はそのままで、
タグの記述部分だけちゃんと変換されてます。
ありがとうございました!
0804nobodyさん
04/11/19 08:46:55ID:???telnetモジュールを使用して、リモートコンピュータに接続してから、
・screen起動
・外部プログラム起動
・CTRL-A d で[detached]
という操作をperlで実行したいのです。
色々サイトを回って調べて、telnet接続まではできたのですが、
上記手順の「CTRL-A d で[detached]」で行き詰っております。
CTRL-Aという操作をperlのtelnetモジュールで行うには、
どういう記述をすればよいのでしょうか?
0805804
04/11/19 10:44:06ID:???何でscreenを使用したいかというと、
webブラウザ上で、サーバのプログラムを起動させ、常駐させたいからです。
通常のデーモン(inetdなど)であれば、わざわざscreenなど使わなくても
telnetモジュールで接続させ、コマンドを実行させればよいのですが
今回起動させたいプログラムは、バックグラウンドで動作してくれないため、
常にコンソールを開いておく必要があるのです。
なので、仮想的に常駐させるためにscreenを選んだというわけです。
当方、UNIX系OSに触れて1週間足らずなので、
「screenなんて使わなくても この方法でいいだろバカ」
という意見なども助かります。
0806nobodyさん
04/11/19 10:59:05ID:n9OG7mgXswfに表示するということをやっております。
画像は正しくロードできるのですが、ファイルサイズが取得できず、
ローディング表示ができなくて困っています。
詳しく説明します。
まずswf内で
_root.[object].loadMovie("hoge.cgi", "POST");
を使い、ロードの要求をします。
するとhoge.cgiでimageMagickというモジュールを使い、
縦横サイズを変更します。ここでPOST送信されている
stageWとstageHとranはswfから送られてくる変数です。
0807806
04/11/19 10:59:50ID:n9OG7mgX---
use Image::Magick;
if($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}else {
$query = $ENV{'QUERY_STRING'};
}
foreach $pair (split(/&/, $query)){
my ($key, $value)=split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$form{$key}=$value;
}
$i = Image::Magick->new;
$img="img/cover$form{'ran'}.jpg";
$i->Read($img);
($width, $height)= $i->Get('width', 'height');
if($width/$height>=$form{'stageW'} / $form{'stageH'}){
$newwidth =$width*$form{'stageH'}/$height;
$i = $i->Transform(geometry=>$newwidth);
}else{
$newwidth= $form{'stageW'};
$i = $i->Transform(geometry=>$newwidth);
}
print "Content-type: image/jpeg\n\n";
binmode(STDOUT);
$i->Write("jpeg:-");
undef $i;
exit;
---
0808806
04/11/19 11:00:52ID:n9OG7mgX--
そして戻ってくる画像データをswf内にて
getBytesLoaded()やgetBytesTotal()で調べています。
するとロードされたバイト数はしっかり取得できているのに
対し、総ファイルサイズはロード中はずっと0になっていて、
ロードが完了すると総ファイルサイズが表示されます。
OS FreeBSD
perl 5.8.x
Flash ver.6.0
どうか、よろしくお願いいたします。
0809nobodyさん
04/11/19 12:30:01ID:???0810nobodyさん
04/11/19 13:49:59ID:???read STDIN,$alldata,$ENV{'CONTENT_LENGTH'};
を実行したら$alldataの中身は変わってませんでした。
原因はどこですか?
0811810
04/11/19 14:33:50ID:???0812nobodyさん
04/11/19 15:43:47ID:???真横に表示させることはできないのでしょうか?
ttp://spiral.lib.net/cgi/mc/
0813nobodyさん
04/11/19 15:47:41ID:???0816nobodyさん
04/11/19 19:45:10ID:???($tmp) = "hoge";
とか。
これは何の意味があるんでしょう?
0817nobodyさん
04/11/19 20:16:23ID:???その例ではまったく無意味かと
($foo, $bar) = @_;
とかやると
$foo = $_[0];
$bar = $_[1];
の効果が得られる。
多分書いた人の癖じゃないか?
0818nobodyさん
04/11/19 20:26:47ID:???レスありがとうございます。
某レスQのCGIにしばしば出現てて悩みました。()の中はスカラ変数が一つだけなんです。
実際は右辺はサブルーチンだったりするんですが、配列は戻ってこない。
($ret) = &getMessage("$filename$EXT");#戻り値は0か1
とか。
悩むのやめときます。
0819nobodyさん
04/11/19 22:09:11ID:???0820804
04/11/19 22:47:11ID:???レスありがとうございます。
/dev/nullについて調べて、実際に動かしてみました。
要するに出力をポイっとやるわけですよね?
末尾の2>&1は何でしょうか?色んなサイト調べてみましたが、
nullの動作に触れてるところばかりHITしたらしく。。orz
nohupもためさせてもらいました。
動作的にはscreenと似ているので、助かります。
しかし、nohupすると、私のUNKサバではかなり重くなってしまいます。。
出力を書き込んでいるからでしょうか?
あと、nohupや &での開始だと、telnetモジュールを切断させた後
ジョブをフォアグラウンドに復帰させる方法が見当つきません。。
我侭ばかりですいません。よろしくお願いします。
0821804
04/11/19 22:50:33ID:???割り込みキー入力(今回の場合はCTRL+A)を
perlからコンピュータに送信する方法はあるのでしょうか?
板汚し申し訳ないorz
0822nobodyさん
04/11/19 23:02:34ID:???そうやっておくと、もし2つ以上の返り値があった場合に
最初の値だけ取って、残りを捨てるということができる。
安全策ってわけだな。
あまり誉められたものではないと思うけど。
0824nobodyさん
04/11/19 23:09:06ID:???0825823
04/11/19 23:20:43ID:???おっと2>&1についてもついでに答えるんだった・・・
「標準エラー出力を標準出力に纏める」という意味。
nohupが重くなる理由はmanに書いてあったぞ
> スケジューリング優先度は 5 増やされるので、
> 実行の割り当て時間はやや小さくなる。
そんなに大きく変わるかは知らないが
0827nobodyさん
04/11/20 04:13:04ID:???ある, 改行コードがCR+LFのテキストファイルがアップロードされた際, 改行コードをLFに
変換し, そのファイルを保存するcgiを書きたいのですが, 以下のように書いてみましたがうまくいきません.
LFに変換されずCR+LFのまま保存されてしまいます.
#!/usr/bin/perl
use CGI;
$query = new CGI;
Content-type: text/html\n\n
$fn = $query->param('filename');
$type = $query->uploadInfo($fn)->{'Content-Type'};
if($type =~ /^text\//){
open(FILE,">test.txt");
while (<$fn>) {
$temp = $_;
$temp =~ s/\r\n/\n/;
chomp($temp);
print FILE "$temp\n";
}
}
どのようにしたらいいでしょうか?宜しくお願いします.
0829nobodyさん
04/11/20 08:04:12ID:???>>809のContent-Lengthは、レスポンスの方だと思う。
print "Content-type: image/jpeg\n";
print "Content-length: $filesize\n\n";
で、$filesizeにjpegデータのサイズを入れておく。
(一旦テンポラリファイルを作らないとだめかも知れないけど)
0830nobodyさん
04/11/20 08:31:32ID:???バイナリモード binmode を参考に
0832nobodyさん
04/11/21 07:32:38ID:???screen使った事ないけど、man読んでみた限りでは、
-d -Dでいけるんじゃ?
それから、うに板の方が適切な質問じゃないかと。
0833nobodyさん
04/11/21 12:49:54ID:???...
}
の中で現在の行番号を取得する良い方法はありませんか?
$_ == $list[$hoge] になるような $hoge が知りたいのですが……。
カウンタ変数を新たに作るしかないんでしょうか。
0834806
04/11/21 13:04:12ID:Ewup0dSnお力添え、ありがとうございます。
早速やってみます!!
0837nobodyさん
04/11/21 18:47:52ID:8gMC3V6h一応入力チェック(サニタイジング)として、like演算子のワイルドカードである
「%」と「_」があったら削除してます。
よく考えたら「_」はメールアドレスとして普通に使われてる可能性があるんですよね。
そこで質問ですが、_これってlike演算子以外では安全ですよね?
DBIのprepare時にプレースホルダを使用してるのですが、みなさんは_対策とかしてますか?
0839nobodyさん
04/11/21 19:01:17ID:ubTrO76Hif ($user_agent[0] eq 'DoCoMo') { $URL=$iURL; }
elsif ($user_agent[0] eq 'J-PHONE') { $URL=$vURL; }
elsif($user_agent[0] eq 'UP.Browser' || $user_agent[0] =~ /^KDDI/) { $URL=$eURL; }
else { $URL=$pURL; }
print "Location:$URL\n\n";
print "Content-type: text/html\n\n";
print "<HTML><HEAD><META HTTP-EQUIV=\"REFRESH\" CONTENT=\"10;URL=$URL\"><TITLE>auto jump</TITLE></HEAD><BODY><A HREF=\"$URL\">自動でジャンプしない場合はこちらから</A></BODY></HTML>";
exit;
というのでHPを携帯なら携帯で察知して携帯用HPに
飛ばすようにしているのですが
話題の京ぽんを携帯用に飛ばしたいのですが出来ません。
ご教授ください。
0841nobodyさん
04/11/21 19:48:30ID:w/cY/u9z@hoge=$url=~m/http:\/\/[-_.!~*'\[\]\(\)a-zA-Z0-9;\/?:\@&=+\$,%#]+/gi;
で
<a href="http://gaerge">fgagear</a>
とかを取得すると、
http://gaerge">fgagear</a>
となってしまいます。
どこをどう直せばいいんでしょうか。
0843nobodyさん
04/11/21 20:07:53ID:w/cY/u9z正規表現メモを参考にしたんですが。
0844nobodyさん
04/11/21 20:55:58ID:???AirWiki: AirH"PHONE/AH-K3001V/FAQ
http://d.memn0ck.com/index.cgi?AirH%22PHONE%2FAH-K3001V%2FFAQ#i15
>>841
my $url = qq{<a href="http://gaerge">fgagear</a>};
my @hoge = $url =~ m/http:\/\/[-_.!~*'\[\]\(\)a-zA-Z0-9;\/?:\@&=+\$,%#]+/gi;
print "@hoge";
問題なさそうだけど。
0845nobodyさん
04/11/21 20:57:55ID:???コピペして @hoge を print してみたけど
http://gaergeになったよ
0846841
04/11/21 21:33:14ID:???正規表現事態は間違ってないみたいですね。
しかしなんでだろう・・
0847nobodyさん
04/11/21 22:26:23ID:hibhMAEScgiサーバーからhtmlサーバー内のログファイルを読み込むには、別サーバなので、
ソケットを使わなければいけないということで、とりあえずトップページを表示させようと、
次のソケットスクリプトを実行してみました。
$host = "www.xxxxxxxxxxx.com";
$page = "/";
$line = "";
$addr = (gethostbyname($host))[4];
$name1 = pack("S n a4 x8", 2, 80, $addr);
socket(S, 2, 1, 0);
connect(S, $name1);
binmode(S);
select(S);
$| = 1;
select(stdout);
print S "GET $page HTTP/1.0\r\n\r\n";
while (<S>) { $line .= $_; }
close(S);
print $line;
ページの指定を$page = "/index.html";にするとNot Found
$page = "/";にするとForbiddenという反応が返ってきてうまくいきません。
これはただ、パスの指定が悪いだけなのか、やはりサーバーの設定で
ソケットが使えないようになっていて、cgiサーバーからhtmlサーバーの
ファイルを読み込むのはあきらめなければならないということでしょうか?
0849nobodyさん
04/11/21 22:50:12ID:???0851839
04/11/21 22:51:26ID:ubTrO76Hどれもだめです。
そもそもの書き方を間違えているのでしょうか?
0853nobodyさん
04/11/21 23:48:01ID:???京ぽんつーのが何なのか知らないが、elseの中でUA名を表示させてみれば
どういうUA名で分岐すればいいのか分かるのでは?
0854nobodyさん
04/11/22 00:59:03ID:???いちいち1ファイルごとに読み込んでマッチ処理の繰り返しでは負荷的にも問題あるので、
データディレクトリでgrepかけて、該当したファイルのみ読み込みたいのですが、
perlでやるにはどうすればよいでしょう?
0855nobodyさん
04/11/22 01:10:34ID:???最もシンプルな記述はどんな感じになりますか?
0857nobodyさん
04/11/22 01:18:25ID:???0858nobodyさん
04/11/22 01:22:50ID:???>>1
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0859nobodyさん
04/11/22 01:25:58ID:???open(IN,"grep '$keyword' file|");#実際にgrepを実行する
って手があるが、鯖によってはgrepはダメかもしれない。
ファイル名の検索ならFile::findで一発なんだが・・・。
0860855
04/11/22 01:31:38ID:???ifで書くと長いので。
>857
多謝。
0863nobodyさん
04/11/22 02:20:18ID:???ファイルの数が多ければ grep の方が軽いが、
少ないなら perl の中でループ回す方が鯖にやさしい。
てのはコーディングというより負荷軽減スレにふさわしい話題だが。
0865nobodyさん
04/11/22 03:28:27ID:???0866nobodyさん
04/11/22 04:23:59ID:???0867nobodyさん
04/11/22 04:47:42ID:???0868nobodyさん
04/11/22 05:42:53ID:/gdSyseW>>852
>print S "GET $page HTTP/1.0\r\nHost: $host\r\n\r\n";
hostを入れたら違う反応が返ってきて次のメッセージが表示されました。
HTTP/1.1 200 OK Date: Sun, 21 Nov 2004 20:36:26 GMT Server: Apache/1.3.27 (Unix) Last-Modified: Thu, 11 Nov 2004 02:34:45 GMT ETag: "718102-ddd-4192cfc5" Accept-Ranges: bytes Content-Length: 3549 Connection: close Content-Type: text/html
ただ、期待したトップページは相変わらず表示されませんでした。
このメッセージからソケットが使えるって判断できるでしょうか?
0869nobodyさん
04/11/22 06:30:29ID:/gdSyseWトップページにはフレームを使っているので、表示されないみたいです。
取得したいログファイルを指定したら、見事に表示されたので、ソケットは使えることは確認できました。
ただ、次の応答メッセージが頭にくっついてくるので、これを取得しないようにすることはできるでしょうか?
HTTP/1.1 200 OK Date: Sun, 21 Nov 2004 20:36:26 GMT Server: Apache/1.3.27 (Unix) Last-Modified: Thu, 11 Nov 2004 02:34:45 GMT ETag: "718102-ddd-4192cfc5" Accept-Ranges: bytes Content-Length: 3549 Connection: close Content-Type: text/html
0871nobodyさん
04/11/22 07:06:38ID:???ヘッダの最後は
CRLFCRLF(最低限LFLF)
になってるので、取得した後、そこまでカットすれば問題ないっしょ。
0872nobodyさん
04/11/22 07:20:47ID:/gdSyseW取得した後で加工してカットするということですか?できれば、取得時にカットしたいのですが、
不可能であれば、最終手段はそうするしかないですね。
0873nobodyさん
04/11/22 07:48:05ID:???<>で読むなら、空行が出るまで別の変数に入れておくとか、空読みするとか。
あと、socketとconnectのエラー処理をした方がいいよ。
0874nobodyさん
04/11/22 08:44:18ID:???0875nobodyさん
04/11/22 10:28:03ID:/gdSyseW素人考えで申し訳ないですが、GETのところでオプションなどをつけてその応答メッセージを
出さないようにすることってできないものですかね?
HTTP/1.1 200 OK 〜〜text/html 取得したログファイルの内容〜
取得した内容は↑のようになっていて、応答メッセージと取得したログの間は半角スペースと
なっています。
応答メッセージを取得時にカットできない場合、取得後にカットするわけですが、シンプルに
カットするには、どういう方法があるでしょうか?perl初心者なもので、たびたびすみません。
0876nobodyさん
04/11/22 11:44:54ID:???チミはx68userのページ見て勉強してから出直すといい。
http://x68000.q-e-d.net/~68user/
別の解法: 他の人も言っているがLWPというチミがやりたいことをそのまま提供している
モジュールがあるので、そっちを使うと簡単。
「原理を理解しなくても目的を達成できりゃいい」という事ならばこっちをすすめる。
0878806
04/11/22 11:50:53ID:dylfkRdnprint "Content-type: image/jpeg\n";
print "Content-length: $filesize\n\n";
と書いてみました。swf側でファイルサイズを取得できて大喜びだったんですが、
jpg画像が途中から壊れて表示されるようになってしまいました。
>(一旦テンポラリファイルを作らないとだめかも知れないけど)
すみません。調べてみたのですが、ちょっと意味が。。。
0879nobodyさん
04/11/22 12:00:44ID:???もしContent-lengthをつけただけでそうなったのなら、
$fileseizeの値がおかしい可能性が高いな。
0880806
04/11/22 13:03:45ID:dylfkRdnレス、ありがとうございます!
print "Content-type: image/jpeg\n";
print "Content-length: 100000\n\n";
とかやってみたのですが、やはり画像が壊れて表示されます。
(こんなことしてはいけないのかな。。。)
0881806
04/11/22 13:14:51ID:dylfkRdnできました!!
やはり値がうまく入っていないだけでした。
ただ
($width, $height, $filesize)= $i->Get('width', 'height', 'filesize');
と値をとっただけなのでリサイズ前のファイルサイズがとれているだけなのですが。
テンポラリファイルとは一度このファイルをtmp.jpgとかにしてそのファイルサイズを
を測らなくてはならないという意味だったのでしょうか?
0882nobodyさん
04/11/22 14:04:38ID:/gdSyseWhttp://x68000.q-e-d.net/~68user/
x68userのページで、「HTTP クライアントを作ってみよう」という記事を見ましたが、
どうもヘッダを除いてボディだけを出力するというのはできなさそうに感じました。
LWPについてはx68userのページで一通り見ましたが、掲載されていないように
見受けられるので、いろいろ検索してそれらしい解説ページを見ましたが、
使用方法について内容の濃いページを見つけられませんでした。
一般的にどのサーバーにもLWPのモジュールが入っているのか?、当方のレンタル
サーバーでLWPは使えるのか?といった辺りからよくわかりません。
(見当違いなことを言っていたらごめんなさい。)
結局、ソケットでヘッダー(応答メッセージ)も含めてファイルを取得し、文字列操作
して、わざわざいらない部分を取り除かなければならないことになりそうです。
同じサーバーならopenしてファイルを参照できるのに、他サーバーのファイルを
参照するだけで、えらく苦労しています。
0883nobodyさん
04/11/22 14:15:38ID:???ボディだけ欲しいならHTTP/0.9で取れるが、HTTP/0.9はHostを送れないのでチミのホストでは駄目。
でも、ヘッダー読み飛ばすのなんか楽勝でしょ。
http://x68000.q-e-d.net/~68user/net/http-2.htmlだと38-41行
0884nobodyさん
04/11/22 14:30:16ID:C0NQJmHQそこに添付されてきた画像ファイルをCGIで読み込み
メインアカウント(例:main)内にあるフォルダに保存させています。
読み込むCGIをgetmail.cgiとするとこれを手動で実行すると
問題なく動作するのですが
crontabを用いて自動実行させると添付ファイルの保存がされません。
crontabによりgetmail.cgiは動作しているものの
保存のみがされないようです。
0-59/2 * * * * cd /home/sites/www.xxx.jp/web && /home/sites/www.xxx.jp/web/mailget.cgi
で実行させています。
環境はRed Hat Linux 7.3
Apache 1.3.27
Sendmail 8.11.6
です。ちなみに、別のレンタルサーバー(FreeBSD)では動作していました。
原因がどこにあるのかご教授ください。
0885nobodyさん
04/11/22 14:31:03ID:???>参照するだけで、えらく苦労しています。
いやそれはそういうモノだ
Perlコーディング以前の「コンピュータが動くしくみ」とかいう次元の問題として
0886nobodyさん
04/11/22 14:54:17ID:/gdSyseWひとまず、ご指摘の箇所を適用してヘッダーを読み飛ばし、ボディだけ抽出できました。
ありがとうございました。
0888nobodyさん
04/11/22 15:58:18ID:???実行ユーザ名・使用するファイルのパミッション・使用する環境変数等々
チェックすることはいっぱいあるよ。
んでも、エラーを適切に処理してればどこでコケたか分かるでしょ?
>>887
初心者自体がセキュリティフォールです。はい。
0889nobodyさん
04/11/22 15:59:51ID:???0890nobodyさん
04/11/22 16:04:25ID:C0NQJmHQ>>888さん、ありがとうございます。
色々チェックしましたがイマイチ解りません。
ブラウザから実行した場合は正常なのですが
crontabで自動実行した場合のみ保存がなされません。
調べたところ、添付ファイルの取り込みも問題ないようで
問題なのはopenして書き込む部分が実行されていないと言うことです。
ファイルの所有者とグループが違うのかと思ったのですが
これらは変更したりできるのでしょうか?
0892nobodyさん
04/11/22 16:12:24ID:???「私は子供に生まれないで良かったと、胸をなでおろしています!」っての。
>>888は初心者に生まれないで良かった胸をなでおろしてるんだろうな。
0893nobodyさん
04/11/22 16:14:31ID:???【初心者は】Perlコーディング初心者質問スレ Part 39【セキュリティフォール】
0894nobodyさん
04/11/22 16:15:46ID:???print "Content-type: text/plain\n\n";
print "Hello Perl !";
今日からPerlをはじめまして、本どうりにこれを打ち込んで、表示さしてみると
ファイルを開く、保存のダイアログボックスが表示されます。開くを押すと
メモ張にHello Pealと表示されます、本ではブラウザ上に表示されると
なっているのですが、違うCGIをためしてみるとちゃんとブラウザに表示されます。
本の付属のサンプルでやってもこれだけは、安心できる発信もとからの・・・
ファイルを開く 保存・・がでてブラウザに表示されません。これだけ
なぜかこうなります。
無視して、これは飛ばして次のCGIからやったほうがいいのでしょうか?
原因がわかるかたぜひおしえてください。
0896nobodyさん
04/11/22 16:30:35ID:???$keywordが実行されないようにしないと。
バッククォートは確実に殺しとけ。
0897nobodyさん
04/11/22 16:36:59ID:???かわらないのでperlの中だけで完結した場合に比べて
劇的に処理が軽くなるとはとは思えないのだが。
0898888
04/11/22 16:58:04ID:???| | (っ))) ヒャッホー! オレ様がスレタイに!!
| | //
|∧_∧ // >>890
(´∀`*// cgiの実行ユーザ名でcrontab -eを実行してないのでは?
l / その場合ならパーミッション関係でエラーがでて
保存できないこともありうる。原因を探らないと。
0899nobodyさん
04/11/22 17:45:56ID:???0900nobodyさん
04/11/22 17:51:31ID:TZImgkmIsubjectはちゃんとmimeエンコードしてるのですがfromに日本語を埋め込む時にも
mimeエンコードする必要がありますか?
JISでそのまま書いても駄目ですよね?
from: "送り先の人間の名前" <hoge@test.com>
みたいになってますがどうすれば大方のメールソフトで問題なく動作するでしょうか?
0901nobodyさん
04/11/22 18:11:55ID:???クズのくせに威勢がいいな。
特別に教えてやろう安全なパイプの使い方だ。二度と初心者に穴コード教えるなよ。ヘッポコ。
$pid = open(IN, "-|");
if (!defined($pid)) {
die "cannot fork";
} elsif ($pid == 0) {
exec('grep', $keyword, 'file') || die 'grep';
}
>>900
MIMEエンコードすりゃいいだけだろ。何が聞きたいんだ?
0904nobodyさん
04/11/22 19:16:13ID:4/apYG7/そんなんで虚勢張られてもなぁ・・・
空しくならない?
0905nobodyさん
04/11/22 19:19:21ID:???0906nobodyさん
04/11/22 19:34:33ID:???0907nobodyさん
04/11/22 20:17:07ID:???0908nobodyさん
04/11/23 01:17:07ID:???()もマズイか?
いずれにせよ、パイプの使い方云々って話じゃなくて。
0909nobodyさん
04/11/23 01:23:12ID:nMfYIywnshが余計な解釈して、コマンド実行されると困るからでしょ。
>>901の方法でパイプ使えばshは経由しないから、安全なの。
0910nobodyさん
04/11/23 02:23:51ID:7PvclRNn0911nobodyさん
04/11/23 02:54:05ID:???マーライオン , ―‐ 、
/r‐' ,ェェr‐..、
| l | ____Y)........
| l ヽ ┴‐┬'''''''''' ::::.........
| l l `ー‐1 ::::::::.......
7レヘ! / ::::::::::::.....
l |. | / :.:.:.:::::...
/7ーー7777! :.:.:.:::::....
T--l⌒ヽ{ l :.:.:.:.::::::...
|vv'レ⌒!'ー! :.:.:.:.::::::...
|vv'ヽソー1 :.:.:.:.::::::.
_ヽVVVー7__ :.:.:.:.:::::..
,〜〜〜〜〜〜〜ヽ ヽ、 :.:.:.:.:.:..::..
∠二二二二⌒二二二二二二ユ :.:.:.:.:.::::::...
0912nobodyさん
04/11/23 07:24:42ID:???出力するデータのサイズを出力しないとだめだよー。
>>894
・IEを投げ捨てて他のブラウザを使う。
・おまじないとして最後に"/"を付ける。
・Windows XP SP2にして、IEをレスポンスヘッダに従うように設定する(できるらしい)。
・HTMLで出力する。
原因はIEの仕様。
0913nobodyさん
04/11/23 08:01:40ID:???0914nobodyさん
04/11/23 09:12:03ID:???> ファイルを開く、保存のダイアログボックスが表示されます。開くを押すと
> メモ張にHello Pealと表示されます、
これから察するに、CGIとして動作していると思うが。
0915nobodyさん
04/11/23 09:31:30ID:???CGIとして動作しているのはたしかだが
ダイアログを出したくないんだったらこうしなされ。
x print "Content-type: text/plain\n\n";
o print "Content-type: text/html\n\n";
0917nobodyさん
04/11/23 10:25:43ID:???print "Hello Perl !";
なのに「Hello Peal」って表示されるんだぞ。
Perl自体のバグでは?
0918nobodyさん
04/11/23 11:00:08ID:???>>909ではないですが、それが実行されるOSを教えてくれませんか。
FreeBSDで確認できなかったので。
それから、一応貼っておきますね。
CGIプログラミングとセキュリティ
http://www.ansi.co.jp/tech/cgi/security/programming.html
> また、以下のように引数が2個以上の exec と組み合わせるとメタキャラクタの解釈が行われない。
> open GREP, "-|" or exec "/usr/bin/grep", "-e", $CGI{str}, "/path/to/data/file" or die;
perlsec - Perl security
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsec.html
> open(FOO,"echo $arg|"); # Not OK, but...
> open(FOO,"-|")
> or exec 'echo', $arg; # OK
# 今のperlsecでは、この方法もAlso not OKにされています。
0919nobodyさん
04/11/23 11:08:09ID:nMfYIywn顔真っ赤にして、嘘付くなよ。ヘッポコ
実験すれば実行されないことは簡単にばれちゃうのに、事実を捻じ曲げてまで絡んでくるとは
そんなに馬鹿にされたのが悔しいのかな?
でも、実際馬鹿なんだからしょうがない。親を恨んであきらめることだ。
$keyword=';rm -f *';
$pid = open(IN, "-|");
if (!defined($pid)) {
die "cannot fork";
} elsif ($pid == 0) {
exec('/bin/echo', $keyword, 'file') || die 'grep';
}
while(<IN>) {
print $_;
}
0921nobodyさん
04/11/23 11:13:10ID:???だ。;が抜けてる。*fileだったらそんなファイルなけりゃ何も削除されん罠
0922nobodyさん
04/11/23 11:27:41ID:nMfYIywnやってから言えよ。ヘッポコ。行末の;を入れたって実行されねーよ。
破壊的な馬鹿だな。
0923nobodyさん
04/11/23 12:00:00ID:???"test.pl" [New File] 12 lines, 213 characters [E]
[***@***** test]$ chmod +x test.pl
[***@***** test]$ ls
aaaa ahie aisjrioe iruiet test.pl*
[***@***** test]$ ./test.pl
;rm -f *; file
[***@***** test]$ ls
aaaa ahie aisjrioe iruiet test.pl*
コードは>>919に;いれた奴
0924nobodyさん
04/11/23 12:24:02ID:???perlは奴のようなヘッポコでもそれなりのコードをでっち上げる事が出来てしまうので、
「俺ってできるじゃん」と勘違いしてしまったのだろう。
勘違いして玉砕してしまった>>916に「伝説のヘッポコ」のコテを贈ろう。次からはこのコテで出て来い。ゲラゲラ
0925伝説のヘッポコ
04/11/23 12:38:20ID:???ヾヽ!lV/ / ,/ / ,' ハ、: .
,ィニ≧ゝレ' / / ,./ / , ハ : : .
く<-‐7´ _」] l l/_,∠/ / / / い : : .
 ̄ノ/: :f r'l l /レ'/、_/‐ト'、/l| li l : : : : .
. : {ハ : :|{(l|y==ミ _ノ、/ソリ ll | : : : : :
: : : :ヽヽ: :|、lハl、゙ ⌒ヾlノリ ll l : : : : : :
: : : : : : : : V\ヽ、 `ー ゛ノルんイリノ : : : : : :
: : : : : : : : : ,.--、_ハ`−r=ニ--、′ノ. : : : : : : :
: : : : : : : : / /-ョロ'ヲ´ i l : : : : : : : : : :
: : : : : : : 〈 ,ハフ'兀「 ! } : : : : : : : : :
: : : : : : : : ヽ, ト{‐lハ. ヽ ' ノ : : : : : : : :
0926nobodyさん
04/11/23 13:14:57ID:7PvclRNn黙って頭下げて俺の靴でもなめてりゃいいんだよカスどもが(pgr
0927nobodyさん
04/11/23 14:23:34ID:???0928nobodyさん
04/11/23 14:24:02ID:nMfYIywn0929nobodyさん
04/11/23 15:22:41ID:???そろそろ次スレの頃合かの。
0930nobodyさん
04/11/23 16:09:24ID:???gzipの利点は「負荷を削減する」「転送量を減らす」というのは分かりましたが、早さの面ではどうなりますか?
私としては、転送量を減らすので早くなりそうな気もしますが、ブラウザに解凍する処理をさせるので遅くなりそうな気もします。
ご回答を宜しくお願いします。
0931nobodyさん
04/11/23 16:30:41ID:???返すことを一度にやりたいんですけどできません。
どうやればいいのでしょうか?
0932nobodyさん
04/11/23 16:40:17ID:???0933nobodyさん
04/11/23 16:48:03ID:???自分のサイトで他ページの情報を一部使いたいのです。
0934nobodyさん
04/11/23 16:48:35ID:???自鯖でやらせるんならええけど、レンタルでやったら怒られること間違い無しであろう。
2ch閉鎖みたいに転送量でゴルァされて初めて意味がある処理ではある。
0936nobodyさん
04/11/23 17:36:00ID:???無名ハッシュのリファレンスを得るなら、先に得ないと無理だと思う。
で、無名のハッシュのリファレンスを得て、ハッシュスライスに値を代入にしてみたけど。
use strict;
use Data::Dumper;
my @pos = qw(msn yahoo google);
my $value = 'search engine.';
my $hash_ref;
@{($hash_ref = {})}{@pos} = ($value) x @pos;
print Dumper($hash_ref);
0939nobodyさん
04/11/23 20:55:05ID:???http://tmp4.2ch.net/test/read.cgi/kitchen/1100420247/
0940nobodyさん
04/11/23 22:21:01ID:???ブラウザの負荷はあまり気にしなくても良いよ。
低スペックのPCでISDNでも体感速度は速くなった。
もし、テーブルを使ったレイアウトをしているなら、
gzipよりもHTMLを変更した方が体感速度は速くなることが多い。
サーバー負荷が心配なら予め圧縮しておくと良いよ。
0941nobodyさん
04/11/24 04:36:06ID:???でもこれじゃ>>854の言う「データディレクトリでgrepかけて、該当したファイルのみ読み込みたい」
ってのは無理だね。
0942nobodyさん
04/11/24 10:14:07ID:???スクリプト内で一つ一つ開いてやれ。たいして負荷かわらんってオチか。
0943nobodyさん
04/11/24 14:24:18ID:???0944nobodyさん
04/11/24 14:55:14ID:???LWPモジュールだと、テキストデータしか取得できないと思うのですが、
指定したURL自体のスクリーンショットみたいに画像データとして取得を行う様なPerlのモジュールとかってありませんか?
もし存在すればモジュールの名前を教えてください。
こんな感じで指定したURLの画面を表示したいのです。
ttp://sea.search.msn.co.jp/preview.aspx?&q=%e5%85%89%e3%83%95%e3%82%a1%e3%82%a4%e3%83%90%e3%83%bc%e3%80%80%e3%83%97%e3%83%ad%e3%83%90%e3%82%a4%e3%83%80%e3%83%bc
よろしくお願いします。
0945nobodyさん
04/11/24 15:56:51ID:???この['a','b','c']を@bbbに入れたいなんて場合はどうすればいいですか?
0947nobodyさん
04/11/24 16:26:31ID:???0949944
04/11/24 17:31:19ID:???画面のスクリーンショットを取得できるんですか?
もう少しマニュアル読んでみます。
0950nobodyさん
04/11/24 17:33:37ID:???HTMLレンダリングしたページイメージを取得したい、
という話らしい。
>>946 の言ってるとおり、それは LWP とか「取得」とかいう問題ではなく、
LWP で取ってきたデータをローカルでレンダリングするにはどうしたら、
という話になるわけだが。
必要なデータを渡すと gecko 使ってレンダリングして
Image::Magick オブジェクトを返してくれる、
とかいうモジュールがあるといろいろ便利そうではあるが、
かなり難しそうだわなあ。
0951nobodyさん
04/11/24 20:28:29ID:???http://www.babysimon.co.uk/khtml2png/
こういうのを利用するといいんでは。
モジュールではないし、XやQt、KDEに依存するけど…。
0952nobodyさん
04/11/24 22:05:26ID:???http://marginalhacks.com/Hacks/html2jpg/
こっちはPerlスクリプトだね。
X+Mozilla+ImageMagickかな。
0953nobodyさん
04/11/24 22:19:47ID:???大体がブラウザにレンダリングをさせて画面をキャプチャーするタイプ。
他にも、Windows限定だけど web制作板のCSSでイケてるかも知れないデザインサイトスレで
使っているwebnailとか。
0954nobodyさん
04/11/25 00:19:16ID:???サーバー側で使うとなると、ちょっと敷居高いんじゃないかな。
0955nobodyさん
04/11/25 00:33:25ID:???opendir,readdirかFile::Findかどちらを使うべきだろう。
1000ファイルほどあるんですが、パフォーマンス的には変わりませんかね?
(ファイルは階層的に掘り下げる必要は無いんですが)
0956nobodyさん
04/11/25 01:11:28ID:???$key = 'bbb';
このような変数があるとして、$keyが@arrayの要素に存在するかどうかを
一発で判定する書き方って無いでしょうか?
0957nobodyさん
04/11/25 01:12:46ID:???0959nobodyさん
04/11/25 01:24:36ID:???0960nobodyさん
04/11/25 01:27:59ID:???2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0961nobodyさん
04/11/25 01:46:49ID:???0962nobodyさん
04/11/25 01:50:38ID:???0963nobodyさん
04/11/25 01:56:17ID:???単一階層なら readdir 。
>>956
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_tell_whether_an_list_o
${{ map { $_, 1 } @array }}{$key} ? 'exists' : 'not found';
0966nobodyさん
04/11/25 08:26:21ID:???cgi-libでReadParseして%inを取り回してた方が負荷的にも鯖にやさしい?
0967nobodyさん
04/11/25 11:25:21ID:???0968nobodyさん
04/11/25 12:32:23ID:???import するかどうかはあんまり負荷に影響しない。
-compile :all とかするとさすがにアレだが。
俺も CGI.pm のコンパイルは若干重めだと思うが、
Template Kit や DBI の重さに比べれば誤差なので、
遠慮なく使っている。
それに mod_perl 環境下ではコンパイル負荷をほぼ無視できるしな。
0969nobodyさん
04/11/26 02:05:36ID:???ヒアドキュメントだらけでなんとかしたかったんだが、やめとくか。
0970nobodyさん
04/11/26 08:03:16ID:???my @data_list = qw/name date com/;
my %data = ();
〜〜
while (<FILE>) {
my @temp = split(/<>/);
$data{$data_list[$_]} = $temp[$_] for (0..$#data_list);
print '名前:', $data{'name'}, $data{'date'}, $data{'com'}, '<br />';
}
現在はこのように一旦別の配列に格納してからループしてます。
split(/<>/) からストレートにハッシュに格納することは難しいでしょうか。
0971nobodyさん
04/11/26 08:28:36ID:hJWQX2yrActivePerl-5.8.4.810-MSWin32-x86.msi とwin2000を使っています。
my $Name_T = '';
$Name_T =~ s/([\x20(){},+^~%`])/{$1}/g;
いろいろ試してこのような正規表現で以下の文字が$Nameに含まれている場合{}をつけて置換しようとしました。
(){},+^~%` とスペース
+なまえ+ → {+}なまえ{+}
%^なまえ^% → {%}{^}なまえ{^}{%}
こんな感じです。始めは上手くいっていたのですが不具合をみつけました。
"タ"や"ミ"、全角の"+"などです。
"タ"や"ミ"は"ボ^}"と置換されていまい、全角の"+"は"+{}"と置換されてしまいます。
ご指摘、アドバイス等いただければ幸いです。
0976972
04/11/26 13:09:04ID:???そういえばSJISでも、
s/\Q([\x20(){},+^~%`])\E/{$1}/g;
だったら大丈夫かも…。
まぁ、EUCにもしておいた方が無難。
0977nobodyさん
04/11/26 14:49:02ID:eKQW3m7fと言う事がしたくて教本を見ながらやっていたのですが
#!/usr2/bin/perl
BEGIN{ $| = 1; print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT"); }
#ライブラリ
require 'cgi-lib.pl';
#デコードするサブルーチン
&ReadParse(*form);
#ライブラリ
require 'jcode.pl';
#文字コード変換のサブルーチン
&jcode'convert(*form, 'sjis');
#連想配列から値だけを取り出し、区切りのハイフンを追加
$data="$form{'kansou'}\n\n-------\n\n";
#追加書き込みモード
open(ENQ, ">>enquete.dat") || die "File 'enquete.dat' Open Error."
flock(ENQ, 2);
print ENQ $data;
flock(ENQ, 8);
close(ENQ);
--以下HTML文--
これをサーバー上で実行すると
「syntax error at enquete.cgi line 21, near "flock" Execution of enquete.cgi aborted due to compilation errors.」
と言ったエラーが出ました。
教本についてたサンプルを使ってやっても同じエラーが出てしまうのですが…どこか間違っている部分がありますでしょうか?
ググってもどれが参考になってるのかもよく分からず…お手数ですがご教授お願いいたしますm(_ _)m
0978nobodyさん
04/11/26 14:49:58ID:???0979nobodyさん
04/11/26 14:56:31ID:???と出たときの8割は
20行目の行末のセミコロンを付け忘れている
0980nobodyさん
04/11/26 15:01:55ID:???21行目で構文エラーだって書いてあるんだから、どこがその
行か示せよ。そのコピペは20行ないからソースそのままじゃ
ないので意味ナシ。
おおかたopen 〜 || die 〜の行の最後にセミコロンがない
せいだとは思うがナ。
0981nobodyさん
04/11/26 15:04:08ID:???解決しました、ありがとうございましたorz
0983nobodyさん
04/11/26 18:13:14ID:???requireしていく方が速いでしょうか?
0984nobodyさん
04/11/26 18:17:30ID:???0985nobodyさん
04/11/26 18:46:45ID:???昔は、BBSのスクリプトとかで、表示、書き込み、検索でcgi自体を分けたりしてた頃もあったなぁ。
でも最近はベタ書きばかりだけど。
javaではしっかりモデリングするんだけど、言語によって人格変わる。
0986nobodyさん
04/11/26 19:09:23ID:???文字 x があり、x が'\x20(){},+^~%`'のいずれかであった場合、
xを'{}'で囲むということは、言い換えれば(\x7b x \x7d)という文字列を作るということです。
'+'は (\x81\x7b)で、\x7bは'{'なのでマッチし、
'{}'で囲って(\x81\x7b\x7b\x7d)になります。
(\x81\x7b)は'+'で、\x7bは'}'なので、'+{}'になります。
'タ'は(\x83\x5e)で\x5eは'^'なのでマッチし、
'{}'で囲って(\x83\x7b\x5e\x7d)になります。
'ミ'は(\x83\x7e)で\x7eは'~'なのでマッチし、
'{}'で囲って(\x83\x7b\x7e\x7d)になります。
(\x83\x7b)は'ボ'、\x5eは'^'、\x7eは'~'なので、
それぞれ'ボ^}'と'ボ~}'になります。
解決策は
use encoding "shiftjis";
です。
>>976
大丈夫ではありません。
0987nobodyさん
04/11/27 08:15:26ID:???0988nobodyさん
04/11/27 10:19:32ID:???タグを無効にしたり文字コード変換したりしますよね?
この場合、新たなハッシュテーブルなりに入れるか、$queryを直接書き換えるか、
どんな風にデータを取り回してますか?
私は色々変換した後に新たなハッシュテーブルに入れて、それを以降の処理で使うようにしてますが、
何だか領域が勿体無い気もします。
0989nobodyさん
04/11/27 11:30:32ID:???Perlスクリプトである以上、メモリを使うのはしょうがないよ。
掲示板のログをまるごと配列に入れるのは論外だけど、
通常の操作なら(・ε・)キニシナイ
0990nobodyさん
04/11/27 11:38:48ID:???Perlコーディング初心者質問スレ Part 39
http://pc5.2ch.net/test/read.cgi/php/1101522903/
0991nobodyさん
04/11/27 12:39:47ID:???$queryから更に別領域にデータ確保するのは何となく抵抗あったな。
でもやっぱりデコードやらコード変換した後に別領域に入れてるよ。
気にスンナ。
0992nobodyさん
04/11/27 18:06:58ID:???と
$hoge = substr($_, 0, index($_, '<>')
はどちらが効率が良いでしょうか。100回ぐらい繰り返します。
0994nobodyさん
04/11/27 18:21:26ID:???0995nobodyさん
04/11/27 18:30:26ID:???終わるから速そう。てことでベンチ。
use Benchmark;
$s = 'foo<>baa';
timethese(undef, {
split => sub {
($hoge) = split(/<>/, $s);
},
substr => sub {
$hoge = substr($s, 0, index($s, '<>'));
},
});
てな感じで結果は
Benchmark: running split, substr for at least 3 CPU seconds...
split: 4 wallclock secs ( 3.21 usr + -0.01 sys = 3.20 CPU) @ 396900.00/s (n=1270080)
substr: 2 wallclock secs ( 3.11 usr + -0.00 sys = 3.11 CPU) @ 1306832.15/s (n=4064248)
予想通りsubstr圧勝。
0997nobodyさん
04/11/27 18:35:15ID:???やるとでも思ったか。
0998nobodyさん
04/11/27 18:42:11ID:???0999nobodyさん
04/11/28 06:23:22ID:???1000nobodyさん
04/11/28 06:24:21ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。