【Perl】初心者コーナー Part13
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/05/30 13:06ID:R2kt1mTx1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIの質問は【CGIだけど、なんか質問ある? part 6】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0409nobodyさん
02/06/26 09:25ID:???use IO::File;
my $fh = IO::File->new( $filename ); ## open()と基本的に同じ
print $fh "foobar\n";
のどこが面倒くさいのだろうか。少なくともグロブがなんちゃらとか
考えるよりかはるかにシンプルだと思うんだけどな。大体perldoc perlref
を読んでる暇があるのにperldoc IO::Fileが面倒くさいのもわからんし。
まぁ使いたくなかったらそれはそれでいいんだけど。素直に使ったほうが
楽だし、そのほうがPerl コミュニティのカルチャーにそってると思う。
0410404
02/06/26 09:37ID:???print関数の第1引数は、シンボルでもスカラ変数でもない場合は
ブロックに入れないと構文エラーになるよ。(昨日覚えた)
print {*$stdout} "test\n";
>>409
ほっといてくれー。こういう瑣末なことを調べるのが趣味なんだよー。
たぶん408の人も、おれと同じタイプ。
あ、もちろん実際にスクリプト書くときは素直にIO::File使います。
0411nobodyさん
02/06/26 12:14ID:???ああまぁ趣味のスクリプトとかならいいんですけどね。
プロダクションコードでそういうのを見たくないのでとりあえず
牽制した、ということで。
0412nobodyさん
02/06/26 15:38ID:1ADBKX33(公開といっても使うのはネットの仲間だけ)これだけはしちゃイカン!って
処理とかあるんでしょうか?cgiのバグでunixコマンドを打てるとかっていうのが
気になるんですけど。
>cgiのバグでunixコマンドを打てる
とんでもないのがあるじゃねーか!
0415nobodyさん
02/06/26 16:55ID:???0416nobodyさん
02/06/26 17:29ID:ZfGn23SZ>>412じゃないんですが -T スイッチってどんなものなんでしょう?
-wスイッチはつけるようにしてるんですけど -T スイッチは見たことがありませんでした・・。
0417416
02/06/26 17:36ID:ZfGn23SZhttp://tech-web.net/perlmania/perlrun2.html
汚染チェックをオンにするとか書いてますけど、なんだろう・・?
つけておいたほうがいいのかな。
0418nobodyさん
02/06/26 17:39ID:???Perlで2chのDAT直読みは無理なんでしょうか?
User-Agent: Monazilla/1.00 (toolname/ver) ←こうゆう風にしても
無理なんですけど、、。
0419nobodyさん
02/06/26 18:17ID:???は?
0420nobodyさん
02/06/26 18:26ID:???URLが間違ってるとかそこら変チェックした方がいいかと思います。
#!/usr/bin/perl
use LWP::UserAgent;
my $ua = new LWP::UserAgent;
my $request = new HTTP::Request('GET', 'http://pc.2ch.net/php/dat/1022731565.dat');
$ua->agent('Monazilla/1.00 (libwww-perl/5.65)');
$response = $ua->request($request);
print $response->as_string;
0422412
02/06/26 18:50ID:1ADBKX331行目を#!/usr/bin/perl -T にするって事でしょうか?
unixコマンドを打てる、というバグを発生させないためにはどうすれば
どんな点に注意すればいいんでしょう?
バグというか、何も対策してないcgiだとアドレスのcgi-bin/xx.cgi?の後ろに
いろいろへんなのを入力するとunixコマンドを打てるとかいうバグがある話を
聞いたんですが。
0425fusianasan
02/06/26 19:28ID:???要は、ブラウザ側で入力された値をチェックしないでそのまま以下のような
関数に渡さなければいいだけ。
open
exec
system
qx//
eval
``
0426nobodyさん
02/06/26 19:47ID:CyvQGqzW0427nobodyさん
02/06/26 20:55ID:???そのほか、クロスサイトスクリプティングにも注意。
たとえば、User-agentを内容をチェックせずにそのまま出力しちゃだめ。
ttp://www.ipa.go.jp/security/awareness/vendor/programming/a01_02.html
0428nobodyさん
02/06/26 23:02ID:???0429nobodyさん
02/06/26 23:13ID:???それがバグだったら世界中のPerlUserが嘆くことになるな。
0430nobodyさん
02/06/27 01:16ID:riwIozkn$a = '&xyzあいうえお<A href="http://www.xxx.com">リンク</A>';
$a =~ s/&[^lt;|^gt;]/&/g;
こんな感じで文字列の < と > 以外の & を & に置換したいのですが、
上のようにすると & の次の文字(ここでは x)が消えてしまいます。
どうすれば &xyz とすることができるでしょうか?
0431429
02/06/27 01:19ID:riwIozkn$a = '&xyzあいうえお&<A href="http://www.xxx.com"&>リンク&</A&>';
こんな感じで文字列の &< と &> 以外の & を & に置換したいのですが、
上のようにすると & の次の文字(ここでは x)が消えてしまいます。
どうすれば &xyz とすることができるでしょうか?
0432nobodyさん
02/06/27 01:19ID:???0433nobodyさん
02/06/27 01:21ID:???0435nobodyさん
02/06/27 10:09ID:???それって違うと思うけど・・・
$a =~ s/&(?!=lt;|gt;)/&/g;
じゃないの?[]で囲んだらcharacter classになっちゃうじゃん。
432の正規表現では&のあとの文字がg,l,t,;,|,^だったら&
に変換されないぞ(例:&lz; &gxcv; &;;; )
0436nobodyさん
02/06/27 10:15ID:???s/&(?!lt;|gt;)/&/g;
0437nobodyさん
02/06/27 10:16ID:???0439nobodyさん
02/06/27 17:36ID:???ひどいサイトがあります。思いきってサイト(HDD)をクラッシュさせたいのですが、
何かいい方法はあるのでしょうか?
こちらのIPとか所在がわからないようにしたいのです。
こう言う質問にお答えとなると問題がある場合、こういった専門サイトとかがあれば
お教え頂けないでしょうか。
0440nobodyさん
02/06/27 17:43ID:???ひ
何
こ
こ
お
???
縦読みじゃないのか
0441nobodyさん
02/06/27 17:58ID:???俺はここの一流ハッカーに頼んでHDDを爆発させてもらったよ
http://www.qudsway.com/Links/Doctor/4/Html_Doctor4/4hdo9.htm
0442nobodyさん
02/06/27 19:54ID:???「出力時の数値形式」ということまでは分かったのですが...。
0443nobodyさん
02/06/27 20:11ID:???-wスイッチの元で警告されるように、$#の使用はお勧めできない。
Cレベルでの内部操作だから簡単にDLLエラー(Unixだとコア吐くのかな?)を出せるしな。
それでも使いたければ:
$# = '%.3g';
print 8/9;
0444trrh
02/06/27 23:55ID:mvLF/G5v$file1++;
}
close(file1);
while (<file2>){
$file2++;
}
close(file2);
while (<file3>){
$file3++;
}
close(file3);
while (<file4>){
$file4++;
}
close(file4);
上記のソースを短く出来ませんか?
0445nobodyさん
02/06/28 00:03ID:???ネタはこちらへ。
http://pc.2ch.net/test/read.cgi/php/1024741312/
0446nobodyさん
02/06/28 00:26ID:???マルチ
http://pc.2ch.net/test/read.cgi/tech/1017736187/n186-
0447nobodyさん
02/06/28 17:06ID:???$paturn = '787+8787';
quotemeta $paturn;
if ($mes =~ /$paturn/){
print "Match!\n";
} else {
print "Oops!\n";
}
これだとマッチしないのですが、どうすればエスケープ出来るでしょうか
quotemetaの使い方を間違えてんのかなあ・・
0448nobodyさん
02/06/28 17:09ID:???\Q\E だた・・
perlは忘れ易いよ
0449japh ◆J.5V8ta6
02/06/28 20:48ID:???quotemeta()の使い方間違えてるよ。
$quoted = quotemeta $string;
chop(), chomp()等と違って元の文字列は置き換えないからね。
0451nobodyさん
02/06/28 22:43ID:ZifxuKsx@mon = split(/,/,$mon);
$mon{$mon[1]}++;
}
3行目では何が起こっているのでしょうか?
0452&r
02/06/28 22:51ID:???取得しているといったところでしょうか。
0454nobodyさん
02/06/29 00:03ID:kfva2Nvgppmでsearchを実行しても全く反応がないのです・・・
PPM> search
PPM>
のように、なってしまうのです・・・DBIをインストールしたいがために四苦八苦しているのですが、
どうしても上手いこと行きません・・・もちろんdbi.zipを直接DLして
ppm install dbi.ppd
等も試してみましたが
Could not locate a PPM binary of 'dbi.ppd' for this platform
とエラーが出てしまいます(涙
どうにか対処法を教えて貰えないでしょうか・・?
環境はwin2k perl-v5.6.0 for MSWin32-x86-multi-thred ppm(2.1.2)です
0456こここ
02/06/29 02:20ID:8vz7q6tH説明の通りに設置して、チェックモードでもOKとでたんだけど
Authorization Required
This server could not verify that you are authorized to access
the document you requested. Either you supplied the wrong creden
tials (e.g., bad password), or your browser doesn't understand
how to supply the credentials required.
ってでる。
何が悪いのかわかります?
0457nobodyさん
02/06/29 02:24ID:kfva2Nvgダメです・・・
Installing package 'DBI'...
Error installing package 'DBI':Could not locate a PPD file for package DBI
となります・・・
ネットは常時接続なので、当然繋がったまま実行しているのですが・・・
(。´Д⊂)゜。・ こまった
0459こここ
02/06/29 02:28ID:8vz7q6tHそうです
0463補足
02/06/29 02:52ID:???> PPM doesn't work through a proxy/firewall.
> This can be remedied by setting the environment variable 'HTTP_proxy' to the name and port of your Internet proxy, e.g.:
> C:\> set HTTP_proxy=http://proxy:8080
> If your proxy or firewall requires a username and password, you will also need to set the environment variables 'HTTP_proxy_user' and 'HTTP_proxy_pass'.
多分これね
0464こここ
02/06/29 02:52ID:8vz7q6tH本当だ。
今まであると思ってたIDとパスがなかった・・・
とにかく今やったら出来た。
nobodyさんありがとう!!!
0465nobodyさん
02/06/29 03:21ID:???0466nobodyさん
02/06/29 07:00ID:???∧∧
|\ <ヽ`∀´> /|
ヾ  ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
 ̄ ̄ ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄ ̄ ̄ ̄
| |
/ ̄ ̄ ̄ ̄\/ ̄ ̄ ̄ ̄ ̄\
__/ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ .\__ ドドン!!
___<__)__________ (__>___
0467nobodyさん
02/06/29 12:54ID:xVhrnBTOこいつらの属性を変えてやれば処理を軽くすることはできますか?
初心者なもんで質問が意味不明かもしれません…(汗)
0468&r
02/06/29 12:57ID:???ほんとに意味不明だからびっくりしたYO!
0469あSD
02/06/29 13:16ID:IbvPgwu50471nobodyさん
02/06/29 16:51ID:???初歩的な事で申し訳ございません。
name1<>host1<>ip1<>111<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
name2<>host2<>ip2<>200<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
とログファイルに保存をしてありまして、
それぞれの一番右の数の合計を出すにはどうすれば宜しいのでしょうか?
0472nobodyさん
02/06/29 17:01ID:???0474nobodyさん
02/06/29 17:05ID:???>451が参考になるよ。
あれをちょっといじればいい。
0475&r
02/06/29 17:07ID:???こんな感じでしょうか?
$sum+= (split(/<>/))[$[+3] for <DATA>;
__DATA__
name1<>host1<>ip1<>111<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
name2<>host2<>ip2<>200<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
0476471
02/06/29 17:25ID:???それは、その感じでまる2日ぐらい悩んだんですが出来ませんでした。
>>475
今、試してみましたが一番右の数の全部の合計した数が出てきました。
0477nobodyさん
02/06/29 17:36ID:???> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
>
> 1と3が無いと誰も答えられないよ。
> 良い回答は良い質問から。一緒に勉強しましょう。
1はあるけど2と3がないな。
0478nobodyさん
02/06/29 17:39ID:???while(<IN>) {
@host = split(/<>/,$_);
$host{$host[0]} += $host[3];
}
かな?
0480&r
02/06/29 17:52ID:???そうだね。うっかりホスト毎ってのを見逃してた。修行してくる。
0481471
02/06/29 17:55ID:???んーと別に大丈夫ですよ。質問の仕方が悪いのは僕の方です。
>>477
今まで答えて頂けたことは全て一通りやってます。
エラーは出ませんでした。出たとしても;を:と間違えた等その位です。
0484&r
02/06/29 18:04ID:???ハッシュの参照のしかたわかる?
ファイルハンドルが478ではINになっているから統一しているか確認して、
とりあえず以下のようにして出力して確認されない?
for ( keys %host ){
print $_,': ',$host{$_},"\n";
}
0485471
02/06/29 18:04ID:???Thanks!!!!!!!!!!!!!!!!!!!!!!!!
黄金帽と呼んでくれ!!!
0486nobodyさん
02/06/29 18:06ID:???@host2 = grep { /^name1<>.*<>.*<>.*<>/ } @_;
@host3 = grep { /^name1<>.*<>.*<>.*<>/ } @_;
foreach(@host1){
m/^name1<>.*<>.*<>(.*)<>/;
$count1 += $1;
}
これじゃ非現実的だな。スマソ
0488nobodyさん
02/06/29 20:03ID:A6ruKh9Phttp://tmp.2ch.net/test/read.cgi/mog2/1022943102/l50
0489nobodyさん
02/06/29 20:32ID:YfnrInm/0491nobodyさん
02/06/29 20:47ID:???>46 :デフォルトの名無しさん :02/06/29 19:00
>>>1よ
>だいたいPerl関連はWebProg板でやるきまりなんだよ
>そっちへ逝け
0492nobodyさん
02/06/29 21:30ID:???じゃ490はマルチした罰として↓の48に答えること。命令。
http://pc.2ch.net/test/read.cgi/php/997829243/n48-
0493490
02/06/29 21:37ID:???0495nobodyさん
02/06/30 06:36ID:???・ファイルが存在しない
・パーミッションがおかしい
以外にありえるのでしょうか、おねがいします
0496495
02/06/30 06:36ID:wtzA9nm50500nobodyさん
02/06/30 12:37ID:???今だ!200番ゲットォォォッ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´
∧∧ ) (´⌒(´
⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
 ̄ ̄ (´⌒(´⌒;;
ズザーーーーーッ
0502nobodyたん
02/06/30 14:21ID:???排他モードでロックしているというのはあるが。(その場合でも open は可能)
0503nobodyさん
02/06/30 14:41ID:???【Perl】ファイルロック(排他処理)について語ろう
http://pc.2ch.net/test/read.cgi/php/1024795138/
も参照してみては?
0504nobodyさん
02/06/30 15:34ID:???ファイルロックなんてどうせ巷の解説サイトみればすむことなのに、、。
0505nobodyさん
02/06/30 15:58ID:???492は質問ではなく誘導ですが…。
巷の解説サイトにあるファイルロックできみは納得して満足してるんだろうね。
そのサイト教えて。
0507nobodyさん
02/06/30 16:59ID:???だから、きみが納得して満足してるであろう巷の解説サイトを教えて。
どこ?
0508505 ◆EPPSxEpw
02/06/30 17:18ID:???↑適当にグーぐるしてください
ファイルロックは専用のスレもあります
>>504の解説してください。
■ このスレッドは過去ログ倉庫に格納されています