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

【Perl】初心者コーナー Part18

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/11/20 22:04ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0331nobodyさん02/12/10 15:46ID:???
質問お願いいたします。
書き込み処理の所なんですが、

open(OUT, "+<$dat");
flock(OUT, 2);
@sasa = <OUT>;
truncate(OUT,0);
seek(OUT, 0, 0);
print OUT "書き込み\n";
print OUT @sasa;
close(OUT);

    と

open(OUT, "+<$dat");
flock(OUT, 2);
@sasa = <OUT>;
seek(OUT, 0, 0);
print OUT "書き込み\n";
print OUT @sasa;
truncate(OUT, tell(OUT));
close(OUT);

ではどちらがいいんでしょうか?
ただtruncateの使い方がちょっと違うだけなんですが・・・。
それ以前に文法的に間違っていたらご指摘お願いします。
0332nobodyさん02/12/10 15:52ID:???
>>330
リファレンス使えばよろし。

>>331
下。
既出のような気がするのは思い過ごしでしょうか。
0333nobodyさん02/12/10 16:10ID:???
>>331
早速の回答Thanksです。
既出でしたか・・・お手数おかけしました。
過去ログまた読み直して出直してきます。
0334nobodyさん02/12/10 16:11ID:???
>331じゃなかった
>332さんごめんなさい。
0335nobodyさん02/12/10 16:17ID:???
>>330
せめて、配列じゃなくって$hoge1という変数が欲しい
理由を書いてもらえませんか? もしかするとその原因
自体変更することで、全体としてすっきりするっていう
可能性もありますから。
0336nobodyさん02/12/10 19:01ID:4NsDPNiK
パスワード生成と、照合を別スクリプトにするのはやっぱりだめですか?

作ろうとしてるのは、パスワードを作るだけのスクリプトと、そのパス
を使って管理する掲示板なんだけど・・・文法チェッカかけたら
「Missing right curly or square bracket at hoge.cgi line 65, at end of line
syntax error at hoge.cgi line 65, at EOF
hoge.cgi had compilation errors.
」
ってなってしまった。。。
033733602/12/10 19:02ID:4NsDPNiK
あ、上のエラーでるのはパス生成のスクリプト。
0338nobodyさん02/12/10 19:04ID:???
ご教授お願い致します。
メールの受信をしたいので、下記のように記述したのですが

0 use Net::POP3;
1 unless ($pop = Net::POP3->new("$HOST")) {
2  print "POP3接続失敗 \n";
4 }
5 $pop->user($LOGIN_NAME);
6 $auth_check = $pop->login($LOGIN_PASS);
7 if( $auth_check == undef )
8 {
9  print "認証: NG \n";
10 }

どうしても、認証NGとなってしまいます。
POPサーバーには、Win2000 exchangeを使用しているため
ログインユーザー名に、「ドメイン\\ユーザー名」と記述したり、
しなかったり、と色々試してみたのですがダメでした。
ちなみに、モジュールが置いてあるマシンからPOPサーバーへの
pingは通りました。

どなたか、分かる範囲で構いませんので
ご指摘下さい。
0339nobodyさん02/12/10 19:06ID:???
>>336
ただの文法エラーですね。
カッコの付け忘れ。65行目参照。
034033602/12/10 19:06ID:4NsDPNiK
パスワード生成スクリプト=フォームに入力した文字をCryptで
暗号化して、それをファイルに保存(ファイルを作成というコマンド
がない?ので、ロックファイル作成のコードを使ってます)、というもの。
エラーが出ている65行目は。。。
sub error {
&head;
print <<"ERR"; #ここが65行目。
<center>
<hr>
<font color="#C20000"><b>エラー</b></font><hr>
$_[0]
<hr>
</body>
</html>
ERR

}
何が違うんでしょう??
034133602/12/10 19:07ID:4NsDPNiK
339>>
カッコ?!
・・・見てみます。
0342nobodyさん02/12/10 19:15ID:???
>>336
エラーの内容から恐らくヒアドキュメントの書式を間違えてます。
0343nobodyさん02/12/10 19:17ID:???
<p>$_[0]</p>
0344名無しさん02/12/10 20:10ID:???
>>336
#ここが65行目。の#が全角になってるのは問題ないのか?
034533802/12/10 21:05ID:???
モジュール本文の記述が誤字だらけでしたので
とりあえずもう一度、修正版を書いておきます。

0 use Net::POP3;
1 unless ($pop = Net::POP3->new("$HOST")) {
2  print "POP3接続失敗 \n";
4 }
5 $pop->user($LOGIN_NAME);
6 $auth_check = $pop->pass($LOGIN_PASS);
7 if( $auth_check == undef )
8 {
9  print "認証: NG \n";
10 }


0346nobodyさん02/12/10 21:24ID:???
APOP
0347nobodyさん02/12/10 21:51ID:???
すいません、配列の要素の中に他の配列の全てを叩き込むって出来ないんでしょうか?

@test=("か","き","く","け","こ");
@hoge=("あいうえお","テスト","さしすせそ","たちつてと","");
@hoge{1}=@test;
$data=@hoge[0];

このようにすると$dataの中には「か」だけが格納されてしまうのですが。
0348nobodyさん02/12/10 21:52ID:???
>>345
まずtelnetで叩いてみろや。
034934702/12/10 21:53ID:???
誤 $data=@hoge[0];
正 $data=@hoge[1];
0350nobodyさん02/12/10 21:56ID:???
$hoge[1] = join('', @test);
0351nobodyさん02/12/10 21:59ID:???
>>350
ありがとうございます、助かりました。
0352nobodyさん02/12/10 23:43ID:???
つーか、むしろ、こういうことじゃないのか?

@test=("か","き","く","け","こ");
@hoge=("あいうえお","テスト","さしすせそ","たちつてと","");

$hoge[1] = \@test;

print $hoge[1]->[5];
print $hoge[1][3];

print @{$hoge[1]}
0353nobodyさん02/12/11 00:22ID:???
ちょっくら質問!
open(FILE,"xxxx");
@file = <FILE>;
@file = @file[0..8];
seek(FILE,0,0);
print FILE "zzzz";
print = @file;
close(FILE);
このように添字を使って”xxxx”の記録数を10にしたんだけど、
これはかなりダサイやり方?

0354nobodyさん02/12/11 01:45ID:fCm39Cv9
>>353
モードは"+>"だよね。そのコードからすると。

@file = ();
push @file, scalar <IN> for 0..8;
のほうがいいと思うよ。
0355nobodyさん02/12/11 11:59ID:IDueDvlE
そういやWin2000マシンのアクチブパールを5.6.1から5.8に入れ替えたらGDBM_File使えなくなった。
こちらのスレに対策知ってる神はいらっしゃる?
0356nobodyさん02/12/11 12:50ID:???
Firebirdなんですけど
$sql = "insert into *** values( '***' )";
$statement = $dbHandle->prepare( $sql );
$sqlResult = $statement->execute;
この$sqlResultには何が返ってくるのでしょうか。
見たんですけど何も入っていませんでした。
0357nobodyさん02/12/11 13:21ID:mexeU5Q0
use Time::Local;
しても
timelocalが使えません。

助けてください。
0358nobodyさん02/12/11 13:25ID:???
>>357
実はPerl4ってことはないか?(w
ところでどう使えないんだ?エラーが出るのか?値が不正なのか?
良ければここにソースを書いてみれ。
0359nobodyさん02/12/11 13:25ID:mexeU5Q0
>>357
のことは忘れてください。。。
0360nobodyさん02/12/11 14:40ID:???
>>356
Firebirdかなんか知らんが、つまりはDBIだしょ?

$sqlResult = $statement->execute();
で、処理した件数が返ってくるはずだが・・・
0361nobodyさん02/12/11 15:55ID:3BdsDO3l
サイト制作スレから誘導されてきました。

コマンド「chmod」の代わりになるコマンドってあるんですか?
もしあるのであれば教えてください。
もしくは
$ImgFile = "$ImgDir$no$tail";
if (!open(OUT,"> $ImgFile")) {
if ($clip_err) { &error("画像のアップロードに失敗しました"); }

}
binmode(OUT);
binmode(STDOUT);
print OUT $upfile;
close(OUT);

chmod (0666,$ImgFile);

この部分をchmodを使わずに構成する事はできませんか?
>>1で指定された書き方が出来そうにないのでこういう形でお聞きします。
どなたかお願いします。
0362nobodyさん02/12/11 16:10ID:???
お勧めできないかもだけど
open(OUT, "> $ImgFile")より上に umask 0;
0363nobodyさん02/12/11 16:22ID:IDueDvlE
>>358
いえ、Perl4なんてことはないっす。w
前はActivePerl5.6.1ビルド633でGDBM_FileをPPMインスコした記憶があって、
今回ActivePerl5.8.0ビルド804にする際以前の5.6.1ビルド633は綺麗さっぱり
DISKから消してしまったんです。GDBM_Fileは後からインスコすればいいという
考えで。
そしていざGDBM_Fileのインスコしようと思ったら、Perl5.6用しか見つからなくってお口あんぐり状態な訳です。

エラーは
Can't locate GDBM_File.pm in @INC (@INC contains: C:/perl/lib C:/perl/site/lib .) at (eval 1) line 2. BEGIN failed--compilation aborted at (eval 1) line 2.

と、漏れのマシンにGDBM_Fileが装備されてないって出ます。
ソースの抜粋は。。。自分が作ったスクリプトじゃない配布物なんで、カキコするのもちと・・・。
動作は電話帳データベースのようなもので、電話番号を入力すれば住所が分るといったものと同等です。

暫く待てばPerl5.8(Windows)用のGDBM_Fileが出てくるのかな?
0364nobodyさん02/12/11 16:44ID:???
>>362
chmodの行を削って
open(OUT, "> $ImgFile")より上に umask 0;
という事でよろしいですか?

ありがとうございました。
0365nobodyさん02/12/11 17:50ID:???
スクリプトの中で、
require './jcode.pl'; # jcode.plのパス
をしてjcode.plを呼んでるんですけど、コマンドラインで
「C:\>perl "C:\Documents and Settings\***\デスクトップ\unko.cgi"」
を実行すると、
「Can't locate ./jcode.pl at C:\Documents and Settings\***\デスクトップ\unko.cgi line 17.」
と出てしまいます。
(webだとエラーになりません。ローカルではデスクトップでスクリプトを実行しています。)
なぜでしょうか。
0366nobodyさん02/12/11 18:14ID:???
require 'jcode.pl';
require '.\jcode.pl';
0367nobodyさん02/12/11 19:35ID:???
>>365
カレントディレクトリに jcode.pl がないんでしょ。
そのコマンドラインだと、カレントは C:\ で、スクリプトのある場所と違ってるし。
0368nobodyさん02/12/11 20:42ID:???
>>363
5.8は使ってないので的外れかもしれんが。
5.6用しかないというのはどこでわかったんでそ?
ppmでも見つからない?
0369nobodyさん02/12/11 20:59ID:???
>>367
じゃぁいちいち、perlのスクリプトがある場所までcdしてからやらないといけないのですか?
毎回cdするのは結構面倒だと思うんですけどどうなんでしょうか。
0370nobodyさん02/12/11 21:03ID:3ApX3k5Y
面倒だと思うなら、useしませう。
0371nobodyさん02/12/11 21:08ID:???
デスクトップでスクリプトはしらすのは・・ワラタ
0372nobodyさん02/12/11 21:32ID:IDueDvlE
>>368
そうなんです。Perl5.6用は見つかるんですが5.8用に全く行き当たらなくって。
グーグルしか使ってませんが。w
暇を見てぼちぼち探してみます。
>>365
いっぺんお使いのPerlにJcodeをインスコしてみてはどうでしょ。
コマンドプロムプトで

perl -MCPAN -e shell

してから、プロムプトがcpanに変化しますんで

>cpan install Jcode

でいけるかと。
0373nobodyさん02/12/11 21:57ID:???
>>371
え?デスクトップではしらすのはトーシローですか?
0374nobodyさん02/12/11 22:10ID:a27i1ZyR
半角スペースで区切られたファイルを split を使って並び替えたい&いらないものを破棄したいんですが
上手くいきません。Perl5を使っています。

#!/usr/bin/perl

$file = 'split.txt';

open(IN,$file);
@data = <IN>;
close(IN);
foreach(@data){
($1,$2,$3,$4) = split(/ /,$_);
$newdata = "$4,$3,$2";
open(OUT, ">$file");
print OUT "$newdata\n":
close(OUT);
}
exit;

これを走らせると
Modification of a read-only value attempted at split.cgi line 9.
と split の部分にエラーが出てしまいます。
どうしたらいいんでしょうか?
0375nobodyさん02/12/11 22:15ID:qA0+bOBO
>>374
$1とか$2というのはマッチの特殊変数。
任意の値を代入することは出来ない。
変数名を別なのに変えるべし。
0376nobodyさん02/12/11 22:22ID:???
>>373
もしくはヘビーユーザー( ´∀`)

>>374
同じファイル2回もopenするのは無駄っぽいから、
>>331(の下のやつ)みたいに1回にまとめた方がいいかもね。
0377nobodyさん02/12/11 22:26ID:???
っていうかforeachの中でopenしてんのかぁ・・(´Д`;)
037837402/12/11 22:34ID:???
やっぱり OPEN させすぎですかね?(;´Д`)
とりあえず、出来ました。ありがとうです。
chomp(だっけ?) だかなんだかを使ってやるやり方があったような…
0379nobodyさん02/12/11 22:47ID:???
>374
つーか、chomp使ってないから、できたファイルは意図したようにはなってないはずだが?
0380ありゃ02/12/11 23:15ID:pgarahTm
すみません、ハッシュの全データの全角スペースを
削除したいのですが、
foreach (values %array){
s/ //g;
print "$_\n";
}
とした場合と、
foreach (values %array){s/ //g;}
foreach (values %array){print "$_\n";}
とした場合、私のローカル環境(パールのバージョン:5.6.0 built for i386-linux)
では、同じ結果が出るのですが、ほとんどのレンタルサーバ上で
実行すると、違った結果が出力されてしまいます。
なぜでしょう?
}

038135302/12/12 00:03ID:???
>>354
レス、サンクスです。

>モードは"+>"だよね。そのコードからすると。
"+>"と"+<"は意味は同じですよね?ちなみに僕は"+<"です。

open(FILE,"xxxx");
@file = ();
push @file, scalar <FILE> for 0..8;
seek(FILE,0,0);
print FILE "zzzz";
print = @file;
close(FILE);

こんな感じでいいんですよね?
いまいち”scalar <FILE> for 0..8”この辺の書き方が曖昧にしか理解できていないど、
本でも読んで理解したいと思います。

0382nobodyさん02/12/12 00:04ID:???
そんなバナナ
0383nobodyさん02/12/12 00:53ID:???
まさか、スクリプトとテスト用データの文字コードが違ってるとかの
話じゃないよね? っていうか「違った結果」の
希望とする値
実際の結果
の両方が見たいんですけど。
0384nobodyさん02/12/12 01:25ID:ZGG2sBOp
>>381
違うよ。
"+>"は内容を消す。
"+<"は内容がそのまま残ってしまう。
素直に一旦読んだ後書き込みで開き直した方がいい。
0385ありゃ02/12/12 01:56ID:DcSt6eP2
>>383
すみません、
%array = ('one' => '0 1','two' => '0 2','three' =>
'0 3');
とした場合、希望する結果は01と02と03が表示されることで、
私のローカル環境(パールのバージョン:5.6.0)
では、上下どちらの書き方でも同じ結果が出ますが、
実験した複数のサーバでは、
上の場合では0 1と0 2と0 3が表示され、
下の場合では01と02と03が表示されてしまいます。
実験したサーバのひとつは、パールのバージョンが5.0
だったので、単にバージョンの違いでしょうか・・・。
0386Q102/12/12 03:43ID:???
質問です。
ランダムリンクを作成して、
処理で
print "Location: http://xxxx.xx.xx/\n\n";
として飛ばしているのですが、
サンプルで自分のホームページを登録したのですが、
試して見ると、 302 FOUNDと表示されます。
この処理はアンカータグを使い、getの処理で呼び出しているのですが、
呼び出すページと飛ぶページが同じだと、302が表示される様なのですが、
これを回避する方法はないでしょうか。
「302を表示させずに、そのページへ飛ぶ。」というのは可能でしょうか。
0387マリモーマ02/12/12 05:04ID:ItnO3SiH
メタタグで 飛ばしてみたら?
&header;
print "<meta http-equiv=refresh content=0;url=http://$url>;";
exit;
0388Q102/12/12 05:39ID:???
ありがとうございます。やはり、それしかないですかね。
検討してみます。
ありがとうございました。
0389nobodyさん02/12/12 09:19ID:???
質問です。いまフリーのスクリプトを見て勉強中なのですが

> if ($mode %2 != 1) {

っていうのがあるんですけど、これの %2 って何ですか?
0390nobodyさん02/12/12 09:23ID:???
>>389
2で割った余り。
$modeを2で割って余りが1じゃなかったら
= $modeが偶数なら の意味だね。
0391nobodyさん02/12/12 09:30ID:???
>>386
ステータスヘッダ送ればいいじゃん。

print "Status: 200 OK\n";
039239102/12/12 09:33ID:???
あっダメだわ・・さ
039338902/12/12 11:25ID:???
>>390
>2で割った余り。
あっそうか。% と 2 がくっついてるので
「またPerlの記号的な記法か」と思ってしまいました。
ありがとうございます。
0394nobodyさん02/12/12 11:55ID:???
sendmailでReturn-Pathがうまく入らないんですけどなぜですか。
0395nobodyさん02/12/12 12:09ID:???
>>394
勝手に変えられないように設定してあるから。
039635302/12/12 15:33ID:???
>>381
と言うことは

open(IN,"<xxxxx");
flock(IN,2);
@file = ();
push @file, scalar <IN> for 0..8;
close(IN);
open(OUT, "+>xxxxx");
flock(OUT,2);
seek(OUT,0,0);
print OUT "zzzzz\n";
print OUT @file ;
close(OUT);

とした方が良いみたいですね。
なんとなくopenを2回するのは、あんまりいいことではないと思っていました。
"+<"と"+>"の違いも教えてもらって、感謝します。
039735302/12/12 15:34ID:???
>>384でした・・・
自分にレスした・・・
0398nobodyさん02/12/12 18:05ID:???
>>395
誰が設定してるんですか?
0399nobodyさん02/12/12 18:32ID:???
>>398
俺
040033602/12/12 19:14ID:BLMNLzB2
エラーつぶせました!!<<レス下さった方ありがとう。
ここ間違ってました。
sub decode {
if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("長すぎます"); }
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

# S-JISコード変換
&jcode'convert(*value,'sjis');
}
}←このカッコを忘れていた。

エラーメッセージよりだいぶ上(^^;

・・・でも動かない。なんでだろう。
ファイルへの書き込みが出来ていないみたいなんですが。。。

>>344
それはここに書き込む時に付け加えたので問題ないです(^-^;
040133602/12/12 19:18ID:BLMNLzB2
この部分なんですが、
#入力された内容をファイルを作って保存する。
sub words {
$file = "./pass.txt";
if($in{'pass'} eq ""){ &error("設定できませんでした"); }
open PD, ">$file" or &error("システムエラー発生");
@pwd = ('a'..'z','A'..'Z','0'..'9','.','/','%');
srand;
$kw = $MIX[int(rand(@pwd))] . $MIX[int(rand(@pwd))];
$words = crypt("$in{'word'}", $kw);
print PD "$words";
close PD;
}
@pwdの変数をちょっと変えているんですが、これは使っては駄目ですか?
(%とか/とか。)
#参考にした掲示板スクリプトでは中身が9までしかないです。
#それ以降は私の付け加え。
040233602/12/12 19:19ID:BLMNLzB2
↑ファイルへの書き込み、を行うサブルーチンです。
0403nobodyさん02/12/12 19:51ID:???
>>401
@MIXって @pwd じゃない?(別に@MIXがあるのかな)
あと、cryptの salt($kw) は '%' は使えません。
それ以外の64文字は使えるので、 int(rand(@pwd)) は int rand 64 でもOK。
0404nobodyさん02/12/12 20:01ID:???
すみません。頭悪いのでアルゴリズムが浮かびません。

以下のようなsort したデータがあります。

名前,点数というデータの形(配列)です。

山田,28
山田,39
佐藤,94
加藤,83
加藤,28
加藤,28
木下,23
木下,33

ここから、各人の合計点を出したいのですが、どうするのが良いでしょうか?
名前でuniqする方法は分かるのですが、点数を足していく方法がわかりません。
ヒントだけでよいので、お願いします。
0405nobodyさん02/12/12 20:07ID:ZGG2sBOp
>>404
@dataに入ってるとして、
%hash=();
for (@data) { my @array = split/,/; $hash{$array[0]} += $array[1]}
で%hashに入る。
0406nobodyさん02/12/12 21:01ID:???
>>404
すげーー!目からウロコ。thanx

12行位かかって書いてたのに、一行って!(for は foreachでなくてもOK?)
平均点(合計点 / 名前の出現回数)を出すには、

%hash=();
$no =1;
for (@data) {
my @array = split/,/;
$hash{$array[0]} += $array[1];

if ( $prev_name eq $array[0]){ $no ++; }else{ $no = 1; }
$avg = $hash{$array[0]} / $no;
$prev_name = $array[0];

}

??? とか? やっぱ頭悪い。
0407nobodyさん02/12/12 21:16ID:???

割り算の後に小数点を下2桁まで表示したいのですが、

sprintf("%4.2f",$a) すると割り切れる時でも小数点以下に 3456.00
と出てしまいます。

割り切れない場合、 1234.56
割り切れる場合 1000

と表示するにはどうしたらよいのでしょうか?
0408nobodyさん02/12/12 21:20ID:H3YHNRGs
最近、始めてPerlを使い出したんだけど
use strictってなんでみんな使わないの?
0409nobodyさん02/12/12 21:23ID:???
>>407
普通に条件分岐するのはダメ?

>>408
みんな使ってると思うよ。
0410nobodyさん02/12/12 21:26ID:???
>>409
そうかなあ。ちゃんとしたPerl使いならもちろん
使っているだろうけど、CGIだけのためにPerlやってる
人ってなんかそういうのあんまり意識してないような。。。
0411nobodyさん02/12/12 21:33ID:???
>>407
$a =~ s/\.00$//;

>>410
巷で配布してるCGIはピンからキリまであるからなあ。
あと配布用にPerl4でも動くようにしてるところもあるでしょうし。
0412nobodyさん02/12/12 21:35ID:???
>>411
>配布用にPerl4でも動くようにしてるところもあるでしょうし
なるほど。それもあるかもしれませんね。
0413ななし02/12/12 22:17ID:???
隠しページがありそうなとこのソースみたら文字化けしていました。
なんとか方法は分かったんですが、ブラウザにドラッグするののやり方が
わかりません。おしえてください。おねがいします。
0414nobodyさん02/12/12 22:20ID:???
・・・
0415nobodyさん02/12/12 22:21ID:LUwqAPKo
>>407
ありがとうございます。
そういう方法しかないんですかね。結局。

あるサイトに

$a = int($a * 100)/100;

ってあったんですけど、これだと無駄が多そうですよね。

$a =~ s/\.00$//;
$a =~ s/\.0$//;

の方が早そうですね。
0416nobodyさん02/12/12 22:39ID:???
>>413
日本語を勉強してください
大体の意図を頑張って汲み取ると、EUCとかの文字コードに対応してるエディタを使え、と
0417nobodyさん02/12/12 22:50ID:rgoFlUwc
★最新情報★
★http://yahooo.s2.x-beat.com/linkvp/linkvp.html★
0418n02/12/12 22:51ID:rgoFlUwc
★最新情報★
★http://yahooo.s2.x-beat.com/linkvp/linkvp.html★
0419nobodyさん02/12/12 23:05ID:???
>>415
int $a でも逝けるっぽい
0420nobodyさん02/12/12 23:16ID:???
>419
>407を読み直した方がいいかも。
0421nobodyさん02/12/12 23:19ID:i62/L17Z
sprintf($a=~s/\.0+//?"%4f":"%4.2f",$a)
0422nobodyさん02/12/13 00:03ID:???
>>407
$b=sprintf('%4.2f', $a); a+=0;
042342202/12/13 00:04ID:???
あ
$b+=0;
の間違い。
0424nobodyさん02/12/13 00:12ID:???
>>406
ベタだけど、

%hash1=%hash2=();
for (@data) {
my @array = split/,/;
$hash1{$array[0]} += $array[1];
$hash2{$array[0]}++;
}
$hash1{$_} /= $hash2{$_} for keys %hash1;

でどうかな。(結果は%hash2)
042539802/12/13 00:53ID:???
誰か本当のことをおしえてください。
0426nobodyさん02/12/13 07:15ID:???
>>425
偉い人 夜勤くらい
042742402/12/13 08:15ID:???
結果は%hash1でした。
0428nobodyさん02/12/13 11:37ID:???
>>425
検索すれば理由は簡単に判りそうな気がするけど・・・

ttp://www.ryu.dyn.to/cgi-bin/tree.cgi?action=clip&no=771
※※※これは「Return-Path」のみの検索キーで見付けた※※※

注)自力で調べる努力を怠ってる人はまともに相手をして貰えません
042942502/12/13 14:46ID:???
>>428
あなたみたいな人が居るので甘えちゃうんです。ごめんなさい。
0430nobodyさん02/12/13 15:58ID:???
>>407
の者ですが。色んな方法がありますね。

sprintf($a=~s/\.0+//?"%4f":"%4.2f",$a)

と

$b=sprintf('%4.2f', $a); $b+=0;

が一番シンプルそうです。

>>419
int $a ではいけないですよね?
■ このスレッドは過去ログ倉庫に格納されています