• ベストアンサー

Argument "\\n" isn't numeric in numeric comparison (<=>)

初心者です。よろしくお願いします。 WindowsXP,ProffesionalでApache,LANの中だけでやっています。 以下の(1)、(2)が Apache の error.log に 非常にたくさん出てきて困っています。 (1) Argument "-" isn't numeric in numeric comparison (<=>) at C:/ApacheGroup/--- line 235., referer: http://--- (2) Argument "\\n" isn't numeric in numeric comparison (<=>) at C:/ApacheGroup/--- line 235., referer: http://--- このファイルは、だいたい以下のようになっています。 #!/usr/bin/perl -T use strict; use warnings; use CGI qw(-debug :standard); # 45個のファイルから一行目を取り出します。 open(FILE, "../4k/4k01/+score.txt") or die "$!"; my $line1 = <FILE>; close(FILE); #------------------------------------------ open(FILE, "../4k/4k02/+score.txt") or die "$!"; my $line2 = <FILE>; close(FILE); #------------------------------------------ # これを繰り返します。 #------------------------------------------ open(FILE, "../4k/4k45/+score.txt") or die "$!"; my $line45 = <FILE>; close(FILE); #------------------------------------------ # 取り出した行の例は # 82,問題番号,1548,2009年07月15日 14時11分20秒 ( = $line1) # です。 # この行は、別の cgi ファイルで、以下のように書き込んだものです。 --------------------------------------------- # open(FILE, '<+score.txt') or die "$!"; # my @data = <FILE>;my ($e, $f , $g, $h) = split(/,/, $data[0]); # close(FILE); # my $data2 = $e +1; # open(FILE, '>+score.txt') or die "$!"; # print FILE $data2; # print FILE (",問題番号,$num,$year年$mon月$day日 $hour時$min分$sec秒\n"); ------------------------------------------- # これを @array に 入れます。 my @array = ("$line1,4k01","$line2,4k02", ---繰り返し--,"$line45,4k45"); # ソートして、表示します。 @array = sort { (split(/\,/,$b))[0] <=> (split(/\,/,$a))[0]} @array; #-- line 235 for my $val (@array){ #-- line 236 print $val . "<br>"; #-- line 237 } すると、--- 104,問題番号,1541,2009年07月15日 14時26分46秒 ,4k06 102,問題番号,1541,2009年07月15日 14時29分43秒 ,4k18 94,問題番号,1541,2009年07月15日 14時20分07秒 ,4k20 82,問題番号,1541,2009年07月15日 14時30分14秒 ,4k25 以下省略 --- と 表示されます。 error.log に表示されないようにするには、どうしたら、いいでしょうか? お教えください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

perl -Mstrict -Mwarnings -e 'print "foo" <=> "bar"' Argument "bar" isn't numeric in numeric comparison (<=>) at -e line 1. Argument "foo" isn't numeric in numeric comparison (<=>) at -e line 1. たぶん"-"と"\\n"(これ改行文字をシングルクォートで囲んでませんか・・・?)を比較してるんだと思いま す。 元のファイルが間違ってる可能性が高いです。

ttaa100kkaa
質問者

お礼

ご回答、まことにありがとうございました。 open(FILE, "../4k/4k01/+score.txt") or die "$!"; my $line1 = <FILE>; close(FILE); を open(FILE, "../4c/4k01/+score.txt") or die "$!"; my $line1a = <FILE>; my $line1 = "$line1a - 4k01"; close(FILE); と直しました。そして my @array = ("$line1,4k01","$line2,4k02", ---繰り返し--,"$line45,4k45"); を my @array = ($line1,$line2, ---繰り返し--- ,$line44,$line45); としました。 そして、元のファイルが空のとき、 0, を書き込みました。 そうしたら、うまくいきました。 ありがとうございました。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「元のデータに問題がないかどうかわからない」というなら, まずそれを確かめてください. データ自体が間違っていたら話にもなりませんよ.

ttaa100kkaa
質問者

お礼

ありがとうございます。よく考えて見ます。すみませんでした。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

とりあえず確認したいんですが, 元のデータは問題ないですか? あと, ソートせずに出力したら問題ないんでしょうか?

ttaa100kkaa
質問者

お礼

ありがとうございます。ソートせずに for (my $i = 0; $i < 46; $i++){ print $array[$i]; print "<br>"; } としたら、そして、 no warnings qw(uninitialized); としたら、Apache の error.log には何も表示されません。 問題ない、と思われます。 元のデータは問題ないのか、どうか、は、私にはわかりません。元のデータはテキストファイルから読み込んだ1行です。 すみません。

関連するQ&A