アプリ版:「スタンプのみでお礼する」機能のリリースについて

初心者です。よろしくお願いします。
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 に表示されないようにするには、どうしたら、いいでしょうか? お教えください。

A 回答 (3件)

とりあえず確認したいんですが, 元のデータは問題ないですか?


あと, ソートせずに出力したら問題ないんでしょうか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/29 14:11

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"(これ改行文字をシングルクォートで囲んでませんか・・・?)を比較してるんだと思いま
す。

元のファイルが間違ってる可能性が高いです。
    • good
    • 1
この回答へのお礼

ご回答、まことにありがとうございました。
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,
を書き込みました。
そうしたら、うまくいきました。
ありがとうございました。

お礼日時:2009/07/30 08:49

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

よ.
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/30 07:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!