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
 

Re: [PERL] For meget i en variabel....??? eller hvad ?



On Mon, 1 Nov 1999, Lennart Hansen wrote:

> Det drejer sig om at jeg for formeget input in i en variablel, jeg
> bruger en <STDIN> til at modtage input, og hvis der blever tastet fejl 1
> gang bliver der til føjet 2 i output hvis jeg skriver rigtigt gangen
> efter... Når jeg siger output mener jeg den sidste print.

Jeg tror det er det kald til &post() der forvirrer dig -- det er altså et
subrutine kald så den kommer tilbage når det er færdigt og eksekverer
resten af funktionen. Så forløbet er således:

hovedprogram
kald post
  post -- led efter bruger
  bruger ikke fundet:
  kald post igen
    post -- led efter bruger
    bruger fundet:
    udskriv bruger
  (den anden post bliver nu færdig)
  udskriv bruger
tilbage til hovedprogrammet


Nå her er nogle kommanterer til dit Perl script ellers:

1) brug altid -w switchen til perl (#!/usr/bin/perl -w) i toppen

2) brug "use strict". Den vil tvinge dig til at deklarere alle de variabler
   du vil have globale som globale. Få variabler burde være globale!

3) Brug "use diagnostics" for at bedre kunne forstå de fejlbeskeder der
   kommer fra 1) og 2)


> $user_found = "0";

Hvorfor "0" ? "0" og 0 ville gøre det samme her.

> print("
> ################################################################\n");
> print(" #                                                             
> #\n");

I stedet for brug følgende:

print <<EOF;
##############################
#   Indtast postmatser       #
##############################
EOF


> print(" Indtast her (postmaster): ");

Får du overhovedet den prompt at se? Du kan printe til STDERR i stedet for
for at det ikke bliver bufferet.

Du behøver som regel ikke at have paranters omkring funktionsparametre.

> $postmaster = <STDIN>;
> chop ($postmaster);

Du bør bruge chomp i stedet for. Se perldoc -f chomp.

>     if (open(passwd_file, "/etc/passwd")) {

Brug altid kun store bogstaver til file-handles, så du kan se forskel på
dem.

I stedet for at gennemsøge passwordfilen selv, brug getpwnam rutinen.

>     if ($user_found eq "0") { &post; }

I stedet for at kalde rutinen rekursivt bør du nok have en løkke.

>     open(opret_i_visual, ">>/var/qmail/control/visualdomains");

ALTID check efter om en open fejler. ALTID skriv noget i stil med:

open (F, ">>filnavn") or die "Cannot open filnavn: $!";

>         for ($split) {
>         s/([a-z]+)\./;
>         /ex;

øh, hvad er dog det? :) 


Hvilke Perl bøger har du? Du bør nok have og læse igennem "Learning Perl".


-- 
==============================================================================
Erwin Andreasen   Herlev, Denmark <sslug@sslug>          UNIX System Programmer
<URL:http://www.andreasen.org>              <*>              Goodbye, Richard!
==============================================================================



 
Forside   Tilmelding   Postarkiv   Oversigt   Kalender   Søg

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