How can I generate an array in Perl with 100 random values, without using a loop?
I have to avoid all kind of loops, like "for", foreach", while. This is my exercise, from my lab. I can't find a way to do solve this, because I am new in Perl.
In C, generating this array would by very easy, but I don't know how to do it in Perl.
For amusement value:
#!/usr/bin/perl
use strict;
use warnings;
$/ = \1;
open 0;
my @r = map rand,<0>;
print "@r\n";
for
, while
, until
:#!/usr/bin/perl
use strict; use warnings;
my @rand;
NOTLOOP:
push @rand, rand;
sleep 1;
goto NOTLOOP if 100 > time - $^T;
print 0 + @rand, "\n";
#!/usr/bin/perl
use strict; use warnings;
my $s = '-' x 100;
$s =~ s/(-)/rand() . $1/eg;
my @rand = $s=~ m/([^-]+)/g;
rand
invocations by hand is really passé:#!/usr/bin/perl
use strict; use warnings;
my $s = '(' . 'rand,' x 100 . ')';
my @rand = eval $s;
/dev/random
:#!/usr/bin/perl
use strict; use warnings;
$/ = \1;
my @rand;
seek \*DATA, 0, 0;
NOTLOOP:
scalar <DATA>;
push @rand, rand;
goto NOTLOOP if $. < 100;
__DATA__
goto
#!/usr/bin/perl
use strict; use warnings;
use autodie;
$/ = \1;
open my $F, '<', \( 1 x 100 . 0 );
my @rand or ¬loop;
sub notloop {
my $t = <$F>;
$t or return;
push @rand, rand;
goto \¬loop;
}
eval
version:#!/usr/bin/perl
use strict; use warnings; use autodie;
local $/ = \1;
open my $F, '<', \( 1 x 100 . 0 );
my @rand;
eval <<'NOLOOP'
my $self = (caller(0))[6];
<$F> or die;
push @rand, rand;
eval $self;
NOLOOP
;
Of course, all of these actually do contain loops, but they do not use the keywords you were barred from using.
NB: This question has brought out the wacko in me, but I must admit it is amusing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With