and it don't even run under strict, what I'm missing here ?
You are missing that the ~~ tells to repeat shifting @f1 even after it is empty. Trying to build yet another line after the third, shift @f1 returns an undefined value, which then - alas, cannot be dereferenced.
One solution:
my $foo = [('') x 9]; format = +-----------------------+ | @ @ @ | @ @ @ | @ @ @ |~~ @{ shift @f1 || $foo } |-------+-------+-------| | @ @ @ | @ @ @ | @ @ @ |~~ @{ shift @f2 || $foo } |-------+-------+-------| | @ @ @ | @ @ @ | @ @ @ |~~ @{ shift @f3 || $foo } +-----------------------+ . write;
You could also push the array reference filled with empty elements ($foo) onto @f1, @f2 and @f3.
my $foo = [('') x 9]; push @$_, $foo for \@f1,\@f2,\@f3; format = +-----------------------+ | @ @ @ | @ @ @ | @ @ @ |~~ @{shift @f1} |-------+-------+-------| | @ @ @ | @ @ @ | @ @ @ |~~ @{shift @f2} |-------+-------+-------| | @ @ @ | @ @ @ | @ @ @ |~~ @{shift @f3} +-----------------------+ . write;
In reply to Re: format issues
by shmem
in thread format issues
by Fox
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |