← Back to team overview

sslug-teknik team mailing list archive

Re: Gennerering af liste / gennemløb af predef. scope

 

"Michael Schmidt" <m.schmidt@xxxxxxxx> writes:

>> Hvis du kan nøjes med a-z eller A-Z kan perl:
>>
>> perl -le '$n = pop(); $ext = "aaa"; print "Fast gentagen tekst her
>> ",  $ext++ for 1 .. $n' 30

[...]

> Tæt på, men ikke helt nok.

Nå, så kan jeg ikke lige gøre det på en linje:

#!/usr/bin/perl -l

$lines = shift;
$lines ||= 10;

sub make_inc {
        my @order = @_;
        my %index;

        my $i = 0;
        $index{$_} = $i++ for @order;

        return sub {
                my @string = reverse split //, $_[0];

                for (@string) {
                        $_ = @order[ ($index{$_} + 1) % scalar(@order) ];
                        last unless $_ eq $order[0];
                }

                return join "", reverse @string;
        }
}

my $inc = make_inc(a .. e, A .. E, 1 ..4);

$text = "aaaa";

for (1 .. $lines)  {
         print "foo: $text";
         $text = &$inc($text);
}
__END__

Du stiller på hvilke tegn den bruger i linjen:

  my $inc = make_inc(a .. e, A .. E, 1 ..4);

make_inc() er en funktion der tager en liste af tegn og genererer en
passende inc()-funktion. Hvis der er et tegn der optræder flere gange
i listen er resultatet udefineret.

-- 
 Peter Makholm     |         Perhaps that late-night surfing is not such a
 peter@xxxxxxxxxxx |           waste of time after all: it is just the web
 http://hacking.dk |                                              dreaming
                   |                                    -- Tim Berners-Lee


Follow ups

References