【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あたりを見よう。
0369nobodyさん
02/06/22 14:04ID:fNvTUaUi..⌒ヽ ' ⌒ヽ /.|:::::::::::|
乂乂|| |乂乂|| | |:::::::::::|
乂乂|| |乂乂|| | |:::::::::::|
乂乂|| |乂乂|| ___|_|:::::::::::|____
乂乂|| |乂乂|| /|::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
 ̄ ̄  ̄ ̄ i |::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
_____ .|/ ̄ ̄ ̄../|:::::::::::| ̄ ̄ ̄/
||L L | L L ||  ̄ ̄ ̄ ̄| |:::::::::::| ̄ ̄ ̄
||L L | L L || | |:::::::::::|
||L L | L L ||_________ .| |:::::::::::|
===========l| L L l================= i |:::::::::::|
二二二二二二ヽ iヽ二二二二二二二二i |:::::::::::|
:::::::::::::::::::::::::::::::::::i ヽ| _____.i |:::::::::::|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄\ ((( )))_______| |:::::::::::|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|......( ´Д`)._____| |:::::::::::|__
::::::::::::::::::::::::::::::::::::::::: | / (S)::::::i\ ....| |:::::::::::| \
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| .\ ....\|:::::::::::| \
____/|____ .| .\  ̄ ̄
/
| Perlスクリプトから、2ちゃんに書き込める方法を教えてください。
\_______________
0370永久会員パスが書き込みするだけで当たる
02/06/22 14:12ID:E0ppwG7Lhttp://s1p.net/tyyopp
わりきり出会い
UG-S的出会い
PCのみ受付中
男性、女性書き込み
キャンペ-ン中
おかげさまで5000HT
ラッキナンバー
(111,333,555,777,999)
男性、女性書き込み するだけ
当選者には永久会員パスワード
と1万円プレゼント!!
0371nobodyさん
02/06/22 14:57ID:???別に変えなければ動かないということはないけど違う用途の
(ハンドル|オブジェクト|数|文字列|・・・)を同じ変数に代入して
変数を使いまわすのは間違いをおかしやすかったりとあまり良い
スタイルとは言えないかも。
(同様に$sth1、$sth2という名前もお勧めできない)
0372nobodyさん
02/06/22 19:01ID:PwKD5Bpr$dir = ディレクトリ 、 $file = 数字
open(DATAOUT, "+< $dir . $file . '.dat'") || die &Error;
えっとこういう処理があるんですが、読み書きモードでファイルを開けないんです。
というかファイル名を認識してくれないみたいです。
open(DATAOUT, $dir . $thismonth . '.data') || die &Error;
↑このように読み込みモードだとちゃんと認識してくれるんですが、読み書きモードでちゃんと
認識するようにするにはどうすればよいでしょうか?
いろいろ "" を '' にしたり、. を \. にしてみたりしたんですがうまくいきません・・。
お願いします。
0373nobodyさん
02/06/22 19:36ID:???もうちょっとダブルクォーテーションについて考えてみた方がいいぞ。
open(DATAOUT, "+<$dir$file\.dat") || die &Error;
0374372
02/06/22 19:42ID:???おぉ〜〜〜できましたっ!! ありがとうございます!
>もうちょっとダブルクォーテーションについて考えてみた方がいいぞ。
はい考えてみます (´Д`;;)
ありがとう。
0375アルバムモナ
02/06/22 19:57ID:sE7wyej0Exif形式に対応してなくて困っています。
下記のものを改造してExif形式にも対応させたいのですがどのようにしたらいいでしょうか
教えてください。
http://www.aleph.co.jp/~fujiwara/perl/get_imgsize.pl
0376べっくあむ
02/06/22 21:20ID:9y/Dp6Qoありがとうございます。
動作上は問題ないと言うことですね。
>変数を使いまわすのは間違いをおかしやすかったりとあまり良い
>スタイルとは言えないかも。
確かにこんな変数名では、ちょっとしたタイプミスで、
見つけ難いバグを自らの手で作ってしまいますよね。
気をつけてみます。
0377nobodyさん
02/06/22 21:20ID:???そんな3年も前の化石なんか使うなよ。
これじゃだめなのか。
http://search.cpan.org/search?dist=Image-Size
0378nobodyさん
02/06/22 22:37ID:???半角カナを全角に変換とかはしたくないんですけど。。
0379xx
02/06/22 23:26ID:???サーバの環境および現在のフォーム出力文字コードぐらいは書いてもらわないと、、、、
0380nobodyさん
02/06/23 18:26ID:izD8oNpGDドライブにある下記のようなCGIスクリプトをapache経由で実行したら、
. のみでした。
そこで、コマンドプロント上で「perl inc.cgi」と実行したら、
ちゃっんと
C:/usr/local/lib
C:/usr/local/site/lib
.
とでます。
apache経由でも
C:/usr/local/lib
C:/usr/local/site/lib
.
になるようにできますか?
-----
#!/usr/bin/perl
print "Content-type:text/html\n\n<xmp>";
for(@INC){
print $_,"\n";
}
exit;
------
0381nobodyさん
02/06/23 18:30ID:jOy7H3G4原因はよくしらないがperl -Iでどうかね。
それか@INCに対しpushするか。
0383380
02/06/23 19:00ID:???perlをc:/usr/local にインストールしたのですが、
/usr/bin/perl のスクリプトでも使えるように、
C:/usr/local/binをc:/usr にコピーしてたのが原因だったようです。
#前まではできてたのになぁ。。。
0384nobodyさん
02/06/24 01:51ID:???$n=pack "h*", "$_";
print $n;
}
で読み込んだテキストを元にもどす方法ってどうやるんですか?
while(<>){
$n=unpack "h*", "$_";
print $n;
}
じゃだめなんですけど
0385nobodyさん
02/06/24 03:26ID:???それpackとunpackの使い方が逆でない?
while (<>) { print unpack("h*", $_); } # テキスト→16進
while (<>) { print pack("h*", $_); } # 16進→テキスト
0386nobodyさん
02/06/24 18:03ID:pso5a6KFopen(DATA, ">$cdata")|| &write_error;
flock(DATA, 2);
print DATA @newdata;
flock(DATA, 8);
close(KDATA);
などとしています。
このflockは排他処理には役に立たないような事がよく
書かれていますが全く役立たないのでしょうか?
なにも処理しないよりはマシという程度ですか?
0387nobodyさん
02/06/24 18:21ID:???>って宣言するだけです。礼儀正しい人は「もう触ってもいいよ」って言われるまでは触りません。礼儀正しくない人は構わず触っちゃいます。ただそれだけです。つまり、単なる紳士協定。OK?
># これ以上簡単な説明は出来ないよ。
過去スレのJAPUさんのセリフより。
0388nobodyさん
02/06/24 18:41ID:kznFdEhQflock(DATA,8);は別にいらん
0389nobodyさん
02/06/24 19:35ID:???全体を見ないと確かなことは言えないけど、
書き込みのときだけロックしてもだめ。
データの読み出しから書き込みまで、
ずっとロックし続けないと排他処理にならない。
0390nobodyさん
02/06/24 21:50ID:???【Perl】ファイルロック(排他処理)について語ろう
http://pc.2ch.net/test/read.cgi/php/1024795138/
0391386
02/06/24 21:52ID:pso5a6KFありがとうございます。
>>388さん そうなんですか、知りませんでした。
>>389さん これも驚きました。読み込みの時はflock使ってませんでした。
本に書いてあるものをそのまま参考にしていました。
わたしの使い方は問題あるんですね。もう少し調べてみようと思います。
0392nobodyさん
02/06/24 22:32ID:???>>386のロックが役に立たないってのは
open HANDLE, ">file"; # まずfileの中身を空にして開く、と…
flock HANDLE, 2; # ロックするかな
このopen & truncateが問題だろ。
正しくは
open HANDLE "+<file"; # 読み書きモードで開く、と…
>>386の方法でも何もしないよりはマシかもしれんが、
確実に効果がある、とは程遠かろう。
0393nobodyさん
02/06/24 22:49ID:???それをopen(&flock)してる間に処理、っていうのがいいんじゃないかな。
0394nobodyさん
02/06/25 13:52ID:???そういう場合は、やはりgrepでしょう。
@URI = grep { s/^Location_URL=(.*)/$1/ } @list;
0396nobodyさん
02/06/25 15:48ID:???grepで元の配列を壊すのはいかがなものかと。
@URI = grep { /^Location_URL=(.*)/ } @list;
0397396
02/06/25 16:00ID:???ところで元の配列を壊さずに一部を取り出す一番効率の良い方法ってどんなんだっけ…。
@URI = map { substr $_, 13 } grep { /^Location_URL=(.*)/ } @list; # じゃないよな…
0398394
02/06/25 16:24ID:PBYsCZmL元を壊さずにそれ(>>397)より効率のいい方法ってあるんかいな。
0399fusianasan
02/06/25 16:51ID:???59点ってとこだな。
0400nobodyさん
02/06/25 17:02ID:???@URI = map{ /^Location_URL=(.*)/ ? $1 : () } @list;
0402perl5.6.1
02/06/25 21:24ID:???失敗しなくするにはどうすればいいですか?
#!/usr/bin/perl -w
use strict;
sub t($);
open(F, "+<in.txt"); # aが30個くらい並んだだけのファイル
t(*F{IO});
close(F);
sub t($)
{
my $f = shift;
truncate($f, 10) || warn("error");
}
0404nobodyさん
02/06/25 23:21ID:???402じゃないけど質問させてください。
open F, ">file.txt" or die;
my $fh = *F{IO};
print {$fh} "test\n" or die;
truncate *$fh, 10 or die;
close $fh or die;
このコードで、printやcloseは$fhでも*$fhでもオーケーなのに
truncateだけは*$fhしか指定できないんですが、どういうこと?
0406404
02/06/25 23:35ID:???実は402を見てからperlrefとか読んでいろいろ実験してたので、
まだIOオブジェクトがよくわかってないのですが、
これがバグとわかれば安心して眠れます。
0407nobodyさん
02/06/26 03:05ID:???なんでそんなわかりにくいもん使うの?オブジェクト使いたかったら
素直にIO::Fileとか使えばいいのに・・・
0408perl5.6.1
02/06/26 07:02ID:???printに*$fhって渡せました?
おれの環境では下のコードはsyntax errorになるんです。
#!/usr/bin/perl -w
use strict;
my $stdout = *STDOUT{IO};
print *$stdout "test\n"; # print $stdout "test\n";なら大丈夫
>>407
モジュールの使い方を調べたり覚えたりするのが面倒だっただけです。
*FOO{THING}自体はそんなに分かりにくいものでもないし。
関係ないけど、sort { $a <=> $b } @f;の方が分かりにくいです。
use strict;なのに$aと$bは宣言しなくていいのは何、みたいな。
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!
■ このスレッドは過去ログ倉庫に格納されています