トップページ⇒php
1001コメント346KB

【Perl】初心者コーナー Part16

■ このスレッドは過去ログ倉庫に格納されています
00013PIO ◆3pIoOHKo 02/09/15 15:11ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【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あたりを見よう。
0628ふとした疑問02/10/03 18:28ID:v6OPXcCd
サブルーチン呼び出す時って
&subname();
の形ですよね?

で、普段は&は省略して書いてるんですが
&が無いと動かないサブルーチンとかも在ってチンプンカンプンです

そもそも&はどんな場合に必須となるのでしょうか?
0629nobodyさん02/10/03 18:54ID:bjQ5Yi4R
PerlからWin32::APIモジュールを使うとき、
RegisterClassExに渡すwndClassEx構造体の中で
ウィンドウプロシージャの指定はどうすればいいんでしょう?
Perlでユーザ関数(サブルーチン)を作ってそのリファレンスを渡せばいいのでしょうか?
0630nobodyさん02/10/03 19:11ID:???
× hogehoge
○ hogehoge()

× \hogehoge
× \hogehoge()
○ \&hogehoge
0631nobodyさん02/10/03 19:13ID:???
>>628
( )付きなら同じだよ。
&sub
と( )無しで呼ぶと&sub(@_)と同じ
0632nobodyさん02/10/03 19:54ID:FetdaLGe
>>628
省略記述って言うんだけど、実際の所省略しないほうが手っ取り早くていいぞ。
省略が通るかどうかは、他に前方宣言されているとかそうゆうのも関係ある。
ちゃんと正式に書けばどんな時も困った事にならない。
063362802/10/03 20:57ID:v6OPXcCd
>>630-632
ありがとうございました
自分には省略せずに書くのが見やすいし迷わなくていいかも。

0634nobodyさん02/10/03 21:10ID:???
ム板のPerl質問箱がrubyキティの荒しに遭って危うい状況。
0635nobodyさん02/10/03 21:31ID:Wit0Sk8M
Win2k Apacheで
print TXT "\n";
としただけなのに
TXTファイルの改行コードがCRCFになっています。なぜ?
0636nobodyさん02/10/03 21:41ID:???
>>635
Windowsの改行がCRLFだから、改行を表す\nもCRLF
0637nobodyさん02/10/03 21:49ID:???
>>636すみませんつまっていました。ありがとうございます。
\nだけprintする方法ありましたらどうぞ教えてください。
0638nobodyさん02/10/03 21:50ID:???
ごめんなさい。CFだけ記述する方法です。
0639nobodyさん02/10/03 21:51ID:???
CF???
0640nobodyさん02/10/03 21:52ID:???
だから、またrubyきちだよ。
0641nobodyさん02/10/03 21:53ID:???
>>639UNIXの改行。
0642nobodyさん02/10/03 21:54ID:???
LFでは?
0643nobodyさん02/10/03 21:57ID:???
>>642\r\nがCRCFと思っています。間違いみたいね。LFをprintしたいですが。\x0Aでも2バイトになるし。
0644nobodyさん02/10/03 21:58ID:???
出力する前に binmode(TXT);
0645nobodyさん02/10/03 21:58ID:???
CR(きゃりっじ・りたーん)
LF(らいん・ふぃーど)
0646nobodyさん02/10/03 21:59ID:???
>>644(TXT)/ やってみます。ありがとうございます。
0647nobodyさん02/10/03 22:34ID:G7kyuSYC
CPANの使い方の日本語の解説がないか?
本 or サイト どっちでも可
0648nobodyさん02/10/03 22:44ID:???
あの程度の規模のサイトに解説が必要か?
0649nobodyさん02/10/03 22:58ID:???
>>647 CPANってモジュールのこと?
それともサイトのこと?
065061402/10/03 23:17ID:???
>>620
できました!
どうもありがとうございました。
0651nobodyさん02/10/04 00:00ID:???
PerlってCとBASICのいいところを合わせたような
感じの言語だね。
0652nobodyさん02/10/04 00:09ID:???
つまり、古典と糞を合わせた最低言語ということだ。
0653nobodyさん02/10/04 01:36ID:???
#1
for($i = 0; $i < 200000; $i++) {
 $array1[$i] = 1;
}

#2
$#array2 = 199999;
for($i = 0; $i < 200000; $i++) {
 $array2[$i] = 1;
}

先に領域の確保をしておく#2の方が速いと思ったら#1の方が速くなった。なぜ?
0654 02/10/04 01:39ID:???
これってなぜ保存できないの?


http://www.need4xxx.net/asian/hamedori/data/099/dir/index.html



おんなじのコピーしてつくろうとしたけど不可能
0655nobodyさん02/10/04 03:12ID:???
>>654
ブラクラ
0656nobodyさん02/10/04 08:04ID:iu1Ymefg
「Perlについての質問箱」がruby基地外によって潰されました。
心ある人は、rubyスレにお礼参りしてください。
0657 ◆hMJAPH9PWA 02/10/04 09:10ID:???
なんかPerlerとRubyistを争わせたい人がいるなあ。
0658nobodyさん02/10/04 09:31ID:???
(´-`).。oO(なぜRubyキティ・ガイの仕業だって分かるんだろう?)
0659nobodyさん02/10/04 09:38ID:???
>>649

モジュールの方
0660 ◆hMJAPH9PWA 02/10/04 09:46ID:???
>>659
CPANモジュールの全てを網羅するのは不可能かと…。
100や200というやわな数じゃないからねぇ。

有用なモジュールやperldocの日本語化は
http://perldoc.jpで行われてるけど、まだ発足したばかりのプロジェクトだし。
066164902/10/04 09:57ID:???
>>660 CPAN.pm のことでは? >>649 の訊き方も悪かったね。ゴメソ。

>>659
http://member.nifty.ne.jp/hippo2000/perltips/CPAN.htm に
マニュアルはあるけど、これじゃダメ?
0662nobodyさん02/10/04 10:03ID:???
>>658
じゃ、引用してやるYo
------
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Perl
ぷぷぷ
反論したいか?反論したいんだろ?ぷぷぷ大爆笑
お前らには無理。
Perlみたいな糞言語を使う奴らは人間以下
------
これがrubyキティ以外の何だってんだ、ドアフォ
あ、これはrubyキティに言ったんで気にしないで。

0663 ◆hMJAPH9PWA 02/10/04 10:26ID:???
>>662
それが単にRuby厨を騙っているだけなんじゃないか、と皆思ってるわけで。
仮に本当にRuby厨だとしても、もはやそれは言語を超えた厨房でしょ。
無視以外の対策は無いと思うんだよね。
0664nobodyさん02/10/04 10:29ID:???
>>663
> もはやそれは言語を超えた厨房でしょ。

言い得て妙。
0665nobodyさん02/10/04 10:36ID:???
>>663
ところで奴はPerlの新スレはム板には立てるな、PerlはWebprogに
引きこもってろ、というわけ。rubyのスレはム板にいくつかあるよ
ね。Perl==CGIじゃないんで、ム板にも1つくらいPerlスレがあっ
てもいいと思うんだが、奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
冷静に構えてますが、ますますPerl==CGI、ruby>>Perlという
認識が広まっていいわけ?
0666nobodyさん02/10/04 11:34ID:???
>>660
http://www.cpan.jp/

>>665
荒らされると、流れが追いかけにくくなるし
こっちで話てる分には文句言わないみたいだし
別に無理してム板に立てる必要もないかナっと
0667nobodyさん02/10/04 11:43ID:???
>>665
perl知ってる人間がIPアドレスがばれるなんて事ビビるかよ…
小せぇ事気にする前にお前が言語勉強しろ
0668 ◆nqY464pJQ. 02/10/04 12:19ID:???
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
0669nobodyさん02/10/04 12:30ID:???
キミらにはまだわからないのかもしれないけどみんな大人なんだよ。


いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
067065902/10/04 12:42ID:???
>>661

‥‥‥‥‥‥‥‥漏れ、ここのサイト行ったことあるわ。
なんで見つけられなかったんだろう?

恥ずかしいので、回線切って、首吊ってきます。
0671nobodyさん02/10/04 13:38ID:???
>>667
>perl知ってる人間がIPアドレスがばれるなんて事ビビるかよ…
perlを知っているかどうかとは関係ないでしょ。rubyキティが言うように
新スレを立てた人間のIPアドレスが記録されていて一般ユーザも参照可能
かどうかということでしょ。
0672nobodyさん02/10/04 13:45ID:???
他の可能性:
1)Apacheなどのhttpdサーバは、httpdサーバにアクセスしたユーザのIPアド
レスと閲覧したページをaccess.logに記録します。(Perlなどアクセス解析ス
クリプトの多くは、このファイルを読んでグラフとか表に整形します。)した
がって、プロバイダの管理者は、特別な場合にこのaccess.logから特定の時間
に特定のページにアクセスしたユーザ情報を知らせることができます。2chで
も、個人名を挙げた誹謗中傷の書きコに対して時々見られます。今回の場合は、
この可能性は、ないと思われますが、問題は、rubyキティがプロバイダ関係、
あるいは2ch管理者関係の人間であった場合です。
2)新スレ立てたヤシ(1だね)に自鯖のHPを見るように誘って、IPアドレス
を抜き取る。
3)perlでは、packet解析も容易にできる。
0673nobodyさん02/10/04 13:51ID:Ck18zQey
自分用にライブラリ作ってるんだけど
#コメント行だけで数キロバイト・・・
やっぱファイルサイズが大きければ大きいだけ速度に影響しますか?

というか50KB程度なら体感的に別に関係ない気もしますが
どうなんでしょう
0674nobodyさん02/10/04 13:57ID:???
>>672
だからIP抜かれたから何…
企業からとかならともかく
プロバイダのIPじゃせいぜい
住んでる地域くらいしかわからないじゃん…
荒らしたわけじゃないからアカウント消されるわけでもなし
0675nobodyさん02/10/04 13:58ID:???
>>673
それくらいだったら、人間の感覚では判別できない程度です。
0676nobodyさん02/10/04 14:00ID:???
>>673
コメントの量くらいで体感差はないと思うけど、
気になるならコメントは別のファイルに書いとけば?
コメント自体あんま要らないと思うけど。
0677nobodyさん02/10/04 14:18ID:???
open (TXT, "aaa.txt") || &error("開けません。");
while($linevalue = <TXT>){

}
aaa.txtを一気に全部読み込むことってできますか?
while($linevalue = <TXT>){
 $line_all .= $linevalue;
}
で、連結させていくしかないですか?
0678nobodyさん02/10/04 14:25ID:???
>>673
perl がスクリプトを解析する部分での影響は殆ど無い。
但しディスク I/O が遅ければ、当然その影響は受ける。

>>677
undef $/;
0679nobodyさん02/10/04 14:41ID:zNdIxOGz
フルパス名から拡張子を抜き出すのて
$kakutyousi=~/\.([a-zA-Z]$)/;でいい
0680nobodyさん02/10/04 14:42ID:???
>>677
open (TXT, "aaa.txt") || &error("開けません。");
@linevalues = <TXT>;

こういうのをPerlお大尽といいます。
0681nobodyさん02/10/04 15:01ID:???
>>679これ質問?
拡張子に数字を含んだものもあるかも。
/(\.[^.]+)$/じゃあどうよ。
0682nobodyさん02/10/04 15:14ID:???
>>681
/\.([^.]+)$/だよね?

っていうか,/([^.]+)$/じゃだめなの?
0683nobodyさん02/10/04 15:15ID:???
>>679
hoge.a とか hoge.o とかにしかマッチしないよ
0684nobodyさん02/10/04 16:02ID:???
>>679 >>681-683

$full_path =~ s|(?<!^[A-Za-z])[:\\]|/|g;
($path, $basename, $extension) =
$full_path =~ m|^(.*?)([^./]+)((?:\.[^./]+)*)$|;

…過剰?
0685nobodyさん02/10/04 16:25ID:???
CGIがリクエストされもしないのに定刻に勝手にCGIが回るとか出来ますか?
0686 ◆hMJAPH9PWA 02/10/04 16:40ID:???
明らかに荒らし風な書き込みを、常識人が相手にするとは思えないよ。
やっぱり無視が一番いいと思うな。

>>685
cron

0687nobodyさん02/10/04 17:01ID:???
>>686
分かりますた。って、ム板に新スレ「Perlについての質問箱2箱目」
が立ったので、とりあえずって感じ。また、荒らされたら、どうし
ようかってのは残るけど・・・
0688nobodyさん02/10/04 17:04ID:???
>>685
sleep
って重も重もかな。
0689nobodyさん02/10/04 17:09ID:FKzI73uU
#フォルダ作成
{
    umask(0);
    mkdir("hoge",0777);
    chmod(0777,"hoge");
}

これを実行したらhogeフォルダが消せなくなってしまったのですが
このumask(0);ってどういう意味ですか?
0690質問02/10/04 17:11ID:zDqIUs3v
ttp://www.〜〜〜/~~~~/~~~~/~~~~/

で最期のスラッシュ部分を削るとよくdirectry格納庫が見えるんですけど
これは犯罪なんですか?
0691 ◆hMJAPH9PWA 02/10/04 17:35ID:???
>>687
まあ、とりあえずいいんじゃない?
荒らしはねぇ…実の所、私はまるで気にならないんだよね。慣れたのかな。

>>689
umask(0)はパーミッション操作に対するデフォルトのマスクを無しにする、
つまり「これからパーミッションを危険な値に設定するけど、これは確かに私が望んだことだからね」って意味。
見たところ、そのコードで作ったディレクトリが消せないとは思えないな。
とりあえずパーミッションを確認してみて。ていうかそういう場合はまずパーミッション確認して。

または、そのディレクトリの中にファイル作らなかった?それなら消せないと思うけど。

余談だけど、最後のchmod()は無意味だね。

>>690
そんなことで犯罪になるわけないでしょ。
0692nobodyさん02/10/04 17:37ID:???
>>691 マルチポストに反応するなや
http://pc.2ch.net/test/read.cgi/php/1031721334/292
http://pc.2ch.net/test/read.cgi/php/1031910901/236
0693nobodyさん02/10/04 17:39ID:zDqIUs3v
>>692
ウザイ
0694nobodyさん02/10/04 17:43ID:???
>>693 はいはい。よかったでちゅねー、ぼうや♥
0695nobodyさん02/10/04 17:46ID:zDqIUs3v
じゃあね>>694のマルチさんしつこいよップ
0696 ◆hMJAPH9PWA 02/10/04 17:48ID:???
>>692
ん、失敬。

# どっちもチェックしてないスレだ…
0697nobodyさん02/10/04 17:48ID:???
>>695 分かったからとっとと死ね
0698nobodyさん02/10/04 17:52ID:zDqIUs3v
>>697じゃあねマルチさん
0699nobodyさん02/10/04 18:08ID:???
自治厨ならまだしも、何故マルチポストをしてるzDqIUs3vなんかに
マルチ呼ばわりされないといけないのか理解に苦しむ。
もしかして他のスレでzDqIUs3vにレスしてるのも俺だということに
zDqIUs3vの脳内世界ではなっているのであろうか。
そうだとしたらzDqIUs3vは相当おめでたい野郎だ。
0700nobodyさん02/10/04 18:11ID:???
ただの質問なんじゃないのかなあ

よくあることだな
0701nobodyさん02/10/04 18:11ID:mwNvTbYD
連想配列%Pointを、それぞれ対応した%Countで割って、
その値を%HEIKINに入れる時に、0/0(ゼロ ÷ ゼロ)
になると、CGIが途中で止まってしまうのですが、
これって、仕様ですか??

foreach (@LIST){
$HEIKIN{"$_"} = $Point{"$_"} / $Count{"$_"};
}
0702nobodyさん02/10/04 18:12ID:???
ま、初心者だな>>>699そう思うだろ?
常識だよな
0703nobodyさん02/10/04 18:14ID:???
マルチなんて言うからいわれ返されんだよ

ほっとけよ
0704nobodyさん02/10/04 18:19ID:???
>>701 別にとまらんけど?

>>703 遊んでんだから邪魔するなよ(藁
0705nobodyさん02/10/04 18:26ID:???
ちょっとperlの正規表現使いて〜、という時に
% cat example
s/^(.*)$/$1 = $1\.new/;
% perl -p example kakikomi
 【失敗】
% vim example
% perl -p example kakikomi
 【失敗】
% perl -p example kakikomi

のようにちょこちょこフィルターをエディターで開いては
閉じてするんですが、ファイルをその場で編集できる
エディターって何かありますか?edは使いにくいので、パス。
シェル変数をぱっとその場で編集できるvaredコマンドの便利さに
あやかりたい。
070670102/10/04 18:26ID:???
>>704
マジですか!?
とりあえず、
$Count{"$_"} = 1 unless($Count{"$_"});
を追加して、0にならないようにすれば、回避はできるのですが、
分母に0が入ると、必ずそこで処理が止まってしまうんです・・・
どなたか、同じような経験をした事ある人いませんか?

動作環境
Apache 1.3.26-win32
ActivePerl-5.6.1
0707nobodyさん02/10/04 18:36ID:???
えっと、ひょっとしてCGIでそれ以降のHTMLが表示されないって事?
それなら0で割った時点でエラーがでて終了しちゃうから続きは出ないよ。

漏れはてっきりコマンドプロンプトで打ったらそこから反応が返ってこなくなるのかと思ったよ。
スマソ。
0708nobodyさん02/10/04 18:38ID:???
反応あった?
070970102/10/04 18:46ID:???
こんな感じのを実行すると、
0/0は、500エラーになってしまいます。
0÷0=0って計算してくれないんですかね・・・

#!C:/perl/bin/perl

$test = 0 / 0;#これだと500エラー
#$test = 0 / 1;#これならOK

print "Content-type: text/html\n\n";
print "$test";
exit;
0710nobodyさん02/10/04 18:52ID:???
>>709
$test = 0 / 0;
の時点でエラーを起こして終了し、標準出力になにも出力されないから。
0711nobodyさん02/10/04 19:25ID:oWNxUl3m
Perlメモ
http://www.din.or.jp/~ohzaki/perl.htm
を読んでいて、「改行コードを統一する」って話のところで、
s/\x0D\x0A|\x0D|\x0A/\n/g;
と同値な文が
s/\x0D\x0A/\n/g;
tr/\x0D\x0A/\n\n/;
ってことが理解できない。2番目の文が
tr/\x0D\x0A/\n/;
じゃないのかと思うのだけれども、そもそもtr///やs///が理解できていないような気がしてきた。
tr///とs///の違いを含めて、ご教授願います。
0712nobodyさん02/10/04 19:46ID:???
検索すれ
0713 ◆hMJAPH9PWA 02/10/04 19:48ID:???
http://www.google.com

これも>>1に追加した方が良いかな?
0714nobodyさん02/10/04 20:13ID:yQsbQ4Tj
以下のようにしたいのですが、厨房にはスクリプト書けまテン。
誰かタツけて下さい。
$ find -name "*.pl" >find.log
$ cat find.log
./lwp-perl/ch07/bbc_scan.pl
./lwp-perl/ch06/amazon-rank.pl
./lwp-perl/ch06/orn-summary.pl
./lwp-perl/ch06/bookmark-checker.pl
./lwp-perl/ch06/ora-temps.pl
./lwp-perl/ch07/ora-temps.pl
  ↓
  ↓
bbc_scan.pl
amazon-rank.pl
orn-summary.pl
bookmark-checker.pl
ch06_ora-temps.pl
ch07_ora-temps.pl
同じファイル名であれば、プレフィックス(ディレクトリ名)をつけるというやつでつ。
0715nobodyさん02/10/04 20:13ID:???
>>711

> tr///とs///の違い
を理解すれば良い
0716nobodyさん02/10/04 20:17ID:FKzI73uU
>>691
丁寧な説明ありがとうございます。
hogeフォルダをつくったあとに設定ファイルも自動でつくる
ようになっていたので自動でつくられました。

パーミッションはローカルのせいか764でした。
もうちょっといろいろやってみます。
0717 ◆hMJAPH9PWA 02/10/04 20:22ID:???
>>714
ここはPerlコーディングに感する質問スレです。
そのような依頼はスレ違いです。

0718 ◆hMJAPH9PWA 02/10/04 20:22ID:???
s/感/関/
0719nobodyさん02/10/04 20:22ID:???
>>705
編集中のファイル(バッファ)にPerlスクリプトをかけて
そのまま変更できるエディターとか言ってましたね。
1)いわずと知れたEmacs、Meadow(windows版)
2)xyyzz(windows版)、秀丸(filter.macってどうなった?)(windows版)
もちろんお勧めは、1)。


0720nobodyさん02/10/04 20:28ID:???
>>701
eval { $HEIKIN{$_} = $Point{$_} / $Count{$_}; };

>>705
キミの使ってるシェルはヒストリが呼び出せないのかね?

>>711
ttp://flex.ee.uec.ac.jp/texi/perl/perl_103.html

>>714
>>684 を見てがんがれ。
072171402/10/04 20:41ID:???
>>717
何処で聞けばいいでしょうか?或いは似た処理をするスクリプトって
ないでしょうか?
0722nobodyさん02/10/04 20:55ID:???
>>721
http://pc.2ch.net/test/read.cgi/php/1030151932/

甘ったれが多いなどうも
0723nobodyさん02/10/04 21:36ID:???
なんで、
0÷0=0
なんだろう…
072471902/10/04 22:37ID:???
>>705
よく読んだら違った。簡単なフィルター(Perlスクリプト)を書き直す
のにエディターを開いたり閉じたりするのが面倒ってことね。え?、
例を見るとコマンドラインスクリプトで十分できません?unixをお使い
のようですから、複数行にまたがるスクリプトも'\'を付けて簡単につ
なげて書けるんだから。
私は、emacsで対象テキスト開いといて、C-x h、C-u M-|して、Minibuffer
でPerlスクリプト実行させてます。


072570502/10/04 22:58ID:???
>>724
【ワンライナー】履歴に間違った正規表現まで残って、後で探す時にややこしい。
【emacs】重いので起動が困難(vmware内なので)。
よって、edみたいなコマンドラインでさくっと編集できるエディターってないのかな
と思ったわけです。ed もなんだか使いづらいので。
varedってemacsライク(GNU readline)なキーバインドにできますよね。
それと似たやつで、なんかないかなー、という意味です。
0726nobodyさん02/10/04 23:13ID:???
vim使っているなら、
! perl hoge.pl somefile
後は履歴で
0727nobodyさん02/10/04 23:49ID:???
>>726
気ヅカナカッタヨ。キャハー。

逝ってきます。
どうもねー。
■ このスレッドは過去ログ倉庫に格納されています