SkÃ¥ne Sjælland Linux User Group - http://www.sslug.dk Forside   Tilmelding   Postarkiv   Forum   Kalender   Søg
MhonArc Dato: [Date Prev] [Kronologisk oversigt] [Date Next]   TrÃ¥d: [Date Prev] [Oversigt trÃ¥de] [Date Next]   MhonArc
 

print(f) was: [PERL] Ignorere stdin hvis intet er angivet.



On Sat, 2 Aug 2003, Peter Makholm wrote:

> Jeg har *aldrig* brugt format og write.
>
> I langt de fleste tilfælde er en helt almindelig print nok. Husk at
> perl folder variable ud i strenge omgivet af dobbeltplinger:
>
> $a = 42;
> print "Værdien er $a\n"; # Værdien er 42

Nu er mit output som regel noget der kunne ligne følgende:

Maskine                        : Type            : Status
------------------------------------------------------------------------
arthur.earth.net               : database        : ikke til stede
ford.universe.org              : webserver       : online
jeltz.vogon.gov                : overvågning     : online
------------------------------------------------------------------------

Jeg kan ikke umiddelbart se hvordan jeg simpelt kan lave ovenstående
output med printf, med mindre jeg laver noget padding af mine variable.

Med printf er det rimelig simpelt:

printf("%-30.30s : %-15.15s : %-15.15s\n", $navn, $type, $status);

Alternativt med format/write:

format STDOUT=
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<< : @<<<<<<<<<<<<<< : @<<<<<<<<<<<<<<<
$navn                            $type             $status
.

foreach $navn (@maskine) {
  $type = find_type($navn);
  $status = find_status($navn);
  write;
}

format kan være rigtig god når man skal have justeret noget i en kolonne:

format STDOUT=
@<<<<<<<<<<<<<<<<<< : @||||||||||||| : @>>>>>>>>>>>>>>
$navn                 $type            $status
.

Hvilket laver henholdsvis venstrejusteret, centreret og højrejusteret
tekst, begrænset til den aktuelle kolonne.


Næsten alle scripts jeg laver har et eller andet form for output der
summere en del informationer på een eller to linjer. Format kan så bruges
når jeg skal gøre det over flere linjer per status, eller når jeg skal
centrere noget. Dejlig simpelt at gå til.


> I langt de fleste tilfælde er dette nok og gør det rigtige. printf er
> både langsommere (cirka en faktor 4) og lettere at lave fejl i. Og i


En faktor 4 kan jeg såmænd godt leve med i de fleste af scriptene. Det er
ikke selve udskriften der tager tid, men som regel indsamlingen af
oplysningerne.

Jeg havde - lige da jeg startede med perl - en lidt underlig oplevelse:

Jeg skulle læse en fil på nogle Mb. Da maskinerne jeg kørte på havde
rigeligt med ram, regnede jeg med at det jo måtte gå hurtigere at begynde
med at læse hele filen ind i et array, og så behandle arrayet. I stedet
viste det sig at gå temmelig meget hurtigere, hvis jeg istedet læste filen
i en while løkke. En lidt underlig følelse at se at læsning fra filsystem
var hurtigere end behandling af data i ram.


Med venlig hilsen
Bjørn Bille Højte
sslug@sslug



 
Forside   Tilmelding   Postarkiv   Oversigt   Kalender   Søg

 
 
Henvendelse vedrørende websiderne til <www_admin>. Senest ændret 2005-08-10, klokken 19:55
Denne side vedligeholdes af MHonArc .