sironekotoroの日記

Perl で楽をしたい

Perl言語プログラミングレッスン[入門編] 第10章

サブルーチン

  • 「あ!これ進研ゼミPerl入学式でやったところだ!」
  • ってことで、あまり苦労せずに進むことが出来たでござる。

練習問題10-3

use strict;
use warnings;

my @data = ( 'How', 'I', 'wonder', 'what', 'you', 'are.', '' );
print join( ', ', &get_length_list(@data) ), "\n";

sub get_length_list {
    my @word_list = @_;
    my @word_count;
    for my $i (@word_list) {
        push @word_count, length $i;
    }
    return @word_count;
}

練習問題10-4

use strict;
use warnings;

print &factorial(-1), "\n";
for ( my $n = 0; $n < 10; $n++ ) {
    print &factorial($n), "\n";
}
print &factorial(10.5), "\n";

sub factorial {
    my $number = shift @_;
    $number = int $number;
    my $fac = 1;

    if ( $number < 0 ) {
        return 0;
    }
    elsif ( $number == 0 ) {
        return 1;
    }
    else {
        for my $i ( 1 .. $number ) {
            $fac *= $i;
        }
        return $fac;
    }
}

練習問題10-6

use strict;
use warnings;

my @data = &get_data;
print join( ', ', @data ), "\n";

my $data = &get_data;
print $data;

sub get_data {
    my ( $sec, $min, $hour, $day, $mon, $year ) = localtime;
    $year += 1900;
    $mon  += 1;
    unless ( defined(wantarray) ) {
    }
    elsif (wantarray) {
        return ( $year, $mon, $day );
    }
    else {
        $mon = '0' . $mon if ( $mon < 10 );
        $day = '0' . $day if ( $day < 10 );
        return ("$year-$mon-$day");
    }
}