【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を見よう。
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:???あ〜〜〜〜、デッドロックがなにか悪いことだと思ってるのね。
意図しないでデッドロックに陥るのはもちろん問題だけど、
テストとして意図的にデッドロックさせるのは、問題ないよ。
プロセス止めれば、解除されるので安心したまい。
0657nobodyさん
02/03/18 02:42ID:3JM+vmYu調べられますか?
もちろん対象ディレクトリ以下にディレクトリが複数あっても
底の底まで調べる・・・ど?
0658nobodyさん
02/03/18 03:29ID:???できるよ。
ファイルサイズ取得とディレクトリ内ファイル一覧取得を組み合わせるとか,
適当なモジュール使うとか,他のプログラム使うとかで。
0659nobodyさん
02/03/18 03:30ID:???データを全部配列に入れてからforeachで回して、
4桁の数字を見つけたらその部分をsubstrで取り出す・・と考えているのですが
4桁の数字を見つける処理に手間取っています。
正規表現を上手く使って^(\d{4})$とやろうかなと思っているものの、どう使ったものか・・。
スマートな方法は何か無いものでしょうか。
0660nobodyさん
02/03/18 04:00ID:???m//や//は,リストコンテキストで評価すると()内のリストを返すので,
それを利用するとこんな感じ。
while (<DATA>) {
my @tmp = /(\d{4})/g;
push @ary,@tmp;
}
print "@ary";
__DATA__
asdf1234as
d45ad6f54a32451234
af9842s
0661nobodyさん
02/03/18 11:37ID:34CtYnSpPerl4ですけど、
@DATA[ $FORM{'ressno'} ]の値を$oldDATAに代入したいんですが
つぎのコードは文法上間違ってますか?
$oldDATA = @DATA[ $FORM{'ressno'} ];
printしてみると@DATA[ $FORM{'ressno'} ]には文字列が入ってるんですが
$oldDATAは空っぽなんです。
本を見るとよさそうに見えるんですが・・・
ココで作業が止まっちゃってるんです。
おしえていただければありがたいのですが。
0662nobodyさん
02/03/18 11:43ID:???()なんて必要ないケド...
ループ内でのmy宣言はしないほうがよいのでは?
あと、その正規表現では5桁以上にもマッチしてしまうのでは?
my @array= map{ (/(\D|\b)(\d{4})(\D|\b)/g)[$[+1] } <DATA>;
print "@array\n";
__DATA__
asdf1234as
d45ad6f54a32451234
af9842s
0665nobodyさん
02/03/18 12:09ID:???0666615
02/03/18 12:35ID:???変数名が間違ってないかもう一度確かめて。
>662
なるほど。
ループ内でmy()はしないほうがいいのか。
ループの前に宣言するか,ループの後でundefするほうがいいのね。
0667たろう
02/03/18 12:37ID:eHMudoVKクッキーをセットして取得することってできます・・・?
無理かなあ。
それかクッキーがオンかオフが判定できる方法ってありますかねえ。
0668nobodyさん
02/03/18 12:46ID:???代入のタイミングが間違ってないか確認するべきかと。
printで文字列が出るという事は、@DATA[ $FORM{'ressno'} ]には文字列が入っているんだろう。
変数名の間違いという事もないと思われる。
しかし、
$oldDATA = @DATA[ $FORM{'ressno'} ];
この書き方では、@DATA[ $FORM{'ressno'} ]を変数でなく配列として認識してしまう為、その要素でなく要素数が返される。
だから>663の書き方のほうが正しい。
しかし、間違いの書き方でも、要素数の1が$oldDATAに入らないのはおかしい。
だとしたら考えられるのは変数の代入タイミングが間違っているか、変数のスコープの範囲外で判定しようとしてるかどっちかじゃないかと思われる。
0669nobodyさん
02/03/18 13:00ID:???その価値のないソースを見せてみRO!
0670663
02/03/18 13:18ID:???なら、@と$の間違いじゃない(配列に何か入ってる)ということで、
$oldDATA = join(undef,@DATA[ $FORM{'ressno'} ]);
とか。
0671nobodyさん
02/03/18 13:23ID:???663をやってダメなのにオマエはアフォか?
0672661
02/03/18 13:37ID:???ありがとうございます。その通りでした。
変数のスコープの範囲外です。
勉強不足で申し訳有りません。
他の皆さんも、ありがとうございました。
0673nobodyさん
02/03/18 14:36ID:HCOk+r4Yどうぞよろしくお願いします。
use関数についてなのですが、よく
use lib '/mylib';
というのを目にしますが、これの第二引数'/mylib/';の意味がわかりません。
ご教授いただけないでしょうか?
それともう一つ
use I18N::Japanese;
の”::”の意味は一体なんなのでしょうか?さっぱり意味不明です。
それでは失礼します。
0674nobodyさん
02/03/18 14:38ID:HCOk+r4Y補足させていただきます。
"::"がパッケージ変数へのアクセスに使われるというのは知っているのですが
use関数で使われる事の意味がわからないのです。
0675nobodyさん
02/03/18 14:48ID:???モジュールを読み込むディレクトリに'/mylib'を追加しまっせ!
'::'はディレクトリ構造を表します
I18N/Japanese.pm
0677673
02/03/18 15:27ID:HCOk+r4Yお答えありがとうございます!
"::"の意味がよくわかりました。一ヶ月くらい悩んでただけに感動ですw
'/mylib'は、つまりlibモジュールだけの特別な引数であるという
解釈でよろしいのでしょうか?
0679675
02/03/18 16:06ID:???useの後ろに付くlibはプラグマってやつね。
プラグマはperlの動作を変えるわけ。strictとかutf8とかあるから
自分で調べてみなさい。(プラグマは慣用的に小文字を使う。)
use lib LIST;は
BEGIN { unshift(@INC, LIST) }と同じね。
@INCにはモジュールなどを探すディレクトリが入ってるわけです。
0680673
02/03/18 16:41ID:BUM18lm5はい。わかりました。ただ「駱駝本」が読めないのが難点ですがw
今度書泉で探してみますね。
>>679
よーーーーーーーーーーくわかりました!プラグマですか。正直そんな
単語は聞いた事も無かったですね。どうもありがとうございました。
0681nobodyさん
02/03/18 16:45ID:???0683nobodyさん
02/03/18 17:31ID:kNBmdvNL煮詰まってしまったので教えて下さい。
受け取るデータ(文字列:長さ制限なし)が1000文字以上だった場合、
文頭、文末それぞれ1文字を削除した状態に加工後、
REMOTE_ADDR,domain,加工後の文字列,文字列を受け取った時間
というようにCSV形式に成形して↑これをファイルに書込んでいます。
文字コードはEUC-JPで、文字列の加工にはsubstrを使っています。
文字列の加工まではうまくいくのですが、ファイルに書込まれたデータを
見ると、文字列の最後と時間の前のカンマが全角ひらがなとして1文字に
なってしまいます。
この文字化けを解消する方法ありませんでしょうか?
ファイルに書込んだ後比較用データとして、後でまた呼び出し
カンマでsplitをかけると、ちゃんと時間と文字列に分割されては
いるようなんですが・・・・
0684nobodyさん
02/03/18 17:46ID:???EUCなら簡単に出来ますが、1文字削除する行為が意味不明なので
教えてあげない。
ってゆうか、Perlメモ見れば分かるよね。
0685683
02/03/18 17:48ID:???もう一回逝ってきます。
1文字削除は私にも…上からの命令なのです。
0686683
02/03/18 17:52ID:???ありがとうございました。
見つかりました!
あ、即レスも感謝です。
perlメモ今見てきたらありました。
煮詰まってるとだめですね。。。
0687nobodyさん
02/03/18 19:23ID:???常に親クラスのを呼び出すことって出来ますか?
つまり、$obj->method とあった時に、
$objが子クラスのオブジェクトでmethodが子クラスにあった時でも
親クラスのmethodを呼び出すような物です。
それをSUPER::とかじゃなくて、クラス側(モジュール側?)で書きたいのです。
可能であれば、是非方法を御教授下さい。
宜しくお願い致します。
0689nobodyさん
02/03/18 20:43ID:???それともあれか、"virtualではない"メソッドを定義したいってか?
0690687
02/03/18 22:53ID:???まぁ無理ならいいです。すいませんでした。
0692nobodyさん
02/03/19 01:20ID:???CSVデータをうまく分割するコードがあれば是非教えてください。
Perlメモにあるやり方は知っていますが、ほかにもっとうまいやり方が
ありそうでなかなか思い浮かばないので途方に暮れています。
できればワンライナーかシュウォーツ変換のうまいコードがあればありがたいです。
0694nobodyさん
02/03/19 02:44ID:???>できればワンライナーかシュウォーツ変換のうまいコードがあれば
ってことですが...
0695nobodyさん
02/03/19 03:16ID:???1行で書いても何も得にならないよ。
そんなことで悩んでないでPerlメモにあるやつを、自分の使いやすいように
アレンジするか、適当なモジュールを導入した方がいいと思う。
但し、格納するデータが汎用でなくカンマやダブルクウォートを含まないのなら
特に加工が必要ないので簡単になるけどね。
バイナリを格納しないのなら、区切りを制御文字に・・・(CSVにならない)
で、結局君はどんな目的で「ワンライナーかシュウォーツ変換のうまいコード」
が必要なわけ?
0696nobodyさん
02/03/19 03:37ID:???すぐに使うわけではなかったのでべつにできないならできないでいいけど、
たったいまこちらである程度いいものができたのでテストを繰り返して
いるところです。
ただ、わたしのライブラリを増やしたかっただけ(自己満足)なのでこれで
5パターンになりつつあります。(テスト結果でバグがなければ)
ただ、Perlメモにあるのはなんか好きになれないというだけのことです。
いま書いたのは、ワンライナーで2次元配列にセットするものでなんとなく
気に入っています。
ということで、この質問は自己解決のためもう忘れてください。
0697nobodyさん
02/03/19 09:43ID:???0698nobodyさん
02/03/19 17:20ID:FUNiZ5qx皆してる?
流行のソースの記述きぼーん
メタキャラクタの場合、比較がうまくいかないのですが、こういうものなのでしょうか?
たとえば下記のような二つの文字列を代入した変数があります。
$ORIG="hello";
$TARGET="$$";
これを比較した場合、等しくなってほしくないのですが、eq で比較すると
等しいという結果になってしまいます。
↓こんな感じ。
if ($ORIG eq $TARGET) {
# この中に入ってしまう
} else {
#本当はこっちに来てほしい
}
変数にメタキャラクタが入っている場合、どのように比較すればいいのでしょうか?
あるいは、変数の最初の文字にメタキャラクタが入っている場合、
うまく比較できないのは perl の仕様なのでしょうか?
0703nobodyさん
02/03/19 23:07ID:???$TARGET = '$$'; # シングルクオートで囲ってあるの。
で大丈夫だよー。
0704nobodyさん
02/03/19 23:13ID:???0705nobodyさん
02/03/19 23:44ID:???Perlを勉強したいと思い、perlの本を買いました。
(すぐわかるPerl、CGI&Perlポケットリファレンス)
とりあえず、最初どうしたらよいのでしょうか?
プログラミングを参考書に習って書いていくにしても
どういう風に進めたらいいか分からなくて...
0708nobodyさん
02/03/19 23:50ID:???それでも等しくなるのはおかしい。
>>702
> うまく比較できないのは perl の仕様なのでしょうか?
なわけねぇだろ。
100%お前のミスだよ。
ifの前に print("$a $b\n") で変数の値を出力してみろ。
0710702
02/03/20 00:12ID:???レスありがとうございます。
すみません、ちょっと私の書き方がまずかったです。
perl においてシングルクォートでくくると、変数を展開しない、エスケープが使えないというのは承知しているのですが、
今回のケースは、正確には下記のようなケースなのです。
前提:
1.テキストファイルにデータが書かれている
2.テキストファイルには、1行に複数の項目が書かれており、デリミタでくくられている
処理:
1.テキストファイルから1行読み込む
2.splitで分割する(分割した文字列が $TARGET に入る)
3.その文字列を eq で比較する
という感じなので、$TARGET には、普通の ascii 文字列が入ってくるかもしれないし、
$ とか ? で始まる文字列が入ってくるかもしれないのです。
↓コード例==============
$ORIG="hello";
open(DATA, "ファイル名")
while(<DATA>){
@hoge = split(/,/, $_);
$TARGET= @hoge[0];
if ($ORIG eq $TARGET) {
# $TARGET の中身の先頭文字が $ などの場合は
# この中に入ってしまう
}
:
==============
さぁどうしようかという感じなのですが....
どこかに、「eq では、先頭にメタキャラクタが入っていると比較できない(perlの仕様)」
見たいなことが明文化されていると、ある意味幸せなんだけど...
みなさんこういうときどうされてますか?
0711nobodyさん
02/03/20 00:14ID:???そうすれば大体わかる。
っつーか全ソース晒せ。
0712nobodyさん
02/03/20 00:15ID:???709は読んだか?
大体メタキャラクタってなんだよ。"正規表現の"メタキャラクタならまだ解らんでもないが。
脳内定義は止めてくれ。
0714
02/03/20 00:22ID:fhi6exvTこういうことになるのかぁ
0715
02/03/20 00:23ID:fhi6exvThttp://DQN
http://DQN.jp
これではどうかな
0716
02/03/20 00:24ID:fhi6exvTではこれでは
>>DQN
0717
02/03/20 00:25ID:fhi6exvThttp://は半角文字じゃないとだめなのね
_φ( ̄ー ̄ )メモメモ
0718nobodyさん
02/03/20 00:26ID:???消えろ
0719
02/03/20 00:27ID:fhi6exvT>>5どきゅん
http://DQNんだ
0720
02/03/20 00:28ID:fhi6exvT>>718
0721nobodyさん
02/03/20 00:29ID:???たかが2ちゃんねるでもな、おもしれぇところで下らん事やると、
そこは面白くない場所になって寂れるんだよ。
下の方にいくらでも廃墟のスレッドがあるだろ?
そこで、sageでこっそりやるのがテストってモンなんだよ。
0722ネタ?ニマジレス
02/03/20 00:29ID:???> どこかに、「eq では、先頭にメタキャラクタが入っていると比較できない(perlの仕様)」
> 見たいなことが明文化されていると、ある意味幸せなんだけど...
僕は不幸だと思います。
■ このスレッドは過去ログ倉庫に格納されています