トップページ⇒php
1001コメント356KB

Perlコーディング初心者質問スレ Part 53

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2006/11/26(日) 14:38:23ID:SlmGsFMB
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >>2-10

前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0960nobodyさん2007/02/01(木) 18:34:00ID:uO0f4S6q
クッキー読み書きのサンプル探してます。
どこかにないですか?
0961nobodyさん2007/02/01(木) 18:42:55ID:???
>>960
けんと
0962nobodyさん2007/02/02(金) 20:55:17ID:???
@log = ('AAA,100,aaa','BBB,200,bbb','CCC,300,ccc');
@data = ('bbb','ccc');
$num = @log;

for($i=0; $i<$num; $i++){
 ($name, $price, $text) = split(/,/, $log[$i]);
 foreach(@data){
  if($text eq $_){
   $name = 'MATCH';
   last;
  }
 }
 push(@newlog, "$name,$price,$text)";
}

このような処理をしたいのですが、
とても効率が悪そうで悩んでます。
調べてみると、grepが利用できないかと思ったのですが、
うまくまとめられません。。どなたかよい智恵を貸して下さい!
0963nobodyさん2007/02/02(金) 20:58:50ID:???
すみません。
>push(@newlog, "$name,$price,$text)";

push(@newlog, "$name,$price,$text");
です・・
0964nobodyさん2007/02/02(金) 22:52:58ID:???
>>962-963
# usage> perl this_script 2 bbb ccc
my($pos, @word) = @ARGV;
my $regex = join '|', map quotemeta, @word;
$regex = qr/(?:$regex)/;
my @matched;
(split /[,\n]/, $_, $pos + 1)[$pos] =~ /^$regex$/ && push @matched, $_ for <DATA>;
print @matched;
__END__
AAA,100,aaa
BBB,200,bbb
CCC,300,ccc
DDD,400,ddd
0965nobodyさん2007/02/03(土) 00:12:45ID:???
>>964
感謝です!応用してやってみます。
ありがとうございました。
0966nobodyさん2007/02/05(月) 20:49:02ID:???
$text = 'abc';

$s1 = \$text;
$s2 = \'abc';
$s3 = \('abc');
$s4 = \('abc', 'def');
$s5 = \($text = 'def');

$s1〜$s5は全部スカラーのリファレンスになったのですが
$s4とかが配列にならないのは何故なんでしょうか?
夜も眠れません(>_<)
0967nobodyさん2007/02/05(月) 21:05:53ID:???
>>966
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html#Making_References

> 列挙リストに対するリファレンスを取るということは、ブラケットを使うことと
> 同じではないということに注意してください。これはリファレンスのリストを
> 生成することと同じなのです!
>
>  @list = (\$a, \@b, \%c);
>  @list = \($a, @b, %c); # 同じこと!
>
> 特殊な場合として、\(@foo)は@fooの内容へのリファレンスのリストを返し、
> @foo自身へのリファレンスは返しません。これは%fooと似ていますが、
> キーのリファレンスがコピーに対するものである点が異なります(これは
> キーがfull-fledgdスカラーではなく単なる文字列であるためです)
0968nobodyさん2007/02/07(水) 20:39:01ID:???
>>967
勉強になりました
0969nobodyさん2007/02/08(木) 15:49:20ID:???
$i=1;のときに
print "$iueo";の出力結果を1ueo
と表示するために$iを何かで囲めば良かったと記憶しているんですが度忘れしてしまいました。
すみませんが教えて下さい。調べるキーワードでも結構です。
0970nobodyさん2007/02/08(木) 15:52:51ID:???
${i}ueo
0971nobodyさん2007/02/08(木) 15:57:13ID:???
>>970
即レス感謝!
ありがとう!!
0972nobodyさん2007/02/08(木) 16:53:49ID:???
LWPでhttpsのページを取り込みたいがうまくいかない。
ぐぐって見つけたページ
ttp://blog.livedoor.jp/hakin/archives/50690272.html
によるとCrypt::SSLeayが必要だそうで、
そのページどおりにppmでインストールしようとしたんですが
Crypt::SSLeay自体が無いようでインストールできません。
環境はWin2000+Activeperl 5.8.8.817 です。

何か手段はありませんか?
0973nobodyさん2007/02/08(木) 17:09:57ID:MLG2+XR4
ActivePerl5.8.8にてNet::Pingを利用した鯖死活監視CGIをコーディング予定です。
必須事項として、レスポンスmin/maxから算出したアベレージが必要です。
コマンドプロンプトからの実施時のようにレスポンスを採りたいのですが、Net::Pingにはこのよいな実装がないのでしょうか?
かなり検索はしたのですが、レスポンスタイムの取り方を解説している場所がありませんでした
何か良い方法が有ればご教授下さい。
0974脱帽2007/02/08(木) 17:29:34ID:???
お久しぶり。

>>972
うちは
 ppm install http://theoryx5.uwinnipeg.ca/ppms/Crypt-SSLeay.ppd
でインストール出来たけど。

>>973
hiresメソッドは使ってみた?
0975nobodyさん2007/02/08(木) 17:35:33ID:???
Net::PingのマニュアルのSYNOPSISのところにある

# High precision syntax (requires Time::HiRes)
$p = Net::Ping->new();
$p->hires();
($ret, $duration, $ip) = $p->ping($host, 5.5);
printf("$host [ip: $ip] is alive (packet return time: %.2f ms)\n", 1000 * $duration)
if $ret;
$p->close();

が応答時間をとる例そのものずばりじゃないか。何回かやって平均/max/minとる
ところは自分で書いてください。そのくらいはできるだろ。
0976nobodyさん2007/02/08(木) 18:43:10ID:MLG2+XR4
>>974-975
ありがとうございますm(__)m
>>975さんの方法で無事解決しました。
勉強不足ですね、申し訳ない。
0977あっこ2007/02/08(木) 19:23:45ID:LIdpjyEo
http://docomo-camera-ne.jp/zeidoroom/20070208192133.jpg
ソース教えてもらえませんか?
0978nobodyさん2007/02/08(木) 19:37:58ID:???
とりあえずおっぱいうp
0979nobodyさん2007/02/08(木) 19:45:50ID:???
>>977
&kouyaku()の中身が知りたいという事か?

1から$num1と$num2の小さい方までをforで回して
$num1と$num2が両方割り切れるようならその値をリストに追加、
最後にリストをまとめて返すというだけの処理。

この程度のソースが書けないのは素人どころのレベルじゃねーぞ。
とりあえず>>1を100万回読み直して自作のソースを晒せ。
0980nobodyさん2007/02/08(木) 20:43:36ID:???
違うよ。

1.両方の数字を因数分解
2.両方に共通する因数を抜き出す
3.それらの組合せの全て出す
4.各組合せの乗算を算出
5.重複した値を除いて、「1」とそれらの値を画面出力
0981nobodyさん2007/02/08(木) 21:16:53ID:???
intとハッシュでおk
30秒で出来た
0982nobodyさん2007/02/08(木) 21:39:49ID:???
こんな時こそデータベースだろッ!
09839722007/02/09(金) 12:39:36ID:???
>>974
出来ました!
あ(・∀・)り(・∀・)が(・∀・)と(・∀・)う!
0984nobodyさん2007/02/09(金) 16:40:43ID:bT11nyvb
ハッシュ配列においてpushという命令使用できないのでしょうか?
0985nobodyさん2007/02/09(金) 16:53:16ID:???
>>984
できない……が、同じ事を考えた人は居る。
ttp://blog.livedoor.jp/tetryl/archives/6741666.html
0986nobodyさん2007/02/09(金) 21:07:51ID:???
オブジェクトへ配列のリファレンスを渡すと、何故かリファレンスではなく
展開されたデータが渡ってしまうのですがなぜでしょうか?

@a = qw(a b c d);

$obj->hoge(\@a);

sub hoge{
my $self = shift;
my $ref_array = shift;
print $ref_array;
}

こうするとなぜか「ARRAY(0x275cc8)」
といったアドレスデータではなく、「a b c d」と勝手に展開されたものがプリントされてしまいます。
09879862007/02/09(金) 21:19:14ID:???
すみません、試行錯誤してたら自己解決しました。
デリファンスを
@a = @$ref_array;
ではなく、
@a = @{$ref_array};
とやったらうまくいきました。
なぜそうなのかはわかりませんが・・・
0988nobodyさん2007/02/09(金) 23:20:06ID:???
>>987
そもそもお前が986で示したプログラムにはそんな部分はないわけだが。
ちゃんと正確に晒さないと的確な回答は得られないと思われる。
0989nobodyさん2007/02/10(土) 18:29:35ID:???
次スレ待ち保守
0990nobodyさん2007/02/10(土) 20:48:15ID:???
次スレ
http://pc10.2ch.net/test/read.cgi/php/1171102883/
0991nobodyさん2007/02/11(日) 05:04:06ID:???
>>990
乙!

さて、埋めるぞ!
0992nobodyさん2007/02/11(日) 14:36:41ID:???
use Perl6::Say;

say '埋め';
0993nobodyさん2007/02/12(月) 00:00:32ID:???
use CGI::SOSHI;
use strict;

my $stop = CGI::SOSHI->new;
print $stop->soshi();


阻止!
0994nobodyさん2007/02/12(月) 00:01:34ID:???
use BBS::WWW2ch;
write_thread 'php', '164519503', '梅';
0995nobodyさん2007/02/12(月) 04:45:55ID:???
機械よ 産め!
0996nobodyさん2007/02/12(月) 05:09:21ID:???
久米
0997nobodyさん2007/02/12(月) 12:40:25ID:???
use CGI::SUSHI;
0998nobodyさん2007/02/12(月) 16:42:45ID:???
うめうめ
0999nobodyさん2007/02/12(月) 17:30:16ID:???
松竹梅
1000nobodyさん2007/02/12(月) 18:04:59ID:???
1000!

次スレ
Perlコーディング初心者質問スレ Part 54
http://pc10.2ch.net/test/read.cgi/php/1171102883/
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。