【Perl 】初心者コーナーPart6
■ このスレッドは過去ログ倉庫に格納されています
0001undefさん
2001/07/26(木) 00:40ID:???尋ねる前に同じ質問がないかこのスレや旧スレ、及び>>2のリンクを一通り見てみよう。
案外答えはもう書かれているかもしれない。
0045名無しさん@お腹いっぱい。
2001/07/27(金) 17:06ID:???44ですが、下の奴を主に使ってたんですが、Proxy制限が使えないんですよ。(機能はあるのに)
だから、上のProxy制限に優れてる奴と二つ使えれば問題ないかなと思ったんですが、
どうやらうまく行かないらしいみたいなので、もういいです。ありがとうございました。
ところで、
http://dream.lib.net/room/cgi/e_acsdeny.html
このスクリプトが、きちんとProxy制限できれば良いんですが、
どうしたらいいんでしょうか?どなたかご教授ください。
004630
2001/07/27(金) 19:01ID:OFQPU1uAまとめるとこんな感じですか?
でも、サイズがでかくなると問題です。
open(IN,"list.txt") or die;
open(OUT,">sort_list.txt") or die;
print OUT sort <IN>;
close IN;
close OUT;
何かいい方法ないですかね?
(DBを使用しないで、、)
system 'sort list.txt > sort.txt';
とかやっても無駄ですか?
> || -> or
この違いって何ですか?
調べたら、優先順位が低くなるってありました。
ただ打ちやすいから、|| をつかってたのですが、、、
0047名無しさん@お腹いっぱい。
2001/07/27(金) 22:03ID:???自分でマージ・ソートでも自分で作ってみたら?
昔からあるソート法だよ。
00488
2001/07/27(金) 23:31ID:???カコイイやり方有難う御座いますぅ (^ ^ )
何とか上手くいったのでご報告ですぅ、結局最初に読み込まれたcsvファイル
を\nをデリミタにして配列に入れて、その要素をもう一回配列に入れてから
からヘコヘコと加工してpushしました。 50行くらいになっちゃった ^ ^ )
今>>13さんや>>29さんの カコヨイやり方で挑戦中
0049名無しさん@お腹いっぱい。
2001/07/28(土) 00:25ID:???プログラムが大きくなったのでソースファイルを分割して、
main.pl
require 'sub1.pl';
require 'sub2.pl';
のようにしたとき、
1.use strict;をmain.plで宣言すると、requireで呼び出した
sub1.pl sub2.plにもその宣言が適用されるのでしょうか?
2.main.plで宣言したグローバル変数はsub1.pl sub2.plでも
適用されるのでしょうか?
0050名無しさん@お腹いっぱい。
2001/07/28(土) 02:01ID:???誰かご教授してもらえませんか?
<img src="/bin/counter">これをHTML
にくみこむだけでなんとかなると思ってたのですが・・・
0051名無しさん@お腹いっぱい。
2001/07/28(土) 02:41ID:???結構過去の過去ログを読むのはいい心がけだけどさ、なんで過去ログにないのか考えること。
そのくらい自分でちっちゃいプログラムを書けば簡単に試せるから誰も質問しないんだよ。
0052JAPU@今日も観鈴ちんを探しにマクドナルドへ...
2001/07/28(土) 06:25ID:???典型的な例:
1. open MOE, "misuzu.txt" || die;
2. open MOE, "misuzu.txt" or die;
ここで、
1. は open MOE, ("misuzu.txt" || die);
2. は (open MOE, "misuzu.txt") or die;
と解釈されるので、おそらく 1. は期待した動作じゃないだろう...
みたいな話。
もちろん、括弧で括れば全く問題ないので、|| で全て書いても良いです。
個人的には or を使うのが好きです。
# The Perl motto is "There's more than one way to do it."
ZZ
0053名無しさん@お腹いっぱい。
2001/07/28(土) 07:01ID:???同意。
Perlの上級者は極力()や&、$_を書かないでコーディングするから、
Perl初心者からみると訳のわからないスクリプトに見えることがありますよね。
でも、それを自分で考えて解くのも楽しいし勉強になります。
よく、メールの署名欄に簡単なスクリプトが書いてあって、それを実行すると
結構驚くスクリプトが沢山あります。自分でも書いてみたいけど、スマートな
ものが書けないので未だ署名欄は名前だけ(w
005449
2001/07/28(土) 11:53ID:???なるほど。
私が試したところによれば、
1.適用されない
2.適用される
と言う結果が得られたような気がするのですが、あっているのでしょうか?
0055名無しさん@お腹いっぱい。
2001/07/28(土) 16:42ID:???非常に偏りが大きいのですが、回避方法はありますか?
0056名無しさん@お腹いっぱい。
2001/07/28(土) 16:45ID:zGTvO/Jw理論的にはどちらを使ったほうが高速ですか?
自分のところで試してみたところ、1/10〜1/20程度の差が出、
どちらかが常に速いということはありませんでした。
0057名無しさん@お腹いっぱい。
2001/07/28(土) 16:58ID:???毎回srandしてない?
0058名無しさん@お腹いっぱい。
2001/07/28(土) 17:06ID:m51BRqkY0059名無しさん@お腹いっぱい。
2001/07/28(土) 19:56ID:???>>56
変数の判定をやらない分シングルの方が早そうだけど、知らん。
死ぬほど巨大なスクリプトじゃないと差は出ないんじゃないの?
006055
2001/07/29(日) 02:15ID:???srand();
としてから使ってます<rand
後はsrandは宣言していません。
種は指定無しでtimeになるようなので指定無しにしています。
0061JAPU@観鈴ちんげっと
2001/07/29(日) 02:40ID:???詳しい話は perldoc 読んでね。
0062名無しさん@お腹いっぱい。
2001/07/29(日) 03:45ID:???0063名無しさん@お腹いっぱい。
2001/07/29(日) 04:08ID:???調べ方に偏りがあるとは思わないのかね。
0064名無しさん@お腹いっぱい。
2001/07/29(日) 04:57ID:???禿同
006555
2001/07/29(日) 16:21ID:???エクセルにてその値の分布を表にしました。
その結果、0〜10と90〜100の範囲が他の範囲に比べて2割ほど
大きな値となりました。
・・・・偏り大きい調べ方ですか・・ね?
0066名無しさん@お腹いっぱい。
2001/07/29(日) 17:20ID:???20,000 回では?50,000 回では?100,000 回では?1,000,000 回では?
という具合に調べればわかると思うんだけど….
エラーが出てるよ!と教えてくれる時は間違いが探しやすいんですが、
最終行のみにエラーが出てるよ!と出た時に途方にくれます。
そういう時は文法的には間違ってないけど、処理の流れが
おかしいと言うことなのでしょうか?
また、こういう時にエラーを判断するコツがあれば、アドバイス
いただけないでしょうか?
0068名無しさん@お腹いっぱい。
2001/07/30(月) 03:22ID:???"や'の閉じ忘れの可能性が高い。
0069名無しさん@お腹いっぱい。
2001/07/30(月) 03:45ID:???$status = system("$command", "$str");
とすると、$statusに数字が入りますが、
この数字の意味するところがよく分かりません、というか知りません。
成功か失敗かは0と1(256)なので分かりますが、他の値、
2とか9等にはどういう意味があるのか知りたいです。
調べようにも何をきっかけに調べればいいのか思いつかないので
知ってる方、おねげぇします。
0070名無しさん@お腹いっぱい。
2001/07/30(月) 03:46ID:???system("$command $str");
のミスです。。。
0071名無しさん@お腹いっぱい。
2001/07/30(月) 06:05ID:GER1kc7.CGI&PerlポケットリファレンスのdbmopenのTipsを参照すると、
『DBMファイルをロックする機構はDB_Fileモジュールに用意されています』
と書いてあったのですが、なかなか方法がわからないでいます。
今のところ、下記のドキュメントは発見しましたが、
英語がわからない上に、use DB_File::Lockの記述で即エラー(*1)になります。
http://www.perldoc.com/cpan/DB_File/Lock.html
*1) BEGIN failed--compilation aborted
ローカル環境はmac OS X perl v5.6.0 built for darwin
公開用サーバーはlinux
使えるモジュールはこんな感じだそうです。(モジュールについての知識はあまりないです・・)
http://web.arena.ne.jp/suite/support/manual/cgi-cgi/perlmodule/index.html
よろしくお願いします。
足りない情報があれば追記します。
0072名無しさん@お腹いっぱい。
2001/07/30(月) 06:46ID:???> use DB_File::Lockの記述で即エラー
DB_File::Lockがインストールされていないからでしょう。
別のロック機構を試すべきかと。
00731
2001/07/30(月) 09:43ID:Aj8f98qcレスありがとうです。
根本的な認識ミスってことですか?(恥)
DB_File::Lockって、DB_Fileモジュールさえあれば使えるのかと思っていました・・
リファレンスに書いてあったのと上記のLock機構が
同じものを指してるのかは不明ですが、
DB_Fileを使うなら、これがおすすめ!っていう方法があったらよろしくお願いします〜
やっぱり普通にflockとか・・なオチになりそうですが(泣)
007471
2001/07/30(月) 09:45ID:Aj8f98qc71==73です、よろしくです。
007572
2001/07/30(月) 09:47ID:???DB_Fileのドキュメントを見ると、flockを使用しているようですね。
DB_Fileを使ったことがないので、オススメとかはないのですが、
自分はファイルロックの必要がある時は、renameを使った方法を用いてます。
これだと環境に依存しないので。
0076JAPU@オートレスポンダの作者をいじめるのはやめよう (笑)
2001/07/30(月) 11:16ID:???惜しい。
> $status = system("$command", "$str");
> とすると、$statusに数字が入りますが、
> この数字の意味するところがよく分かりません、というか知りません。
system の返り値、すなわち $? の値は wait(2) が返す値なので、
$? >> 8 が exit value
$? & 127 がどのシグナルで殺されたか、
$? & 128 がコアダンプしたかどうか
を表す。
perldoc -f system
perldoc perlvar
man 2 wait
って感じ?
0077名無しさん@お腹いっぱい
2001/07/30(月) 12:02ID:???という風に、変数に数字が入っていて、
この数字が奇数か偶数かを判断するには、
どうしたらいいでしょうか?
0078名無しさん@お腹いっぱい。
2001/07/30(月) 12:06ID:???0079hage
2001/07/30(月) 14:49ID:???print "odd\n"
} else {
print "even\n";
}
0080名無しさん@お腹いっぱい。
2001/07/30(月) 17:09ID:312.Yf8o0081名無しさん@お腹いっぱい。
2001/07/30(月) 19:26ID:t7BVDL/M"ー"が入ってる文字列をgrepかけるとエラーが表示されます。
対処法はありますか?
@a=("あ","あー","あーー");
@b=grep('ー',@a);
008281
2001/07/30(月) 19:28ID:t7BVDL/M008371
2001/07/30(月) 20:55ID:Ydf2hNHw>>75
renameですか!使った事ないです〜。
・・・flockが使える環境だとしたら、実際どちらがおすすめでしょうか?
>>80
おお、rmdirもはじめて聞きました(恥)
ちょっと調べてきますね。もっかい質問するかもしれません。。
0084T女の竹田
2001/07/30(月) 21:00ID:???うーん、ログ見てもわかりにくいけど、やっぱりFAQ。
「正規表現の中でシフトJISを使うときは、m/\Qマッチさせたい文字列\E/
のように\Qと\Eではさむ」
シフトJISは2バイト目にメタ文字(正規表現で特別な意味を持つ文字、
この場合は'[')が含まれることがあるので\Qでエスケープするわけ。
(\Eはその終わり)
ちなみに似たような問題で、'―'とかは'―\'にしないとダメ(この場合は
2バイト目が'\')。
自分は昔二つともつまずきました^^;
FAQスレとかあったほうがいいかな?
0085T女の竹田
2001/07/30(月) 21:07ID:???s/\+|\\|\(|\)|\[|\]|\{|\}|\^|\$|\*|\?|\./\\$&/g;
みたいなのがあったり(恥)
008669
2001/07/30(月) 21:33ID:CEolkqW6なるほどです。
$? だったんですね。
perldoc perlvar 初めて使いました。てへ。
でも"$? & 127"のANDしてる値自体の
一覧みたいのはあるんしょうか?
例えばPerlがuseやrequireで
外部ファイルを取り込めなかった場合(等?)は512とか。
008772
2001/07/30(月) 22:27ID:???flockが良いかどうかという話は、今までにもいろんなところで議論されていて、
結局は本人の好みの問題になると思います。
が、あえて自分の意見を述べさせていただくと、
自分の場合flockだと失敗することが多かったと思うので、rename使ってます。
その辺の話はPerlメモがオススメです。
008871
2001/07/31(火) 01:38ID:???調べました〜!・・テストはまだです。
せっかくなので、いろいろ試しにやってみようと思います^^
>>72
なるほど。しっかり動作確認してから運用した方がいいですね。
Perlメモみてきます!
うう、いろいろ見てまわってるうちに、どんどん分らない事が増えてます。
そもそも、DB_FileとバークレーDBの関係がよくわかっていません。
DB_FileさえあればバークレーDBも使えちゃうってことなんでしょうか。
それとも、またそれ専用のモジュール等が必要とか・・?
ttp://member.nifty.ne.jp/hippo2000/perltips/db_file.htm
[$X =] tie %hash, 'DB_File', [$filename, $flags, $mode, $DB_HASH] ;
この先頭の [$X =] もあるとどういう利点があるのか不明なのです。
こんなわたしに丁度いいリファレンスサイトとか解説書がありましたら
どうか教えてくださいませ。。
0089JAPU@腹痛
2001/07/31(火) 04:13ID:???> 一覧みたいのはあるんしょうか?
use POSIX; すると、この辺の定数使えるようになるみたいだ。
SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK
SA_RESETHAND SA_RESTART SA_SIGINFO SIGABRT SIGALRM
SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT
SIGKILL SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM
SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 SIG_BLOCK
SIG_DFL SIG_ERR SIG_IGN SIG_SETMASK SIG_UNBLOCK
あとは、man 2 signal とか、/usr/include/sys/signal.h とか参照?
> 例えばPerlがuseやrequireで
> 外部ファイルを取り込めなかった場合(等?)は512とか。
なにか勘違いしている?
009069
2001/07/31(火) 04:52ID:zN5/REcMまたしてもありがとうございます。
ここら辺あたれば何か分かりそうな気配・・・
>なにか勘違いしている?
いえ、勘違いではないです。
やってることが簡易shellみたいなもので
実行後、エラーの返値を見ても実際は何が起きたのか
さっぱり分からないので何とかしたいなぁ、と。
故に返値一覧があったら楽でいいなぁと思った次第です。
009181
2001/07/31(火) 05:48ID:q2wDcpy6竹田様
お手数おかけしました。お忙しい所ありがとうございます。
本当に嬉しいです。ありがとうございました。
0092JAPU@夏ですねぇ...
2001/07/31(火) 14:02ID:???もうちょっと整理して質問しよう。
0093名無しさん@お腹いっぱい。
2001/07/31(火) 14:54ID:???0094名無しさん@お腹いっぱい。
2001/07/31(火) 17:31ID:???絶対勘違いしていると思われ。
JAPUたんに一票。
009569
2001/07/31(火) 23:11ID:???0096名無しさん@お腹いっぱい。
2001/08/01(水) 00:48ID:???0097名無しさん@お腹いっぱい。
2001/08/01(水) 07:50ID:kOCX6RGEunlinkで削除出来ますでしょjか?
0098名無しさん@お腹いっぱい。
2001/08/01(水) 09:06ID:???削除できます。
0099JAPU@千影たん
2001/08/01(水) 18:58ID:???とりあえず質問するときは、「具体的な目的」も併記すると吉かもしれない。
「○○をしたときに、云々...」という質問の仕方でも悪くはないけど、
実はそれよりもうまい方法を教えてもらえるかもしれないぞ。
0100名無しさん@お腹いっぱい。
2001/08/02(木) 00:28ID:DguDE1y60101
2001/08/02(木) 00:46ID:8xHqzTcA0102名無しさん@お腹いっぱい。
2001/08/02(木) 02:08ID:???0103名無しさん@お腹いっぱい。
2001/08/02(木) 03:43ID:GB8M4TIEファイルA,B共
postday#sing#cast#part#add
postday#sing#cast#part#add
と言った形式なのですが、無差別に追記して行くと内容が重複してしまうので
postdayをキーにして、ファイルBの最後の要素のpostdayとファイルA
のpostdayを比較、一致しなければそのままファイルBに追記、
一致する要素が有ればそこまでをpopして、ファイルBに追記したいのです。
バックアップの参考になりそうなスクリプトを見てみたのですが、
アレンジする事が出来ないでいます。
0104名無しさん@お腹いっぱい。
2001/08/02(木) 03:50ID:???単純にバックアップを取るのであれば、File::Copyでも使えばいいかと思いますが。
0105103
2001/08/02(木) 03:58ID:GB8M4TIEレス有難う御座います。掲示板のログのような(実際は少し異なります)
小さなログファイルAを大きなファイルBにバックアップしたいのです。
ファイルAは保存期間や容量が小さい為に効率的にファイルBに保存したい
と考えています。
0106103
2001/08/02(木) 04:06ID:GB8M4TIEファイルBを読み出して最後のエントリの日付"postday"を"$saisyuu"で得る。
ファイルAを読み出す。
$saisyuuとファイルAの"postday"を比較
重複しなければそのままファイルBに追記。
$saisyuuと一致する行がファイルAにあればそこまでを削除して、ファイルBに追記。
これで上手く行かないか挑戦してみます。 有難うございます
0107104
2001/08/02(木) 04:34ID:???一例として。
statでファイル更新時間を取って、異なれば書き込み、とか。
my @file = qw(A B);
if ((stat $file[0])[9] != (stat $file[1])[9]) {
#...
}
0108名無しさん@お腹いっぱい。
2001/08/02(木) 04:38ID:???http://www.megabbs.com/program/index.html
0109>>103
2001/08/02(木) 04:40ID:P5Z/J3iM# A を読み込み
open A,"a";
@aaa=<A>;
close A;
# B を読み込み
open B,"b";
@bbb=<B>;
close B;
# @aaa と @bbb の非共通部分を @ccc へ
for(@bbb){
@ccc=grep(!/$_/,@aaa);
}
# @bbb と @ccc の共通部分を @ddd へ
for(@bbb){
@ddd=grep(/$_/,@ccc);
}
# @aaa と @ddd を書き込み
open C,">a";
print C @aaa , @ddd;
close C;
0110名無しさん@お腹いっぱい。
2001/08/02(木) 14:11ID:RSuVRy4cサブルーチンの中でサブルーチンを実行し、
そのサブルーチンの中でも別のサブルーチンを呼んで…
という風にサブルーチンを入れ子にしていくと内側の階層の深いサブルーチンの
挙動がおかしくなっていくというか、時には動かないなんてことはあるんでしょうか?
ためしにある処理をそのまま書いてちゃんと動いたものを
サブルーチンとして{}で囲んで書いただけでおかしくなりました。
環境はWin+ANHTTPDなのですが、もしやWinPerlだけの症状なのでしょうか?
どなたかご存知の方いらっしゃいましたらお願いします。
0111名無しさん@お腹いっぱい。
2001/08/02(木) 14:17ID:???多分サブルーチンの書き方に問題があると思われ。
0112名無しさん@お腹いっぱい。
2001/08/02(木) 14:17ID:???そのスクリプトを出してくれ。
ありがちなものとしては、同じ名前のサブルーチンが他に存在してるとかかな?
w2k+ANHTTPDだけど、普通に動いてるよ。
0113110
2001/08/02(木) 14:23ID:VO0DTrjQ>>111
各サブルーチン単体では全て期待通りに動作します。
入れ子にしていった場合にのみおかしくなるんです。
>>112
全部出すと相当長いのでちょっとここに出すのは勘弁です。
改めて確認してみたらおかしくなってるところは3重くらいになっているだけでした。
簡略化した形で書けたらあとで貼ります。
ありがとうございます。
0114名無しさん@お腹いっぱい。
2001/08/02(木) 14:28ID:???myのせいでサブルーチンの結果が外に出てないというオチもないよね?
0115110
2001/08/02(木) 14:36ID:VO0DTrjQいや、全部returnで明に結果を返してます。
#そういうことですよね?
0116110
2001/08/02(木) 14:53ID:???関係するサブルーチンは6個ほど、200行くらいになってしまいます。
ここに晒すのはちとためらわれます。。。。
うーむ。。
0117名無しさん@お腹いっぱい。
2001/08/02(木) 15:00ID:???どっかにアップしてURL出せば?
0118名無しさん@お腹いっぱい。
2001/08/02(木) 15:00ID:???推測でしかないが。
引数渡しに失敗している可能性。
0119110
2001/08/02(木) 15:11ID:VCBoAI72例えばですね。
print $hoge;
print &Foo;
これで正常の出力が得られるのですが、これを
&Hoge;
sub Hoge{
print $hoge;
print &Foo;
}
と書くと何も出力されないのです。
こんなのってありなんでしょうか?
&Foo;の中でも複数のサブルーチンを呼んでます。
0120名無しさん@お腹いっぱい。
2001/08/02(木) 15:32ID:???それで挙動がおかしくなるなんて聞いた事無いが。
0121名無しさん@お腹いっぱい。
2001/08/02(木) 16:01ID:IfHUjzJoカタカナの語尾の長音を取るように置換したいのですが
(「コンピューター」→「コンピュータ」)
どのようにしたら良いでしょうか?
0122
2001/08/02(木) 16:02ID:8xHqzTcA0123110
2001/08/02(木) 16:23ID:???だから困っているのでつ。
実は最初の状態でも
内側で呼んでいるサブルーチンの挙動が微妙に変なのだが…
>>122
そうなのかなあ…。
おれ、この間もそれやったんだよな…
そうだとしたらつくづくヴォケ野郎だな、、俺…。
0124名無しさん@お腹いっぱい。
2001/08/02(木) 16:45ID:mjquR9Ogところありますかね。
実際の使用例とか・・・。
PHPとPostgresqlで・・。
0125名無しさん@お腹いっぱい。
2001/08/02(木) 16:57ID:???出来ればサブルーチンを見せて欲しいが。
というかuse strictで引数渡しもちゃんとして書こうよ。
0126ちんちんの長さ12.5cm
2001/08/02(木) 23:08ID:8xHqzTcAuse strict;
my $key;
foreach $key (keys(%ENV)) {
#処理...
}
------
と
---
use strict;
foreach my $key (keys(%ENV)) {
#処理...
}
------
では、体感できない範囲でも速度違いますか?
0127名無しさん@お腹いっぱい。
2001/08/02(木) 23:09ID:SuLp4aV6#!/usr/bin/perl -w
require 'jcode.pl';
$text = "あいうえお";
$code = &jcode::getcode(*text);
print "$code\n";
こういうスクリプトを作って実行すると、以下のようなエラーが出てしまいます。
[madjack@cluster /home/madjack]% ./perltest.pl
Can't locate jcode.pl in @INC (@INC contains:
/usr/lib/perl5/5.00503/ppc-linux /usr/lib/perl5/5.00503
/usr/lib/perl5/site_perl/5.005/ppc-linux
/usr/lib/perl5/site_perl/5.005) at ./perltest.pl line 3.
何がおかしいのでしょうか?
0128名無しさん@お腹いっぱい。
2001/08/02(木) 23:37ID:I9vB6MGkuse strictってどういった使い方をするんですか?
シェルでやってみたら、今まで動いてたスクリプトにエラーチェック(?)
が沢山でてきてしまいました。
125さんの引数渡しって言葉にも混乱してるんです。
すみません、余裕のある方教えて下さい。
0129名無しさん@お腹いっぱい。
2001/08/03(金) 00:14ID:eb2ym/zsしたいですが、何か簡単なスクリプトありませんか?
0130名無しさん@お腹いっぱい。
2001/08/03(金) 00:15ID:eb2ym/zsサブジェクトにWeekly Mag2が入ってるのを削除
0131名無しさん@お腹いっぱい。
2001/08/03(金) 00:44ID:???違うよ。上のほうが速い。
>>127
@INCにjcode.plが無いと言われてる。
エラーメッセージは英語だから読まないというのは止めましょう。
これくらい調べれば読める範囲なので。
で、requireに問題が。
パス無しで指定すると@INCを探しに行くので、
'./jcode.pl'等と実際に置かれている場所を指定しましょう。
0132名無しさん@お腹いっぱい。
2001/08/03(金) 00:48ID:???use strictと宣言することによって、
コンパイル時にレキシカル宣言されていない変数があると、エラーになります。
グローバル変数が使えなくなるというわけで。
引数渡しってのは、&sub_routine($hoge, $fuga);
みたいにサブルーチンに引数を明示的に渡すのです。
これで、サブルーチンには2つの引数しか行かないことになります。
# 日本語的におかしいかもしれないが、ご容赦。
0133128
2001/08/03(金) 01:05ID:ldQ3DQJ.ありがとうございます!
>グローバル変数が使えなくなる
だ・・だからあんなにエラーが出たのか・・・
それでもきちんと動作することがいいスクリプトってことですかね
なんでこんなやっかいなものを皆さんお使いに・・・?
素朴な疑問でした。^ ^;
0134132
2001/08/03(金) 01:37ID:???「自分しかそのスクリプトを見ない」
「どこかでエラーが起こっても、自分はすぐわかる」
「自分は絶対typoしない」
このあたりの条件を兼ね備えているのなら、全部グローバルでもいいのかもね。
私はいつもuse strictしてます。
# ちなみに、my宣言した変数のほうが、グローバルより若干速い。
0135名無しさん@お腹いっぱい。
2001/08/03(金) 01:52ID:???Perl5.6以降ならmy($var)同様の使い方でour($var)が、
それ以前のVersionならuse vars qw/$foo @bar/;とし、
宣言したグローバル変数を使用可能に出来ます。
私も初心者の頃はuse strictなど煩わしいだけ、と思っていましたが、
今では反射的にuse strictを書くようになりました。
慣れるまで色々面倒でしょうが、
黙って使っていると後々幸せになれるはずです。
0137128
2001/08/03(金) 03:04ID:ldQ3DQJ.詳しい説明ありがとうございました!
むぅ。凄く勉強になります。
わたしの持っている本にはこんな事全く書いていなかったので・・
今後少しずつ規模の大きいスクリプトを組んでいくのなら、
今のうちに慣れてきちんと書けるようにした方がいいですよね。
しかし組み方を1から考えなおさなくちゃ難しそうですが(泣)
がんばってみます!
0138名無しさん@お腹いっぱい。
2001/08/03(金) 04:24ID:???丁度良いネタがでたので質問します。
ローカルで
for(my $i=1;$i<100;++$i){
##処理##
}
というプログラムを走らせると$iが0から始まってしまいます。
if文などでも同様です。
サーバにアップロードするときちんと動作するんですが、
やはり使用環境がいけないのでしょうか?
ちなみに
my $i;
for($i=1;$i<100;++$i)
だとローカルでもきちんと1から動いてくれます。
0139名無しさん@お腹いっぱい。
2001/08/03(金) 04:40ID:???for (my $i = 1; $i < 100; ++$i) { print $i,"\n" }
# 1
# 2
# ..
# 99
きちんと出ましたよん。
ちなみに当方ローカル環境、Win2k + Apache1.3.20 + ActivePerl623
0140名無しさん@お腹いっぱい。
2001/08/03(金) 05:22ID:???君の使用環境がわからなくては誰にも判断しようがないと思うが。
ネタですか?
0141うん
2001/08/03(金) 06:21ID:wwW.OFoE0142名無しさん@お腹いっぱい。
2001/08/03(金) 06:28ID:???子供は早く寝なさい(藁
0143103
2001/08/03(金) 07:53ID:aOu/LdE6>>109
レスが遅れてしまいました。お二方のアドバイスが参考になって色々なアプローチ
が有るのが分かりました。
一応、一日格闘した挙句(^^) ファイルAのサイズは比較的小さくファイルBはなるべく
大きなサイズを確保したかったので、perlメモさんで
http://www.din.or.jp/~ohzaki/perl.htm#File_Tail
を頂いて来まして、これでファイルBの最後の一行を得る→
$saisyuuとファイルAのpostdayを比較→一致する行が出現すればそれ以降を破棄
→ファイルBに追記モードで書き込み、と言う感じになりました。
今ローカルでとろとろと動いています(^^)
grepとか回した事が無かったので新鮮でした、色んな考えかたが有るんですね。
ありがとう御座いました。
0144127
2001/08/03(金) 11:50ID:dhEi2JqUありがとうございます。
できました。
0145名無しさん@お腹いっぱい。
2001/08/03(金) 14:24ID:02P8SgLYみ、ブラウザにも表示させるというプログラムを作っています。しかしながらブ
ラウザに表示することはできるのに、それをファイルに書き込むことができませ
ん。スクリプトをどう見直しても分からないので、ここの方に頼ることにしまし
た。
ちなみに『print <<"HERE";』以下を削って実行するとInternal Server Error
となってしまいます。
cgiファイル
#!/usr/bin/perl -w
$file = "log.txt";
read(STDIN, $in, $ENV{'CONTENT_LENGTH'});
open(OUT, ">$file");
print OUT $in;
close OUT;
print <<"HERE";
Content-Type: text/html
<html><body>
$in
</body></html>
HERE
__END__
htmlファイル
<form method="POST" action="cgi-bin/prot3.cgi">
<html><head><title>
テスト
</title></head><body bgcolor="#000000">
<font color="#ffffff">
名前:<input type="text" name="name"><br>
パス: <input type="password" name="pass"><br>
<input type="submit" value="OK"><input type="reset" value="reset">
</font>
</body></html>
■ このスレッドは過去ログ倉庫に格納されています