Perlコーディング初心者質問スレ Part 50
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/06/26(月) 00:46:38ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0588574
2006/07/16(日) 19:11:43ID:pJTY6Rn5>>577
一度別の変数に逃がしておいて、そっちの方で再度逆のパターンで取得する、
という理解で良いんでしょうか。参考にしてみます。
括弧でくくって逃がしておく方法は知らなかったので勉強になりました。
>>578
マッチ変数は1箇所でも使うと他の全ての正規表現にも影響が出るんですね。
今のところ使ってる箇所はないんで、できたら使わない方向で考えてみます。
>>580>>581
速度も気になりますが、「注意して使ってください」の文言に
ちょっとビビってしまいました。でも、他にも正規表現使ってる箇所があるので
できたらマッチ変数使わなくても良いのならそっちの方が良いと思っています。
>>583-584>>586
画に描いたようなツンデレと詳しいベンチマークありがとうございました。
局所的にはマッチ変数よりも$1使った方が処理は速いけれど
他にも正規表現使ってる箇所があれば、結果は逆になるということですね。
コード内で他にもいくつか正規表現使ってるところがあるので
マッチ変数を使わなくてはならない状況になれば$1を代用することにします。
非常に勉強になりました。
>>587
正規表現の置換と言えば即sでやってたので
trに特有の便利な修飾子があるのを見落としていました。
ずばりの解答も含めてありがとうございました。
レスくださった皆さん、ありがとうございました。
最近あちこちで落雷が発生しているみたいなのでパソコンの方もご自愛下さい。
0589nobodyさん
2006/07/16(日) 19:42:51ID:???by KENT信者
0590nobodyさん
2006/07/16(日) 19:44:18ID:???0591nobodyさん
2006/07/16(日) 22:04:02ID:???たとえば ^\d$ と入力すると
0
1
2
3
4
5
6
7
8
9
と展開するみたいな
0592nobodyさん
2006/07/16(日) 22:16:57ID:???0593nobodyさん
2006/07/16(日) 22:32:38ID:???正規表現の展開?
0594591
2006/07/16(日) 22:41:09ID:???展開して表示する方法があるのかどうかです
^\d$なら>>591の通り0〜9まで展開
^[Aa]$ならAとaの2つ展開
という意味です
0595nobodyさん
2006/07/16(日) 22:52:27ID:???できないってことでいいよ。
0596nobodyさん
2006/07/16(日) 22:56:17ID:???0597nobodyさん
2006/07/16(日) 22:56:40ID:???>>592のいう通りじゃない?
簡単な正規表現だったら、頭の中で想像つくし、
複雑なものだったら、展開後の文字が何万行にも
わたってしまうから...
単純な例だと「/./」。
これの展開は 1byte で表されるものすべてだから、
多byte文字とか考えたらガクガクブルブルw
0599nobodyさん
2006/07/16(日) 23:01:02ID:???my @c = grep { $_ = chr($_); /$p/ } (0..0xFF);
0600nobodyさん
2006/07/16(日) 23:34:52ID:???そしてサーバ上にあらかじめ用意してあるファイルBにその結果を書き出す、
ということをやりたいんですが、そういうことは可能でしょうか?
0602600
2006/07/16(日) 23:42:33ID:???なるほど。とすると簡単な流れとしては
csvファイルAをサーバにアップロード
→オープンして処理
→ファイルBに書き込む
→ファイルA削除
という解釈で大丈夫でしょうか?
0603nobodyさん
2006/07/16(日) 23:48:10ID:???0607nobodyさん
2006/07/17(月) 00:25:28ID:???search.cpan.org にいって
NET::FTP とか NET::SSH::PERL とか
そっちがわ系のモジュールを検討してみたら?
0609600
2006/07/17(月) 00:46:22ID:???ファイルAをアップロード→オープン
のところで、おそらくアップロードが完了する前に
オープンをかけてしまいエラーが出てしまいます。
アップロードとファイルBへの書き込み処理は
別々にしないと無理ですかね・・・。
>>603
喜び勇んで早速書き始めてたらいきなり否定されてたとは・・・
>>605
grepを使うにしても、まずはサーバ上にファイルAを上げないとダメですよね?
>>606
そういうモジュールがあるんですか。
調べてみます。
0612nobodyさん
2006/07/17(月) 01:06:13ID:???0613nobodyさん
2006/07/17(月) 01:06:32ID:???パターンなんて無限大にあるしなあ。
/.../ これだけ展開するので 255*255*255 だろw
もっと条件言うか何がしたいか言うかしないと 「無理」 って感じ。
0615nobodyさん
NGNG観自在菩薩行深般若波羅蜜多時照見五
蘊皆空度一切苦厄舎利子色不異空空不
異色色即是空空即是色受想行識亦復如
是舎利子是諸法空相不生不滅不垢不浄
不増不減是故空中無色無受想行識無眼
耳鼻舌身意無色聲香味觸法無眼界乃至
無意識界無無明亦無無明尽乃至無老死
亦無老死尽無苦集滅道無智亦無得以無
所得故菩提薩垂依般若波羅蜜多故心無
罫礙無罫礙故無有恐怖遠離一切顛倒夢
想究竟涅槃三世諸仏依般若波羅蜜多故
得阿耨多羅三藐三菩提故知般若波羅蜜
多是大神咒是大明咒是無上咒是無等等
咒能除一切苦真実不虚故説般若波羅蜜
多咒即説咒曰
羯諦羯諦波羅羯諦波羅僧羯諦菩提薩婆訶
般若心経
仏説摩訶般若波羅蜜多心経観自在菩薩行深般若波羅蜜多時照見五蘊皆空度一
切苦厄舎利子色不異空空不異色色即是空空即是色受想行識亦復如是舎利子是
諸法空相不生不滅不垢不浄不増不減是故空中無色無受想行識無眼耳鼻舌身意
無色声香味触法無眼界乃至無意識界無無明亦無無明尽乃至無老死亦無老死尽
無苦集滅道無智亦無得以無所得故菩提薩捶依般若波羅蜜多故心無罫礙無罫礙
故無有恐怖遠離一切顛倒夢想究竟涅槃三世諸仏依般若波羅蜜多故得阿耨多羅
三貌三菩提故知般若波羅蜜多是大神呪是大明呪是無上呪是無等等呪能除一切
苦真実不虚故説般若波羅蜜多呪即説呪曰羯諦羯諦波羅羯諦波羅僧羯諦菩提薩
婆訶般若心経
0616607
2006/07/17(月) 01:10:00ID:???適当にぐぐっただけなので、中身は知らんよ。
ただ、ftp, ssh 系のモジュールは、cpan に結構ある
から、その中に役立つものはあるかも。
0617nobodyさん
2006/07/17(月) 01:11:22ID:???昔ム板のPerlスレで似たようなお題が出たのを思い出した。
Perlについての質問箱 21箱目
ttp://pc8.2ch.net/test/read.cgi/tech/1134327348/478-
ミラー
ttp://makimo.to/2ch/pc8_tech/1134/1134327348.html#478
で、こんなのが紹介されている。
ttp://search.cpan.org/~bowmanbs/Regexp-Genex-0.06/lib/Regexp/Genex.pm
読んで試してみたらどうも\d等の文字クラスが含まれていると、
ランダムにしか出てこないみたいだけど参考まで。
0618600
2006/07/17(月) 01:21:32ID:???FTPと似たようなことができるみたいなので
よく分からない状態で用いるのは、
セキュリティ上危険な気がしました。
ご忠告ありがとうございました。
0619nobodyさん
2006/07/17(月) 05:25:24ID:AcPhLonl0620nobodyさん
2006/07/17(月) 06:08:57ID:???0621nobodyさん
2006/07/17(月) 07:11:29ID:???mod_perlでも動かすのかな?
それより、local宣言だらけを心配した方がいいよ。
逆に、my宣言が全然ないとか。
0623nobodyさん
2006/07/17(月) 11:23:26ID:???> FTPと似たようなことができるみたいなので
> よく分からない状態で用いるのは、
> セキュリティ上危険な気がしました。
「FTPと似たようなこと」をやろうとしてるんじゃなかったのか。
にほんごってむずかしーね。
0624nobodyさん
2006/07/17(月) 12:15:35ID:???いう事に思い至らなかっただけでしょ。
0626nobodyさん
2006/07/17(月) 16:03:52ID:???http?
0627nobodyさん
2006/07/17(月) 16:31:38ID:???1.8014398509482e+016
ってなるけど実数表示させるにはどうすりゃいいのん?
0631nobodyさん
2006/07/17(月) 17:13:50ID:???perldoc bigint を見れば分かるけど、
> "bigint" is just a thin wrapper around various modules of the Math::BigInt family.
0633nobodyさん
2006/07/17(月) 22:53:09ID:???0634nobodyさん
2006/07/17(月) 22:57:20ID:???消防はもう寝な
0638nobodyさん
2006/07/17(月) 23:21:32ID:???0640nobodyさん
2006/07/17(月) 23:43:04ID:???18014398509481984
こうですか? わかりません><
0641nobodyさん
2006/07/17(月) 23:45:16ID:???0642nobodyさん
2006/07/18(火) 00:11:32ID:???user@localhost:~$ perl -Mbigint -e 'print 64**9, "\n"'
18014398509481984
user@localhost:~$ perl -v | grep v5
This is perl, v5.8.8 built for i486-linux-gnu-thread-multi
0643nobodyさん
2006/07/18(火) 00:24:40ID:DXYFSpfLこのような表記は許されるのでしょうか?
1)$TEST[100]に代入されている文字列を表示させたい
2)$TEST[***]<-ここに$A[1]を入れたい
$A[1]=100;
$TEST[100]='TEST';
print $TEST[ $A[1] ];
やはり・・・
$A[1]=100;
$TEST[100]='TEST';
$B=$A[1];
print $TEST[$B];
なのかなあ
0645643
2006/07/18(火) 00:46:23ID:DXYFSpfLソース記述が途中で間違っていたのかも知れなかったです。
この表記がまちがっていると思い込んで2時間位悩んでいましたm(_ _)m
0646nobodyさん
2006/07/18(火) 00:52:26ID:???0647nobodyさん
2006/07/18(火) 01:00:06ID:???0648nobodyさん
2006/07/18(火) 02:34:41ID:???5.8.4 だけど、use bigint で 18014398509481984 って結果でたよ
>643
大文字は定数で使われるのがほとんどなので、変数は小文字でどぞ。
0649nobodyさん
2006/07/18(火) 03:41:25ID:???1.(2/3)*(2/3) の解を 4/9 にするにはどうすればいいですか?
2.次に1.の解を 1/2.25 (分子を1)にするにはどうすればよいですか?
0650nobodyさん
2006/07/18(火) 03:50:18ID:RAKThs0C$ENV{'HTTP_COOKIE'}で何も取得できません!
作成直後ではなくて、ブラウザでリクエストを再送しても取得できません。
どんな原因が考えられましょうか!
0651nobodyさん
2006/07/18(火) 04:54:13ID:???>>628と同様に、bigrat or Math::BigRatでどうよ。
2はライブラリ任せにしないで、算数的に出力時にdenominatorをnumeratorで割れば?
0652nobodyさん
2006/07/18(火) 05:24:58ID:???use bigrat;
$a = (2/3)*(7/57);
print $a,"\n";
printf( "1/%f",1/$a);
%fのところはうまくいじらないと思い通りの出力にならないかも?
つーか7/8を1/xと表示したいときxは何になってほしいのか・・・?
0653nobodyさん
2006/07/18(火) 05:35:52ID:???$ENV{'HTTP_COOKIE'}で何も取得できなくて、
いったい何で”保存されてるのを確認した”のか、教えてください。
パッと思いつく原因としてはクッキーを出してるスクリプト
と受け取ってるスクリプトがあるディレクトリが別になってるとか?
どうやってクッキーを発行して、どうやって受け取ろうとしてるのか、
もっと詳細に報告してください。
0654650
2006/07/18(火) 09:21:50ID:???スクリプトはいっしょで、読み書きするスクリプトをリロードして確認したり、
読みと書きでパラメータを分けて行き来したりしています。
Set-Cookie: session=test;expires=;\n
と書いてます。index.cgi?a=1で書いてindex.cgi?a=2で読んでいます。
宜しくお願いします!
0655nobodyさん
2006/07/18(火) 09:28:15ID:???現在作ってるスクリプトで設定内容などは
$config = {
'test' => "テスト"
}
sub get{
my $pkg = shift;
my $hash = $config;
bless $config, $pkg;
}
my($cfg) = config->get();
print $cfg->{test};
この用にして設定内容を取得してます。
そして今回、$config の中に配列へのリファレンスを含めるようになり
@urls = (ずらずら〜っと);
と URL が書かれた配列へのリファレンスを
$config = {
'urls' => \@urls,
}
として $config へ設定しました。
この際に $cfg で値を取得する書き方としては
@{$cfg->{'urls'}}
で正解なのでしょうか?
もっときれいな書き方や 「こっちのほうが解釈としては正解じゃね?」 みたいな
書き方があれば教えていただければ幸いです。
0657nobodyさん
2006/07/18(火) 10:19:23ID:???0658nobodyさん
2006/07/18(火) 10:26:39ID:???perlのoopの使い方がどうみてもむちゃくちゃなので勉強しなおしてください。
変な癖をつけると後で苦労するよ。
0659nobodyさん
2006/07/18(火) 10:32:26ID:???OOPをやりたいなら
package Config;
sub get{
my $pkg = shift;
my $hash = shift;
bless $hash, $pkg;
}
.....(いろんなメソッド)
package main;
my $cfg = Config->get({'urls'=>\@urls})
そのままだと、sub getが意味ない
>>658
perl oopのいい入門て見たことない希ガス・・・
0660nobodyさん
2006/07/18(火) 10:35:44ID:???この書きかたでいこうかと思います
>657
以前このスレだかどこかで KENT の様に設定用変数を数多く
用意するのは綺麗じゃないみたいなことがあったときに、
私が
config.pl
%config=('test'=>2);
sub getconfig{return %config;}
my %config=&getconfig();
ってやってるって書いたら効率悪いって言われたもんで、
ちょっと書き直してたらこうなった次第です。
0661nobodyさん
2006/07/18(火) 10:35:45ID:???0662nobodyさん
2006/07/18(火) 10:43:45ID:???関数コールするよりもオーバーヘッドは少ないかなって思ったので。
数回から数十回のコールでオーバーヘッドを気にするのは無駄
とは分かってはいたんですがやっぱりスマートな書きかたではなかったですか(-_-;
0663nobodyさん
2006/07/18(火) 10:46:41ID:???0664nobodyさん
2006/07/18(火) 10:52:28ID:???print "content-type: text/html\n";
print "Set-Cookie: session=test\n";
print "\n";
print $ENV{HTTP_COOKIE};
とりあえずうちの環境だと、これを2回読み込むと画面にsession=test
と出るので、それでだめだったら環境がおかしい
0665nobodyさん
2006/07/18(火) 12:38:15ID:???Set-cookie:〜\nContent-type:〜\n\nってなってたのをクッキーとContent-typeの順番を入れ替えただけで
行けたっぽいです。書き込み時がおかしかったようです。
ネットで順番はどっちでもいいようなことを見たし、実際クッキーらしきものが書かれていたのでこれでいいのかと
思ってました。ざっと試しただけですが、これから詳しいことを検証したいと思います。
あと、バグ入りクッキーは本当にクライアント環境によって挙動が違いました。(会社では場合によって読めた)
0666nobodyさん
2006/07/18(火) 13:25:28ID:???となっていたに1票
0667nobodyさん
2006/07/18(火) 14:04:40ID:???ていうか、ただのハッシュとして使うだけなら
なんでオブジェクトにするのか全く不明。
それなら単純にハッシュを宣言して、読み込むだけの方が良い。
0669nobodyさん
2006/07/18(火) 14:43:02ID:???それでも、やはり順序不問ってことは、どっかでケアレスミスしたかもしれません。今夜再検証してみます。
0670nobodyさん
2006/07/18(火) 15:15:34ID:???外部ファイルにhashで設定を書いてrequireすると、
同じ内容の変数が2つ存在することになって無駄があるので
オブジェクトにした次第です。
0671nobodyさん
2006/07/18(火) 15:24:45ID:???その考え方が間違ってる。そんなことでオブジェクトにしちゃいけない。
だったらまだ、>>660 にある最初の書き方の方が、考えがマトモ。
同じ内容の変数が2つになるのが嫌なら、
外部ファイルの変数を別のハッシュに代入せずに、そのまま使えば良いだけの事。
0672nobodyさん
2006/07/18(火) 15:28:41ID:???書くにはどうしたら良いんでしょうか?
単純に
if($data !=~ /MOJI/)
という書き方では反映されないみたいなんですが。
0673nobodyさん
2006/07/18(火) 15:31:12ID:???0674nobodyさん
2006/07/18(火) 15:31:47ID:S5V5gxsh「○○かつ△△」を文字列で扱う方法はやはりないのでしょうか?
$type1 = 'BAKA';
$type2 = 'KASU';
if ( $type1 eq 'BAKA' and $type2 eq 'KASU')
みたいにするには数値をそれぞれ代入してからやるべきなのでしょうか?
0676nobodyさん
2006/07/18(火) 15:38:45ID:???0677672
2006/07/18(火) 15:39:57ID:???if($data =!~ /MOJI/)
と書いてみましたがエラーが出て動かないです。
どこが間違っているんでしょうか?
>>674
単純に
if ( ( $type1 eq 'BAKA' ) && ( $type2 eq 'KASU' ) )
で良いじゃないでしょうか。
0678nobodyさん
2006/07/18(火) 15:42:18ID:???0680nobodyさん
2006/07/18(火) 15:47:11ID:S5V5gxsh数値比較では && や and を使えますが
文字列でも同じように && や and を使っていいのかどうかということです
0681nobodyさん
2006/07/18(火) 15:47:29ID:???最近の質問見てるとネットだけで独学の人が多いような気がする。
0684nobodyさん
2006/07/18(火) 16:01:37ID:???0685nobodyさん
2006/07/18(火) 17:42:03ID:???その都度デリファレンスするのって、見た目が余り綺麗じゃないからその案は
以前考えてるときに却下しました。
0686nobodyさん
2006/07/18(火) 17:51:43ID:???誰がデリファレンスしろと…。
>>675 が言ってるのは、
外部ファイルで %config を定義して、return ¥%config; でリファレンスを返せば
同じハッシュが2つにならないということでしょう。
使う時は $cfg->{'hoge'} みたいなので良いんだし。デリファレンス要らない。
0687nobodyさん
2006/07/18(火) 18:24:24ID:???「とりあえず外部PL(PM)ファイルに設定をずらずらして require」 じゃなくて、
普通の(TXT)ファイルとかにCSVとかTSVみたいな感じで設定を書いて、
my $cfg1 = Config->new('config1.txt');
my $cfg2 = Config->new('config2.txt');
みたいな感じで設定取ってくるもんじゃないの?
>>655みたいに値を得たいときは my @url = $cfg1->get('url'); とかしてさ。
そうじゃないならOOPの意味もないな、って思うんだけどw
■ このスレッドは過去ログ倉庫に格納されています