Perlについての質問箱 32箱目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/08/13(月) 18:01:530652デフォルトの名無しさん
2007/09/19(水) 00:03:05Win は関連付けで動くのでいらない
0653デフォルトの名無しさん
2007/09/19(水) 00:27:21ForceArray 辺り?
0654 ◆PQZNeK2U46
2007/09/19(水) 01:35:38本によってコードの書き方が全然違うし。疲れる。
rubyもこんなに難しいの?
変数宣言も突然型なしで出来るし。メチャクチャ。
こんなの扱ってるからお前ら馬鹿なんですね。
0655デフォルトの名無しさん
2007/09/19(水) 01:43:28やあ、 ◆PQZNeK2U46 さん、こんばんわ。
今日も粘着させて頂きますので宜しくお願いしますね。
0656デフォルトの名無しさん
2007/09/19(水) 02:39:27ストライクで御座います。
やっぱり、こういうのがあるんですよねー。
えっ、マニュアル嫁ってw
スミマセン以後気をつけます。
ありがとうございました。
0657 ◆PQZNeK2U46
2007/09/19(水) 02:43:02こんなところで鬱積したフラストレーションを爆発させてんじゃねーよ。
ノータリン。どうせ独身だろお前。人生オワトル。
0658 ◆PQZNeK2U46
2007/09/19(水) 02:48:40おい!こらテメーなんだそのザケた態度はよ。
すみませんって言葉はw付のおどけた態度で言う言葉じゃねーぞ?
実生活でも自分のミスを笑って済まそうとするアンポンタンか?
なめてんとブッ殺すぞ?
メガネ外せ。
0659 ◆PQZNeK2U46
2007/09/19(水) 02:53:55恥ずかしくないの?いい歳して訳のわからん言葉使ってよ。
なに?ストライクで御座いますって?
お前ラリッてんのか?
馬鹿ハゲ独身!ニートは死ね!
0660デフォルトの名無しさん
2007/09/19(水) 03:08:48全国のハゲに謝れ!
0661デフォルトの名無しさん
2007/09/19(水) 03:46:07荒らしとして規制議論にスレを立てて報告します。
適時掘られ、プロバイダから警告が来ると思います。
0662デフォルトの名無しさん
2007/09/19(水) 09:25:53Winで #! 書くのは -x 使うときと CGI 書くとき。
0663デフォルトの名無しさん
2007/09/19(水) 09:42:42オプションは見てくれるよ。ActivePerl の話だけど。
0664 ◆PQZNeK2U46
2007/09/19(水) 10:59:34>>661
殺す。
0665デフォルトの名無しさん
2007/09/19(水) 11:39:25if(/うんたら/) {
}
if(/かんたら/) {
}
awk みたいなコードだな
優先順位、、、うぅ、、、orz...
#エントリ数が14KもあるのでそろそろDBにする頃かしらと悩んでいる今日子の頃
0667デフォルトの名無しさん
2007/09/19(水) 21:41:20キリバンオメ
とりあえず、その削除されないという @Proxy60 と $Now_Time 出したら?
>>630のコードは無駄な処理の塊が気になるけど、手元で
$Now_Time = 1;
@Proxy60 = qw(0<>0<>hoge<>0.0.0.0<>dummy01<><><> 2<>2<>foo<>1.1.1.1<>dummy02<><><>);
を食わせてみた限りでは、特におかしな結果にはならなかったよ。
0668デフォルトの名無しさん
2007/09/20(木) 09:47:04*.cgiファイルをCGIとして起動するように改造するにはどうしたらいいのでしょうか?
0669デフォルトの名無しさん
2007/09/20(木) 14:42:46ふつ〜
先行事例をしらべるんじゃね?
0670デフォルトの名無しさん
2007/09/20(木) 21:59:12> 残るコードはPerl風にしないほうがいいね。
なにその Perl 風って?
0671デフォルトの名無しさん
2007/09/20(木) 22:12:030672デフォルトの名無しさん
2007/09/20(木) 22:14:540673デフォルトの名無しさん
2007/09/20(木) 23:06:14print 0+$x, $x++;
print 1*$x, $x++;
0674デフォルトの名無しさん
2007/09/21(金) 16:44:25を実行すると、5.99999999999999 から結果がおかしくなるのはなぜですか?
0675デフォルトの名無しさん
2007/09/21(金) 16:58:43Eなんちゃらでしょ?
bigint だかなんだか忘れたけど、そんなモジュールを使ってみませう
0676デフォルトの名無しさん
2007/09/21(金) 17:13:08つ 丸め誤差
0677デフォルトの名無しさん
2007/09/21(金) 22:04:530678デフォルトの名無しさん
2007/09/22(土) 00:01:07結論から言えば、内部での数値の表現が2進数だから。
2進数で1/10(=0.1)を表現しようとすると無限小数になってしまう。
#10進数でも1/3を有限小数で表現できないのと同じ。
でも、コンピュータの演算器は限られた大きさのデータ(ここでは有限の桁数としとく)しか扱えない。
結果演算誤差が出る。
0679デフォルトの名無しさん
2007/09/22(土) 00:03:45小数化した時点で誤差が含まれるから、いつかはそうなる。
WebProgの質問スレにも同じ質問あったからそこを参考にするといいよ。
0680デフォルトの名無しさん
2007/09/22(土) 02:53:14sub func{
if(/文字列/){
・・・
}
}
という関数があって、文字列の部分だけ変えたのをいくつか作りたいんですが
関数の引数として渡す方法はないでしょうか。
今は1行だけ違うコピペ関数が多数並んでいます・・・。
0681デフォルトの名無しさん
2007/09/22(土) 02:57:250682デフォルトの名無しさん
2007/09/22(土) 03:27:05コピペってことは
sub func {
if(/文字列1|文字列2/){...}
}
で済む気がする。
funcを複数回呼ぶ必要があるなら
func() if /文字列1/;
func() if /文字列2/;
でもいいわけだし。
0683デフォルトの名無しさん
2007/09/22(土) 05:50:10その意味を画面の右側に
日本語で表示してくれる
エディターある?
0684デフォルトの名無しさん
2007/09/22(土) 07:38:200685デフォルトの名無しさん
2007/09/22(土) 09:40:490686デフォルトの名無しさん
2007/09/22(土) 14:00:23コードを書くにはどうしたらいいですか?
0687デフォルトの名無しさん
2007/09/22(土) 14:07:46そのなでしこで
CGIは作れるのかよ、、、、?
0688デフォルトの名無しさん
2007/09/22(土) 14:15:15コードを書くのはめんどいので、、、
#!/usr/bin/env perl
use Data::Dumper ;
$Data::Dumper::Deparse = 42 ;
my $hoge = sub { 42 } ;
print Dumper $hoge ;
とかじゃダメかい?
0689デフォルトの名無しさん
2007/09/22(土) 15:41:51print "content-type:text/html\n\n";
print "<html>\n";
print "<head><title>タイトル</title></head>\n";
print "<body>\n";
print "<h2>テスト</h2>\n";
print "</body>\n";
print "</html>\n";
↑これでInternal server error 500になる。
ただしレンタルサーバー上ではエラーだが、
自分のパソコンでやったらちゃんと表示される。
ソースにもし間違いがあったら
場所と対処法を具体的に指摘しろ。
0690デフォルトの名無しさん
2007/09/22(土) 15:54:18板違いだWebProg池
0691デフォルトの名無しさん
2007/09/22(土) 16:31:13/usr/local/bin/perlじゃなくて/usr/bin/perlだったりして
あとよくあるのが行末がCR+LFになってて、
/usr/local/bin/perlCRを探しに逝ってるとか
0692デフォルトの名無しさん
2007/09/22(土) 18:34:13全部間違い。出直せ、ボケ!
0693デフォルトの名無しさん
2007/09/22(土) 19:22:02>>692
くだらない質問でもど偉そうに聞いていいスレ
http://pc11.2ch.net/test/read.cgi/php/1158647441/
0694デフォルトの名無しさん
2007/09/22(土) 19:35:56Windows系サーバなら、CGI も組めそうじゃね?
あんまり現実的じゃないけどw
0695デフォルトの名無しさん
2007/09/22(土) 21:55:010696デフォルトの名無しさん
2007/09/22(土) 22:39:54組みたくないがw
0697デフォルトの名無しさん
2007/09/23(日) 00:53:34たしか Apache の CGI サンプルにあったはず
0698デフォルトの名無しさん
2007/09/23(日) 00:57:53なるほど、たしかに
0699デフォルトの名無しさん
2007/09/23(日) 03:47:49cgiファイルのパーミッションを
755にしたらそれで動いたぜ
そんなこと教科書には
どこにも一言も書いてなかった!
ローカルで動かす教科書だからかな?
サノバビーィーーーッチ!
0700デフォルトの名無しさん
2007/09/23(日) 06:18:39Perl Package Managerが起動しないんだ
サポートに聞いてみたけど「そんな事例無いからワカンネ」って言われて
ほぼ同じスペックの友達のパソでやってみたら普通に開いたし、ぐぐってもそんな事例やっぱないっぽくて
誰か原因わかる人いる?
0701デフォルトの名無しさん
2007/09/23(日) 06:48:360702デフォルトの名無しさん
2007/09/23(日) 10:31:08しかしどうせならBSD系なりLinux系なりで勉強したほうが良いと思うが。
どうしてもWindowsでなきゃ駄目というなら
Cygwinを構築してCygwin系Perlを使ったほうが良いぞ?
0703デフォルトの名無しさん
2007/09/23(日) 13:36:42どういうときに役に立つのかがイマイチわかりません。
アルパカ本には
「ライブラリなどコードの他の部分と共有できるようにする」と書かれてますが、どういう意味でしょうか?
0704デフォルトの名無しさん
2007/09/23(日) 14:12:420705703
2007/09/23(日) 15:18:25うーん、単にそれだけのことなのですか。。
アルパカ本の記述から察するに何か深いわけがありそうな気がしたんです。
0706デフォルトの名無しさん
2007/09/23(日) 16:03:24横レス。
章の始めでしかも「こんな節はなかったことにして次へ」って記述されてる
んだから気にしなくて良い。
8.1 は
「(従来の)型グロブでやろうとすると面倒でした」
って書いてあるだけだ。
0707703
2007/09/23(日) 17:46:130708デフォルトの名無しさん
2007/09/23(日) 18:20:57ハッシュを作るサブルーチンを作ろうとしたらエラーが出ました。
これをうまくやるにはどうしたらいいですか?
よろしくお願いします。
#!/usr/bin/perl
use strict;
sub create_hash{
my $name=shift;
my @keys=@_;
no strict "refs";
my %$base;
$base->{$_}=undef for @keys;
}
create_hash('hash','key1','key2');
Can't declare hash dereference in my at /home/Owner/test2 line 8, near "$base;"
0709デフォルトの名無しさん
2007/09/23(日) 19:04:49リファレンスなら
my $base={};
あと値がundefでいいなら
my $base = {};
@$h{@keys}=();
とかでもできる
0710デフォルトの名無しさん
2007/09/23(日) 19:08:41my @keys=@_;
no strict "refs";
my $base;
$base->{$_}=undef for @keys;
return $base;
}
$hash = create_hash('key1','key2');
%hash = %{create_hash('key1', 'key2')}
0711デフォルトの名無しさん
2007/09/23(日) 19:11:460712708
2007/09/23(日) 19:55:56だからno strict "refs";は要るのかなと判断しました。
>>709
my $base={}という宣言もありなんですね。
ありがとうございます。
>>710
create_hashでやろうとしたことは、与えられた名前とキーのハッシュを作ることなんです。
$nameという名前のハッシュを宣言しようとしてうまくいかなくなったんです。
0713708
2007/09/23(日) 20:00:30'hash', 'key1', 'key2'
を引数にすると
スコープがmainパッケージのレキシカル変数%hashで
%hash = (key1 => undef, key2 => undef);
となっているようなものを作ってくれるようなサブルーチンを作りたいんです。
分かりにくくてすみませんでした。
0714デフォルトの名無しさん
2007/09/23(日) 20:24:11その引数の'hash'は何に必要なんだか理解出来ん。
sub create_hash{ map { $_, undef } @_ ; }
とか709 の方法
sub create_hash{
my %h ;
@h{@_}=();
return %h ;
}
でええんちゃうん?
0715708
2007/09/23(日) 21:18:07ありがとうございます。
hashはハッシュの名前です。
%hashの名前に使われていることにご注目ください。
0716デフォルトの名無しさん
2007/09/23(日) 21:22:230717デフォルトの名無しさん
2007/09/23(日) 21:26:24708 で使われてないよ? 'hash'
0718デフォルトの名無しさん
2007/09/23(日) 21:40:16左辺を*$nameにしてハッシュリファレンスを代入したらいいんか?
なんに使うのかしらんけど・・・
0719708
2007/09/23(日) 22:03:22>>718 荒らしではなくて、シンボリックリファレンスが古いことも含めて
何も知らないまま我流で考えて行き詰まっていたんです。
鼻につく態度があったならごめんなさい。
何に使うかというと、サブルーチンだと呼び出すたびにハッシュの名前を用意をしないと
いけませんが、引数に指定できれば、
たくさんのハッシュを一挙に定義できると考えたんです。
0720デフォルトの名無しさん
2007/09/23(日) 22:07:44何が言いたいのか分からないけど、無名ハッシュとかで実現できない?
0721デフォルトの名無しさん
2007/09/23(日) 22:11:06「ハッシュの名前を用意」
せんでいいってんなもん。呼出元で違う名のhashにすりゃいいだけだろ。
>>714を使ったとして
my %hash1 = create_hash( 'key1', 'key2' );
my %hash2 = create_hash( 'keyB1', 'keyB2' );
すりゃいいだけの話だ。
0722708
2007/09/23(日) 22:26:36それだと希望する名前のハッシュにできませんよね。
例えば、ファイルに書かれた
hoge
fuga
...
といった内容を読み込んで、それぞれの名前をもったハッシュを1つずつ作りたいとします。
そのために、create_hash('hoge','key1','key2');という呼び出しで
hogeという名前のハッシュを定義しようと考えました。
sub create_hash{
my $name = shift;
my @keys = @_;
....
}
こうやって(...)の部分で(戻り値でhashを返すのではなくて)hogeという名前のハッシュを定義しようとしていたんです。
しかし、
sub create_hash{
my $name = shift;
my @keys = @_;
$name->{$_}=undef for @keys;
}
というやり方だと、hogeがハッシュの名前ではなくハッシュリファレンスの名前になってしまうので
予定外です。
0723708
2007/09/23(日) 22:28:28× ハッシュを定義しようと考えました。
○ ハッシュを定義できるようなサブルーチンを作ろうと考えました。
0724デフォルトの名無しさん
2007/09/23(日) 22:29:040725デフォルトの名無しさん
2007/09/23(日) 22:34:25再設計をおすすめします
0726デフォルトの名無しさん
2007/09/23(日) 22:36:500727708
2007/09/23(日) 22:40:58分かりました。周辺知識を得てからまたこの問題を考えます。
無知さを思い知りました。
0728デフォルトの名無しさん
2007/09/23(日) 23:32:47そういう時は「ハッシュのハッシュ」を使うと幸せになれる希ガス
0729デフォルトの名無しさん
2007/09/24(月) 04:04:50エラーメッセージは出てないのか?
あと、ユーザー名にマルチバイト文字(漢字とか)使ってない? もしそうなら
ACTIVEPERL_PPM_HOME って環境変数に適当なディレクトリを設定すりゃOK。
0730デフォルトの名無しさん
2007/09/24(月) 09:27:27@hash{hoge, huga, hugo} = (1, 20, 300);
みたいなことをハッシュリファレンスでやりたいんですけど
$hash = {};
$hash->{hoge, huga, hugo} = (1, 20, 300);
こういうコードじゃダメみたいなんですが、
どうすればいいんですか?
0731730
2007/09/24(月) 09:33:58いろいろ自分でデリファレンスあたりを考えてみたら
%$hashにとりあえずデリファレンスしてそこから上のコードを見ながら書きなおしたら
$hash = {};
@$hash->{hoge, huga, hugo} = (1, 20, 300);
こうなりました
スレ汚し申し訳ありませんでした
0732730
2007/09/24(月) 09:35:00@$hash{hoge, huga, hugo} = (1, 20, 300);
こうでした
どっちにしろすみませんでした
0733デフォルトの名無しさん
2007/09/24(月) 09:36:54$hash = {
hoge => 1,
huga => 20,
hugo => 300,
}
スライスでどーしてもやりたいってんなら
@{ $hash }{'hoge','huga','hugo'} = (1,2,300) ;
0734デフォルトの名無しさん
2007/09/24(月) 09:37:350735デフォルトの名無しさん
2007/09/24(月) 11:03:18これは大丈夫なのか?
0736デフォルトの名無しさん
2007/09/24(月) 11:39:370737sakura
2007/09/24(月) 13:29:42した@journalの配列を作製したいのですが表現が分かりません。宜し
く、お願いします。
070901
1030 高速道路での4重衝突。4人死亡
1100 山で遭難。2名救助
070912
0200 飲酒運転で、現行犯逮捕
下記のソースは、データ作製の処理が未完成です。
open(IN,'01.txt');
my @journal=();
while(<IN>){
chomp;
if(/^\d/){
#日付の処理
my $date=$_;
my @accident=();
}elsif(/^ /){
#明細の処理
s/^ //;push(@accident,$_);
}elsif(/^$/){
#データ作製
}else{
print "形式誤り\n";
}
}
close(IN);
0738デフォルトの名無しさん
2007/09/24(月) 14:25:59> my $date=$_;
> my @accident=();
は@journalと同じところで宣言すべき。
> elsif(/^$/){
> #データ作製
closeしてから処理すれば?
入力データからしてどこかのニュースサイトとかで使うのかな?
こわこわー
0739デフォルトの名無しさん
2007/09/24(月) 14:26:27use strict;
my @journal;
my $entry;
while(<DATA>) {
chomp;
if(/^\d/) {
$entry = {date => $_, accidents => []};
push @journal, $entry;
} elsif(/^ /) {
push @{$entry->{accidents}}, $' if $entry and $';
}
}
0740デフォルトの名無しさん
2007/09/24(月) 14:35:30とりあえず use strict; したらわかるんだけど
my @accident=(); はそのifの中のスコープでしか使えない。>>738の通り。
次に@journalにpushする時\@accidentを使うと同じ参照を何度もpushすることになるから
[@accident]でコピーの無名配列を作り直してpushする必要がある。
0741デフォルトの名無しさん
2007/09/24(月) 14:56:440742デフォルトの名無しさん
2007/09/24(月) 14:57:140743デフォルトの名無しさん
2007/09/24(月) 15:49:27macでperlをやってみようと思い始めたばかりの初心者です。
初歩の初歩で申し訳ないのですが、自力で解決できなかったので、
ご教授いただければ幸いです。
今いろんなサイトみながら「まずはターミナルでperlを実行してみよう」
という流れになり、
print "Hello, World¥n";
print "Hello, Perl¥n";
と書いたテキストを「hello.pl」という名前で保存して
ターミナルで「perl hello.pl」と実行しても
「Can't open perl script "hello.pl": No such file or directory」
と表示されます。
保存場所が間違っているのでしょうが、デスクトップとライブラリの
perlフォルダに入れても動きません。
この場合、どうしたら「hello.pl」は動くのでしょうか?
ご回答お願いします。
0744デフォルトの名無しさん
2007/09/24(月) 16:03:59PerlはLinuxでしか扱った事がないのだけども、
まずはそのhello.plファイルに実行権限があるか確認してみては如何?
0745デフォルトの名無しさん
2007/09/24(月) 16:16:50実行権限ですね。
ちょっと調べて確認してみます!
0746デフォルトの名無しさん
2007/09/24(月) 16:17:34本質的にperlの話とは関係ないが・・・
cd ~/Desktop
でそこへ移動してから
perl hello.pl
でOK。または、どこからでも
perl ~/Desktop/hello.pl
0747sakura
2007/09/24(月) 17:25:15早速の回答、有り難う御座います。以下の様に、判断しましたが間違っていないでしょ
うか?
日付の行は、まだ明細行は無いので$entryのリファレンスとしてはdateのみを格納し
て、accidentsは、無名の配列コンストラクタで領域のみを確保してリファレンスを格
納する。その$entryのリファレンスを@journalの最終的なリストに蓄積して行く。
明細の行で、accidentsは日付の時に取得したリファレンスを元にして$entryのリス
トを順次作製蓄積して行く。
と言う事で理解しましたが、これで良いですか?リファレンスは使った事が無いの
で、憶測で書いています。最後にprint for @journal;では
HASH(0x2754b4)HASH(0x18333fc)の値が表示されました。データとしては、日付は2件
有りますのできちんとリファレンスが出力されている様です。
しかし、今度は@journalの出力の方法が分かりません。申し訳有りませんが、
@journalを出力する方法をお教え願います。
0748デフォルトの名無しさん
2007/09/24(月) 17:37:41あってるよ。
print $journal[0]{date}, "\n";
print $journal[0]{accidents}[0], "\n";
print $journal[0]{accidents}[1], "\n";
print $journal[1]{date}, "\n";
print $journal[1]{accidents}[0], "\n";
0749デフォルトの名無しさん
2007/09/24(月) 18:00:17@{$journal[0]{accidents}}
0750デフォルトの名無しさん
2007/09/24(月) 20:28:00出力というとちょっと違うけど、こうやってまずは構造を知るところから。
use Data::Dumper;
print Dumper \@journal;
0751デフォルトの名無しさん
2007/09/24(月) 20:34:31YAML使う方が分り易くはないか?
■ このスレッドは過去ログ倉庫に格納されています