ルモーリン

paizaコーディングスキルチェックのサンプルコードに挑戦

投稿:2017-07-15

サンプル。
my $input_lines = <STDIN>;
for ( $i = 0; $i < $input_lines; $i++) {
        my $s = <STDIN>;
        chomp($s);
        @s = split(/,/,$s);
        print "hello = ".$s[0]." , world = ".$s[1]."\n";
}
確かにオプション-cを付けてチェックしても警告出ないよ。
でもstrictやwarningsは付けとくでしょ?
付けない?
#!/usr/bin/perl -w

use utf8;
use warnings;
use strict;
use open IO => ":utf8";

use Encode::Locale;

binmode STDOUT, ":encoding(console_out)";

$| = 1;

my $input_lines = <STDIN>;
for ( $i = 0; $i < $input_lines; $i++) {
        my $s = <STDIN>;
        chomp($s);
        @s = split(/,/,$s);
        print "hello = ".$s[0]." , world = ".$s[1]."\n";
}
オプション-cでこうなる。
Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at sample_1.pl line 15.
Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at sample_1.pl line 15.
Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at sample_1.pl line 15.
Global symbol "@s" requires explicit package name (did you forget to declare "my @s"?) at sample_1.pl line 18.
Global symbol "@s" requires explicit package name (did you forget to declare "my @s"?) at sample_1.pl line 19.
Global symbol "@s" requires explicit package name (did you forget to declare "my @s"?) at sample_1.pl line 19.
sample_1.pl had compilation errors.
どうせデータの1行目とデータ行数は一致しないので1行目を破棄。 入力データはテキストファイルを標準入力にリダイレクトする可能性がある。 テキストの作成環境が実行環境と異なる場合はchompで改行文字が削除されない場合がある。 Linux/Windows/Macintoshのどれか分からないので行末の空白文字を全て削除。 1行のデータ数が2個とは限らないので先頭2個だけ取得。 この書き方で高々3分割。
#!/usr/local/bin/perl -w

use utf8;
use warnings;
use strict;
use open IO => ":utf8";

use Encode::Locale;

binmode STDOUT, ":encoding(console_out)";

$| = 1;

<STDIN>;
while (<STDIN>) {
        s/[\r\n]*$//;
        my ($hello, $world) = split /,/;
        print "hello = $hello, world = $world\n";
}