Subroutine Perl

#!/usr/bin/perl
use warnings;
use strict;
sub fibonaccil {
    my ($count, $aref) = @_;
    unless ($aref) {
        # first call - initialize
        $aref = [1,1];
        $count -= scalar(@{$aref});
    }
    if ($count--) {
        my $next = $aref->[-1] + $aref->[-2];
        push @{$aref}, $next;
        return fibonaccil($count, $aref);
    } else {
        return wantarray?@{$aref}: $aref->[-1];
    }
}
print scalar(fibonaccil(10)), "\n";
print scalar(fibonaccil(10, [2, 4])), "\n";
my @sequence = fibonaccil(10);
print "Sequence: @sequence \n";
sub fibonacci2 {
    my ($count, $internal) = @_;
    if ($count <= 2) {
        return $internal ? [1,1] : 1;
    } else {
        my $result = fibonacci2($count -1, 'internal'); 
        my $next = $result->[-1] + $result->[-2];
        if ($internal) {
            push @{$result}, $next;
            return $result;
        } else {
            return $next;
        }
    }
}
foreach (1..20) {
    print "Element $_ is ", fibonacci2($_), "\n";
}