【Perl】初心者コーナーPart10
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
02/02/24 22:18ID:zOj6Yq/31:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけど、なんか質問ある?part5】
http://pc.2ch.net/test/read.cgi/php/1009331505/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0556nobodyさん
02/03/14 14:07ID:???HTTPサーバ機能 HTTPバージョン1.1 ポート80
ちなみに$paddrを↓こうしてもconnect失敗しますか?
$paddr = pack_sockaddr_in(80, inet_aton('127.0.0.1'));
0557555
02/03/14 15:15ID:Ibnv+vbsおおー!できましたー!ありがとうございます!
>>$paddr = pack_sockaddr_in($port, $iaddr);
↓
>>$paddr = pack_sockaddr_in(80, inet_aton('127.0.0.1'));
すなおにgetservbynameを使わずに’80’を指定すればいいのですね?
興味本位ですが、みなさんはSOKETを使ってどのよな処理をされるのですか?
0559nobodyさん
02/03/14 20:30ID:???死んじまえ
きいろいぶためを やっつけろ
金で心を 汚してしまえ
死ね死ね死ね死ね
日本人は じゃまっけだ
きいろい日本 ぶっつぶせ
死ね死ね死ね 死ね死ね死ね
世界の地図から 消しちまえ 死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね 死ね死ね死ね死ね
死んじまえ
きいろいさるめを やっつけろ
夢も希望も うばってしまえ
死ね死ね死ね死ね
地球の外へ 放りだせ
きいろい日本 ぶっつぶせ
死ね死ね死ね 死ね死ね死ね
世界の地図から 消しちまえ 死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね……
この歌を歌っている人を教えて下さい。
気になってPerlのスクリプトが書けません。
0560nobodyさん
02/03/14 20:35ID:???0561nobodyさん
02/03/14 20:36ID:83vwJ138キャッツアイズとヤングフレッシュだよ。
しっかりコーディングしてね。
0562nobodyさん
02/03/14 20:38ID:???どっかにフラッシュムービーあったね。
0564nobodyさん
02/03/14 20:43ID:???ttp://music.2ch.net/test/read.cgi/asong/1011726043/
とりあえずこっち行け。
0565nobodyさん
02/03/14 21:39ID:???死んじまえ
きいろいぶためを やっつけろ
金で心を 汚してしまえ
死ね死ね死ね死ね
日本人は じゃまっけだ
きいろい日本 ぶっつぶせ
死ね死ね死ね 死ね死ね死ね
世界の地図から 消しちまえ 死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね 死ね死ね死ね死ね
死んじまえ
きいろいさるめを やっつけろ
夢も希望も うばってしまえ
死ね死ね死ね死ね
地球の外へ 放りだせ
きいろい日本 ぶっつぶせ
死ね死ね死ね 死ね死ね死ね
世界の地図から 消しちまえ 死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね……
おれも歌って見ました…てへ
0566nobodyさん
02/03/15 01:12ID:???sub func
{
}
などと書いてる奴は氏ね。
プロトタイプ使えプロトタイプ。
0567nobodyさん
02/03/15 01:13ID:BRbcgxefぼくは秀丸で打ち込んだら、いちいちコマンドプロンプトでperl ファイル名
と入力してやっているんですけど。
環境はwin xpです。
0568nobodyさん
02/03/15 01:17ID:???0569nobodyさん
02/03/15 01:28ID:???M-x perldb
0570nobodyさん
02/03/15 01:31ID:???せっかく秀丸つかってるのに・・・
最低でも次のマクロを用意しろ。
[実行]run "perl < con";
[構文チェック]run "perl -c < con";
↑共に1行だ。これでファイルに保存せずに、構文チェック、実行が出来るぞ。
0571nobodyさん
02/03/15 07:25ID:???closehidemaru findhidemaru(windir + "\\temp\\perlres.txt");
save;
run "\"c:\\program files\\perl\\bin\\perl.exe\" \"" + filename + "\" > " + windir + "\\temp\\perlres.txt";
openfile "/(0," + str(cyscreen - 300) + "," + str(cxscreen) + ",300) " + windir + "\\temp\\perlres.txt";
俺専用統合開発環境w
実行ファイル変更でjavaにも対応(と、言うか元々java用に開発)。
0572nobodyさん
02/03/15 10:46ID:???ちなみに俺のはこれ
// ExecPerl.mac
run "perl -w \"" + filename + "\" >con";
// EOM
0573nobodyさん
02/03/15 11:42ID:pkh37ffW---
@data=<IN>;
foreach(@data){
print $_,"<BR>";
}
---
と
---
while(<IN>){
print $_,"<BR>";
}
---
は、どっちが速いの? また、それぞれの利点・欠点は?
0574nobodyさん
02/03/15 12:18ID:???上:メモリを食う。(やめとけ)
下:行数が多いと時間がかかるかも。(1,000,000行とかならんかぎり大丈夫)
ファイルの表示だけなら下を使いなさい。
0575nobodyさん
02/03/15 12:41ID:???行数が多いと時間がかかるのは上も同じ。
実際に計ってみればわかるが、下の方が高速だしメモリも少なくてすむぞ。
上のほうがいい状況って何だ…?
エディタとか?
0576nobodyさん
02/03/15 12:59ID:???0577nobodyさん
02/03/15 14:03ID:NtzdYptjだね。なんかのルーチンで表示したあと配列保持して、spliceなんかで
編集する必要がある場合くらいしか思いつかない。
それにしても、@配列を逐次表示するのだって、
foreach使うよりwhile使うべきだと思うんだけどな。
0579read
02/03/15 14:17ID:???read FILEHANDLE,SCALAR,LENGTH
Attempts to read LENGTH bytes of data into variable SCALAR
from the specified FILEHANDLE. Returns the number of bytes
actually read, 0 at end of file, or undef if there was an error.
SCALAR will be grown or shrunk to the length actually read.
If SCALAR needs growing, the new bytes will be zero bytes.
An OFFSET may be specified to place the read data into some
other place in SCALAR than the beginning. The call is actually
implemented in terms of stdio's fread(3) call. To get a true
read(2) system call, see sysread.
0580わざわざ英文かよ
02/03/15 14:19ID:???`read(FILEHANDLE,SCALAR,LENGTH)'
指定した FILEHANDLE から、 LENGTH バイトのデータを読んで SCALAR に格納する。
実際に読み込んだバイト数、またはエラーがあれば undef を返す。
SCALAR は実際に読んだバイト数に合わせてサイズが変わる。
OFFSET を指定すると、読んだデータを文字列の先頭ではなく他の場所に格納する。
これは実際には、 stdio の fread コールを用いてインプリメントしている。
本当の read システムコールを使いたければ、sysread を参照せよ。
0581nobodyさん
02/03/15 14:21ID:???ていうか、こういうドキュメントって、なんの役にもたたんです・・・・
実際の使用例があればすんなり理解できるのに・・・・・
0583アホか
02/03/15 14:24ID:???open(AHO, $file) or die;
read(AHO, $aho, -s $file);
close(AHO);
0584582
02/03/15 14:25ID:???-----------------------
open(A, "a.dat");
read(A, $Dat);
close(A);
print "$Dat\n";
とかでいいのか?
0585nobodyさん
02/03/15 14:29ID:???重要なのは最初の2行なのよ。↓これでほとんど理解できるはず。
read FILEHANDLE,SCALAR,LENGTH,OFFSET
read FILEHANDLE,SCALAR,LENGTH
0586nobodyさん
02/03/15 14:30ID:???そんなこたないよ。
はじめたばっかしの人間、言語というもの自体になれていない人間で
それで理解できる人間なんてほとんどいない。
0587nobodyさん
02/03/15 14:31ID:???使い方わかったサンクス。
でもそれを見て思うんだけど、ファイルの内容を一度変数に入れる形になってるみたいだけど、
while(<AHO>)よりもメモリ喰ったりしないの?
0588だから
02/03/15 14:33ID:???仕組みを説明するより、実際に使われているソースをながめたりいじったりした方が、
どれだけ理解を深めるか。
名著と呼ばれるリファレンスブックには、必ず実例が付いている。
>>585だけで理解出来るのであれば、そのような冗長な実例が付く本は
名著どころか、悪書とされているはず。
0589nobodyさん
02/03/15 14:34ID:???readだと,どこからどこまでを読むかが指定できる。
だから $dat = <AHO> で全部読んで $dat から抽出するよりはマシ。
0590nobodyさん
02/03/15 14:35ID:???ありがと〜〜
俺も一つ質問です。
whileで読み込むと、\nごとにわかれた配列に入れることもできるワケなんですけど、
そういう用途だったら素直にwhileつかっとけよ、っていういみなんですよね?
で、一気に読み込んで表示するんだったらreadが便利だわって意味ですね?
0591nobodyさん
02/03/15 14:37ID:???昔、数十MBのファイルを@lines = <FILE>;で読もうと思ったら、
すごく時間がかかった。readで読んだらすぐ読めた。
0592nobodyさん
02/03/15 14:38ID:???なるほど。
それじゃあ何も考えずにファイルの内容全表示するだけなら
while(<AHO>){
print;
}
でいいって事かな?
readは確かに使いどころを見極めれば便利そうだ。
ありがとう。
0593582
02/03/15 14:40ID:???なるほど。readは ファイルデータをスカラに入れるときの性能がいいのか。
>592
うむ。それ推奨。
おれもPOST以外ではread使ったことんなかったんでいい勉強になった。
>579-580には素直に感謝。
0594585
02/03/15 14:46ID:???>習うより慣れろって言葉がある。
>仕組みを説明するより、実際に使われているソースをながめたりいじったりした方が、
>どれだけ理解を深めるか。
そのつもりで、構文が大事だよって言いたかったんだが、余計にわかりにくかったな、俺。
ごめんよ。
0596nobodyさん
02/03/15 14:53ID:???そうだったのか、誤解だったかも知れない。
俺が言いたかったのは、
read FILEHANDLE,SCALAR,LENGTH,OFFSET
read FILEHANDLE,SCALAR,LENGTH
これだけ見て、たとえば、ファイルハンドルとは何か?スカラーとは?
オフセットとは実際どんな風に用いられているのか?
とか、そういうのがイメージできるような人は、その言語の上級者だって事なんだよな。
スカラーに$が付くってことすら、このステートメント見てイメージできない人って、
かなりいると思うんだよな。
俺自身、ほかの言語に行くとそういう混乱があったりする。
そういうことが言いたかっただけだったんだよな。
0597ファイル丸ごと読み込み
02/03/15 15:24ID:j7EJ72ekmkmnz での実装例。
http://www.namazu.org/ml/namazu-dev/msg00102.html
# readfile:
#
# Reads a specified file and returns its content.
# Takes one argument which can be a file name or IO::File object.
#
sub readfile ($) {
my ($arg) = @_;
my $fh;
if (ref $arg) {
if ($arg =~ /^IO::File/) {
$fh = $arg;
} else {
warn "$arg: not an IO::File object!\n";
return "";
}
} else {
$fh = fopen_or_die($arg);
}
my $cont = "";
my $size = -s $fh;
if ($size > $MAX_SIZE) {
warn "$arg: too large!\n";
return "";
}
read $fh, $cont, $size;
return $cont;
}
0599nobodyさん
02/03/15 22:55ID:Wm5JdTg+やるなら、
push(@data,$_) while <IN>;
だな
0601nobodyさん
02/03/15 23:06ID:???そ、それじゃKENTの意味無し処理と変わらんぞオイ・・・
0602nobodyさん
02/03/15 23:14ID:Wm5JdTg+@data=<IN>;
作業領域に<IN>が展開され、それを@dataにコピー
push(@data,$_) while <IN>;
$_に一行ずつコピーし、一行ずつ@dataに積んでく
意味が分からん奴は、KENT以下のDQN
0603ネタ
02/03/15 23:16ID:???print <IN>;
ちなみに、でかいファイル食わすとOut of Memoryでした(藁
0605nobodyさん
02/03/15 23:26ID:???まわりくどいことするんだな。(藁
0606nobodyさん
02/03/15 23:28ID:Wm5JdTg+ベンチマークとればわかるよ
0608nobodyさん
02/03/15 23:29ID:Wm5JdTg+0609601
02/03/15 23:29ID:???ん?上だと一瞬メモリ容量が二倍になるのか?
0610nobodyさん
02/03/15 23:31ID:???そうだよ。おまえみたいに上級者でも見下すヤツは正直場違い。
0611nobodyさん
02/03/15 23:34ID:???a[0] = IN[0];
a[1] = IN[1];
・
・
・
してから
result[0] = a[0];
・
・
・
と、
result[0] = IN[0]
・
・
・
の効率を話し合っているんだよ、今。
0612600
02/03/15 23:36ID:???ファイルがでかくなると圧倒的とも言える差だよ。
その点は認識不足だった。コレは認めよう。
だが、普通は
while(<IN>){
# ...
}
または
read IN, $buffer, $size;
を使った方がより良いのでそのテクは何らかの事情がない限り使わないがな。
0613607
02/03/15 23:36ID:???ネタだ。勘弁しろ。
0614nobodyさん
02/03/15 23:49ID:???認めてくれてありがとよ。
別にテクでもなんでもないんだが・・・(while倒置しただけだ)
どちらかというと、@data=<IN>;の方がトリッキーだしな。
0615nobodyさん
02/03/16 00:43ID:???例えば,eval{ flock(xxxx); } だと flockが実行できそうな時だけ実行するの??
エラーが返ったらやっぱりなかったことにするの??
こんなちゃらんぽらんなもんなの?
0616nobodyさん
02/03/16 00:49ID:???「この中のエラーは無かった事にしてくれ」と頼んでおきながら、何か不満ですか?
それとも$@の存在を知らないとか?
オブジェクトも受け取れるのでC++ちっくな例外処理も出来るよ。
eval{
throw MyException('Hoge!');
}
if($@){
die $@->errstr;
}
0617615
02/03/16 00:53ID:???エラーが返ると$@にエラーメッセージを入れて処理を続けるみたいだね。
ちゃらんぽらんだが便利なもんだな(笑
>616
その通り。$@知りませんでした。
あと「eval{};」みたいだね。
0618615
02/03/16 00:55ID:???2つeval{};を並べるときはそのつどundef $@;せなあかんの?
0619nobodyさん
02/03/16 04:32ID:???eval {flock STDIN,2};
print $@ . __LINE__;
eval {print $@ . __LINE__};
print $@ . __LINE__;
0620nobodyさん
02/03/16 06:23ID:???IDとパスワードでログイン
ってのはどうすれば良いですか?
ご説明は邪魔くさいと思うので
参考になるサイトがあればお教え下さい。
0622nobodyさん
02/03/16 06:35ID:???Perlに関係無い,Basic認証のだけど。
http://www.google.co.jp/search?q=Basic%94F%8F%D8+htaccess+%83p%83X%83%8F%81%5B%83h
0625615
02/03/16 08:20ID:???さんくす!参考になります!
>621
"認証サイト"なら .httaccess 使うとヨシ。
0626nobodyさん
02/03/16 10:38ID:???0627nobodyさん
02/03/16 11:26ID:???0629627
02/03/16 13:32ID:???0630nobodyさん
02/03/16 21:34ID:???どんなコマンドをつかったらよいですか?
自鯖を調べるのにつかいます
てか、自鯖立てるんだったらこれぐらいできるようにならんと・・・
0631nobodyさん
02/03/16 21:40ID:???0633nobodyさん
02/03/16 22:17ID:???Perl初心者コーナーで聞くからには、
もちろんPerlを使っての調べ方と仮定しますが。
Net::Pingを使いましょう。
perl-5.7.3では標準添付のようです。
ただし、MSWin32だと、Errnoの関係から使えないようです。
0635nobodyさん
02/03/16 22:31ID:???つまり、こういうことだろ。
$result = `ping hoge.org`;
0639nobodyさん
02/03/16 23:21ID:???取りあえずサーバの定義をはっきりしようや。
1台のマシンを指すのかサーバマシン上で走ってるネットワークデーモンを指すのか。
偉そうなことを言うのはそれからにしてくれ。
0643nobodyさん
02/03/17 00:53ID:???なんでこうなるかねぇ…
0644615
02/03/17 01:39ID:???eval{ flock(); };
die "errer!" if $@;
でも出力はないのですが,ロックしてないクセにそのまま真返してそうで・・・
0645615
02/03/17 01:51ID:???遅くなったけどありがとう。つまり偽だと空が入るんだね。納得。
0648636
02/03/17 03:35ID:???そういうときは、さくっとsynスキャンする。(嘘)
use IO::Socket;
print "ok\n" if (new IO::Socket::INET("www.kantei.go.jp:22"));
とかする。
0651nobodyさん
02/03/17 14:28ID:???0653615
02/03/17 23:21ID:???(((((||| ゚Д゚;;;)))))ガタガタガタガタ
0656648
02/03/17 23:44ID:???あ〜〜〜〜、デッドロックがなにか悪いことだと思ってるのね。
意図しないでデッドロックに陥るのはもちろん問題だけど、
テストとして意図的にデッドロックさせるのは、問題ないよ。
プロセス止めれば、解除されるので安心したまい。
■ このスレッドは過去ログ倉庫に格納されています