Perl洗脳開始

「はじめてのPerl」ポチったの、今朝届くと思ってワクワクしてたのに明日だった
仕方ないからはてな教科書読んでみてる

環境は昨日構築した
Ubuntu上にperlbrewで5.18で……
Perlにもvirtualenvみたいなのあるのかな?



自力でクラス書く所で詰まった
引数(@_)から$selfとか取り出す時にカッコつけるの忘れちゃう
こんな感じに間違える↓

package Fibonacci;
use strict;
use warnings;


sub new {
    my $class = @_;
    my $self = bless {
        n_now => 1,
        n_next => 1,
    }, $class;
    return $self;
}

sub reset {
    my $self = @_;
    ($self->{n_now}, $self->{n_next}) = (1,1);
    return $self;
}

sub next {
    my $self = @_; 
    my $res = $self->{n_now};
    ($self->{n_now}, $self->{n_next}) = ($self->{n_next}, $self->{n_now} + $self->{n_next});
    return $res;
}

1;


正しくはカッコつける。これってコンテキストを間違ってるって事なの

package Fibonacci;
use strict;
use warnings;


sub new {
    my ($class) = @_;
    my $self = bless {
        n_now => 1,
        n_next => 1,
    }, $class;
    return $self;
}

sub reset {
    my ($self) = @_;
    ($self->{n_now}, $self->{n_next}) = (1,1);
    return $self;
}

sub next {
    my ($self) = @_;    
    my $res = $self->{n_now};
    ($self->{n_now}, $self->{n_next}) = ($self->{n_next}, $self->{n_now} + $self->{n_next});
    return $res;
}

1;

shift使ったほうがまだわかりやすい

package Fibonacci;
use strict;
use warnings;


sub new {
    my $class = shift;
    my $self = bless {
        n_now => 1,
        n_next => 1,
    }, $class;
    return $self;
}

sub reset {
    my $self = shift;
    ($self->{n_now}, $self->{n_next}) = (1,1);
    return $self;
}

sub next {
    my $self = shift;    
    my $res = $self->{n_now};
    ($self->{n_now}, $self->{n_next}) = ($self->{n_next}, $self->{n_now} + $self->{n_next});
    return $res;
}

1;