← Back to team overview

sslug-teknik team mailing list archive

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

 

Tue, 20 Dec 2005 11:02:14 +0100, Peter Makholm <peter@xxxxxxxxxxx> skrev:

"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.

Tusind tak det virker fortrinlligt.


--
Med venlig hilsen
/Zmit/
RLU # 314205


References