Perlについての質問箱 3箱目
■ このスレッドは過去ログ倉庫に格納されています
0001Mr. Moonlight
NGNGPerlについての質問箱です
"There's more than one way to do it"ということで
Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
0153デフォルトの名無しさん
NGNGppm2 install HHTP-Lite
詳しくはactiveperl 5.8.0 Build804 をインストールした
ディレクトリのhtml/index.htmlを開き、ActivePerl FAQの
Using PPMを読め。
英語がわからんなどと泣き言はいうなよ。
0154デフォルトの名無しさん
NGNGs/HHTP/HTTP/
0155デフォルトの名無しさん
NGNG0156麻雀大好き
NGNG0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNGネットワーク対戦プログラムならコードが小さく収まるし
他にも応用がきくと思うんだが。
0159148
NGNG助言ありがとうございました。
ppmコマンドプロンプトで
ppm> install Lite.pm
って打ってたので出来ませんでした。正しくは
ppm> install HTTP-Lite
ヘルプ読んだら一発…。お恥ずかしい限りです。
0160デフォルトの名無しさん
NGNG暗号を復号時にうまく変換ができません。
どうも変数に入っているバイナリデータ(\0を含む)の
受け渡しがうまくいってないようなのです。
サブルーチンへバイナリデータを受け渡すいい方法って
ないでしょうか?
# それともどうしようもないのかねぇ・・・
0161デフォルトの名無しさん
NGNG画面に表示される方を変数に入れたいのですが・・・
0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNGここでボヤクより、駄目な場合をテストスクリプトにして
MCryptの作者に直接メールした方が早いんではないかい?
0164デフォルトの名無しさん
NGNG$name = qx( hostname );
0165160
NGNGうーむ。やはりそうですね。
メールしてみまッス
0166デフォルトの名無しさん
NGNG変数でgrepするスクリプトを書いてみましたがうまくいきません。
どうすればいいでしょうか?
0167デフォルトの名無しさん
NGNGどう書いてどう動かないのか。
やる気はございますでしょうか?
0168166
NGNG>>167さま
@logにログを入れた後
$a=<>;
@output = grep /$a/,@log;
と言うような感じで@outputに出力しようと考えていました
0169デフォルトの名無しさん
NGNG別段問題ない気がするんだけどな。……あー。
chomp $a;っていれたらいいんでないかしらん。
0170デフォルトの名無しさん
NGNGそれイイ!! 禿しくワラタ。
>>168
>>169のとおりですが、パターンの中が変数じゃないと困るけど、1回代入したら変更なし、という
時は、後ろに /pattern/o とつけてやると少し速くなりますYO。
0171山崎渉
NGNG0172デフォルトの名無しさん
NGNGprint $res->content;
とやると、何故か改行一つが改行二つになってしまいます。
なんで?
0173デフォルトの名無しさん
NGNGOSの名前くらい書け。
MS-WindowsならLF->CRLFになるからCRLF->CRCRLFになる。
0174デフォルトの名無しさん
NGNGfor ( @ARGV ){
if( $_ =~ m/-test/ ){
print "TEST MODE\n";
}
}
これよりもスマートに行けるかな?
0175デフォルトの名無しさん
NGNGuse Getopt::Long;
0176デフォルトの名無しさん
NGNGどうしたらいいですか?
読みにいったページ内のアンカータグとイメージタグのURLを
絶対パスに変換して保存させたいんです。
(URLを抽出するなら変換するメソッドもURL::URIあたりに
用意されてるみたいなんですが。)
0177デフォルトの名無しさん
NGNG$r->base
0178デフォルトの名無しさん
NGNGHTTP::Response#base
0179デフォルトの名無しさん
NGNGどのモジュール使えばいいのでしょうか?
0180デフォルトの名無しさん
NGNGWin32::EventLog
ファイルを監視出来るのかは知らない。
Win32モジュールはWindowsでしか動作しない。
0181デフォルトの名無しさん
NGNG勝手に展開しちゃう件はガイシュツでつか?
かなり糞な不具合だと思うんだけど。
0182デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNG分かり難くてスマソ。環境変数「Path」が、元々は、
「%SystemRoot%\system32;%SystemRoot%;・・・」
と環境変数を使って値が設定されているのに、ActivePerlのインストーラが
Perlのパスを追加するときに、既存の値の中の環境変数を展開しちゃって、
「X:\Perl\bin\;C:\WINNT\system32;C:\WINNT;・・・」
と設定しちゃう。
build62xの頃のインストーラは問題無かったハズだけど、何故にあとから
こんなバグ組み込んじゃったんだろ。
0184デフォルトの名無しさん
NGNGインストールの中では、環境変数とかPathの設定をさせないようにして
後で自分の趣味に合わせて勝手に設定したらどうよ。
俺はいつもそうしてる。
0185デフォルトの名無しさん
NGNG>馬具とはいえんだろ。仕様の変更か、お宅がOSを変更したかだな。
OS変更してません。Win2000で再現可能です。
もし仕様変更としても、こんなアホな仕様にする必要性が理解できません。
つーか単純に、環境変数展開の考慮漏れでしょ。
>インストールの中では、環境変数とかPathの設定をさせないようにして
>後で自分の趣味に合わせて勝手に設定したらどうよ。
そりゃーこの現象に気が付いていれば、インストール後に直してやるなり対応は
可能だけど、気が付かない人はまずいでしょ。
ちなみに>>184は、これまでにこの現象、知ってましたか?
0186デフォルトの名無しさん
NGNG環境変数の
%SystemRoot%\system32〜
が
?:\windows\system32〜
に置き換わるって言っているのか?
同じくBuild633でwinXP環境だけど全然置き換わっていないぞ。。
0187Mr. Moonlight≠184
NGNGでもま、バグなんだろうけど%SystemRoot%なんて
実際のトコ変わることなどなさそうだし、
あまり神経質に気にしなくてもよさそうな気がするよ。
0188デフォルトの名無しさん
NGNGXPでつか。こんど検証してみます。
>>187
>でもま、バグなんだろうけど%SystemRoot%なんて
>実際のトコ変わることなどなさそうだし、
>あまり神経質に気にしなくてもよさそうな気がするよ。
まあね。
でも%SystemRoot%以外の環境変数も展開されるし、気をつけないとまずいかなと。
客先の既存環境に導入するようなケースもあり得るだろうし。
0189デフォルトの名無しさん
NGNGWinXP Proクリーンインストールしてサービスパック等は入れない状態で
試してみたけど、Win2000と同様に展開された値になりました。
0190デフォルトの名無しさん
NGNG?
ActivePerlをインストしてあるXP2台と殆どなにも入れていないXPで
環境パスはなにも変わっていないよ
0191184
NGNG納得するかも?って書いたんだけど甘かったな。まっ、本家にブー垂れたら?
と逝っても、もう、633はサポートしないだろうけど。
http://bugs.activestate.com/ActivePerl/query.cgi
0192デフォルトの名無しさん
NGNG0193恵理@言問橋
NGNG0194デフォルトの名無しさん
NGNG氏寝予、おめー
0195デフォルトの名無しさん
NGNGどっか書いてあるの?
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNG$VERSION = 1.00;
ってどういうこうかがあるんですか?
0200デフォルトの名無しさん
NGNGrequire は実行時に検査される。
useはコンパイル時に検査される。
--
print "hoge";
require Hoge::Fuga;
--
だと、 "hoge" が出力された後に エラー(Hoge/Fuga.pm がねぇよ)を吐くけど
use にした場合は、実行する前にHoge::Fugaがチェックされて、
無い場合は実行されない(hogeも出ない)
更に use は import() を自動的に呼ぶ
嘘臭い説明するとこんな感じ。
更にインチキな説明をすると
「Perlモジュールとして作られ物(.pm) はuse そうじゃないなら require」
>>199
そのスクリプト(モジュール)のバージョン設定だよ
0201デフォルトの名無しさん
NGNGある処理をあてるにはどういう流れですれば良いでしょう?
今までは "perl -i.bak script /hogehoge/*.txt" とかやって
いたんですが、流石にちゃんとした検索がしたくなったので・・・
0202デフォルトの名無しさん
NGNGUNIX なら find を組み合わせた方が UNIX 的で美しいですが。
いかがでしょう?
find /hogehoge -name "*.txt" -exec cmd.pl {} \;
0203デフォルトの名無しさん
NGNGC:\>perl -d -e '0'
Unable to connect to remote host: 127.0.0.1:2000
Compilation failed in require.
main::BEGIN() called at C:/Perl/lib/perl5db.pl line 0
eval {...} called at C:/Perl/lib/perl5db.pl line 0
BEGIN failed--compilation aborted.
たすけてやってください
0204デフォルトの名無しさん
NGNGglob() 多少手が込んだ事やるなら File::Find
0205デフォルトの名無しさん
NGNG激しく使えません。
0206デフォルトの名無しさん
NGNGあ、ActivePerlのです。
0207デフォルトの名無しさん
NGNGopendir(DIR,".");
@d=readdir(DIR);
closedir(DIR);
for(@d){print("$_\n")if($_=~/\.txt$/);}
これで如何?
0208デフォルトの名無しさん
NGNGステータスなどの管理を「ユーザー名.dat」などのように、
ユーザー個別のファイルで行いたく、新規登録時にファイルを作成させたいのですが
とほほなどを見ても、それらしきコマンドが見あたらず、困っています。
mkdirはディレクトリだし・・・
こういうときはどうすれば良いのでしょう?
0209デフォルトの名無しさん
NGNGネット上の資料だけで安くあげるのではなく、きちんとした参考書を買う。
0210デフォルトの名無しさん
NGNGのように'>'のようにリダイレクトを使う
リダイレクトは他にも'>>','<','+<'等あるので調べてみそ
0211デフォルトの名無しさん
NGNG趣味でやるには高すぎるっす(;´Д⊂
>210
それで出来たんですね!
存在しないファイルはエラーになるって思いこんでました。(つД⊂)
有難う御座いました!
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNGがんがってくれ
皮肉じゃなくて高い目標を持つのはいい事だよ
0214デフォルトの名無しさん
NGNGがんがってくれ
皮肉だよ高過ぎる目標は挫折の元だよ
0215デフォルトの名無しさん
NGNG最初はプログラミングのことは全くわからないタダのオサーンで、
いろんな人にプログラミングのこと聞きまくって勉強してPGP作ったらしいね。
目標が高いのはいいんだけど、ほんとうに真剣に打ち込める目標でナイトね。
0216山崎渉
NGNG0217208
NGNG他の趣味にお金かけますよw
>213
ども! がんがります!
>214
・・・( ´・ω・)
>215
ジマーマン(・∀・)イイ!!
久々に出会った、やってて楽しい作業なので
まだしばらくは大丈夫です!
0218213
NGNG皮肉に決まってんだろ
0219208
NGNG/⌒ヽ)
i三 ∪
〜三 |
(/~∪
三三
三三
三三
0220214
NGNG高い目標を持つのはとても良いことだよ。
ただ一気に目標に向かうのはダメで、
その目標に達するために何が必要か細分化する必要がある。
まずは、その細分化された問題を解決する小さなプログラムを作ってみてはいかが?
それができてからだんだん大きくしていけば良いよ。
がんばれ!
0221デフォルトの名無しさん
NGNGa.txt、b.txt、c.txt、d.txt、e.txt
の内容と照らし合わせ。default.txtの内容に合致する
*.txtにカウントを1ずつ増やす、というのを高速に行う
にはどうしたらよいでしょうか?
forkで子プロセスを生んで並列に処理すればいいのでしょうか。。
とは言ってみたものの、へっぽこなのでわかりません。。
どうかご教示下さい。お願いしますっ
0222デフォルトの名無しさん
NGNG0223208
NGNGヽ( ´∀`)ノ >220 今はただ足下を固めるばかり♪
へノ / 構想の一割にもキテナイ♪
ε ノ がんがるよ!
>
0224デフォルトの名無しさん
NGNG玉袋が冷えすぎると魔王が蘇えるから気をつけてね。
それがあの人の遺言だから。あまり無下に扱って欲しくない。
たましい。その。
0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNGファイルハンドル。
INって名前の(ファイル専用の)変数に、"a" が入ってると思えばいいよ
open(IN,'a.txt')
$data = <IN>;
close(IN);
'a.txt'の別名と考えると分かりやすいかもしれない
てかドキュメント嫁
0227デフォルトの名無しさん
NGNGperlでwindowsのアプリケーションとかを動かすように作れますか??
0228デフォルトの名無しさん
NGNG作れます。
0229227
NGNGなんか良いHPほ教えていただけませんでしょうか??
0230デフォルトの名無しさん
NGNG最初からそう言えば?もったいぶってないでさ。
system
0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNG(?:(?!foo).)*
含まないものにマッチするってどういう意味?
マッチさせて含んでいたら、非0を返せばいいんじゃないの?
そういうのとはちがうんか?
0233デフォルトの名無しさん
NGNGsystem関数ではwaitしてしまうし、exec関数では元プログラムが終了してしまいます。
返り値は必要としてないので、一方的に起動させるだけということはできないのでしょうか?
0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNGforkしたあとに子プロセス側からsystemを呼べってこと?
0236デフォルトの名無しさん
NGNGa.pl:
open(TEST, "|b.pl");
print open 'test';
close(TEST)
b.pl:
while($line=<STDIN>) {
printf"$line";
}
としても何も表示されません。
パイプのデータの受け渡しが間違ってると思うのですが、
ぐぐっても分かりません。どうすればいいのでしょうか。
環境はwindows2000+ActivePerl最新版です
0238デフォルトの名無しさん
NGNGsystem( 1, "command ..." );
とやるとバックグラウンドプロセスを立ち上げ可能。
先頭の引数が1なのがミソ。
UNIX で system( "command ... &" ) とやるのとほぼ一緒。
>>236
open(TEST, "|b.pl");
print open 'test'; # <== これは何?
close(TEST)
○ print TEST 'test';
0239デフォルトの名無しさん
NGNGそれだけだったら、あんまり意味無いけど
否定条件で組み合わせると役に立つ
例えば、HTML読み込んで
<a HREF="〜">
の部分だけ取り出したいとき
(普通はまぁ リンク文字列 </a> も取り出すだろうけど)
/<a.*?>/ # ここで言明使っても良いけど
で出来るが、<a NAME="〜"> みたいに、NAMEを含んでいるタグは要らない場合
/<a(:?(!?NAME=".*?").)*?>/
ってやると
<a HREF="〜"> はマッチするが、<a NAME="〜"> はマッチしない。
寝惚け頭でかいてるが、何とか察してくれ
# ついでに↑の正規表現間違ってるような気がするから当てにしないでくれ
0240236
NGNGすいません、書き込みミスでした。
正しくしても、標準入力から読み込んでも空になります。
b.plは動きはするのですが。
activeperlではうまくパイプが働かないのでしょうかね。
0241デフォルトの名無しさん
NGNG>それだけだったら、あんまり意味無いけど
めっちゃ意味あるだろ・・・
0242239
NGNG(?:(?!foo).)*
すまん、正規表現あんまり詳しくないんでこれに驚くほどの意味は有ると思えん
それこそ !~ /foo/ でいいじゃねぇかと思う。
否定言明だけで意味ある例解説キボンヌ
0243デフォルトの名無しさん
NGNG次の行へ移る、なんてことは無理?
0244デフォルトの名無しさん
NGNGおいおい、、(?:(?!foo).)* ≠ !~ /foo/ 全然違うYO
0245238
NGNG>正しくしても、標準入力から読み込んでも空になります。
ああ、そういうこと…。
Cygwin 環境下でちょっと試したが、確かにundefになるね。
最初はバッファフラッシュをやってないからだと思ったのだが
select( (select(TEST), $| = 1)[0] );
それとも少し違うようだし。
cat を対象コマンドにするとちゃんとパイプ内容が渡ってるのが確認できる。
#実際 fly.exe とか sendmail.exe がちゃんと動かせるんだし(^^;
そもそも素でSTDINから読めばコマンドライン入力待ちになるのだから、
パイプ先の b.plで <STDIN>がundefを受け取ってくるのが何故なんだろう。
#らくだ本に関連項目あった気がする。IPC::Open2 の出番かもしれない。
>>243
実行前にコメントアウトしとくのはだめなの?
ブレークポイントで任意の位置で中断することはできるけど、
リスタートはその位置か、ファイル先頭からしかできなかった記憶。
0246238
NGNGopen(TEST, "| perl b.pl"); # <== ちゃんとコマンド名で叩く
select( (select(TEST), $| = 1)[0] );
print TEST "test\n";
close(TEST);
きちんと perl.exe 経由で起動すればパイプ繋がるわ。
#! 行に頼るとダメっぽい…。
0247デフォルトの名無しさん
NGNG0248243
NGNGなるほどコメントアウトするしかないですか。
わりと長めのトレースの途中でコメントアウトしなきゃいけない行に
気付いたときになんとか出来ないだろうかって思ったもので。
ありがとうございます。地道にやってみます。
0249デフォルトの名無しさん
NGNG数値を出力する時に3桁毎に「,」をつけたくてC言語だと
setlocale(LC_ALL, "");
printf("%'d\n",123456789);
とすることで、「123,456,789」の出力結果が得られますが
perlだと
use POSIX "locale_h";
setlocale(LC_ALL, "");
printf "%'10d\n", 123456789);
としても、「'10d」としか表示されません。
何か方法は無いでしょうか。
0250デフォルトの名無しさん
NGNG>>247
>239でも>232でもないが
何となく全く同じではないというのは分かるんだが、
こんな時に使うという解説キボンヌ
0251デフォルトの名無しさん
NGNGどんな方法でも構わないのなら、
正規表現でも出来る。
0252251
NGNG例えばこんなの
$_= 1234567890;
() while s/^(\d+)(\d\d\d)/$1,$2/;
print;
> 1,234,567,890
■ このスレッドは過去ログ倉庫に格納されています