Avatar billede vedikkebedre Nybegynder
08. september 2004 - 09:43 Der er 5 kommentarer og
1 løsning

STDOUT virker ikke

Hejsa

Jeg har et helt nybegynderspørgsmål, nemlig hvorfor min kode ikke virker!??  :)

Da jeg lige er startet på at arbejde med PERL har jeg allieret mig med bogen: "Programming PERL" fra "O´REILLY". Da jeg tidligere har lavet lidt jave, har jeg fundet et PERL-plugin til Eclipse - EPIC.

Min kode er som følger:

print STDOUT "Enter a number: ";
$number = <STDIN>;
print STDOUT "\nThe number is $number";

I bogen skriver de at dette vil skrive første linie ud - hvorefter man så skal indtaste et tal - der så til sidst vil blive skrevet ud igen. En avanceret "Hello World" !!. Men sikkert et godt sted at starte  :)

Problemet er bare at første linie ikke bliver skrevet ud  :(
Men hvis jeg skriver et tal i consolen, kommer det hele ud.

Eksemepel på Console:
1234
Enter a number:
The number is 1234

Hvad går galt ????

Da jeg mister lidt at tilliden til en bog der (muligvis) har fejl så tidligt ( og i mine øjne basal eksempel), er der så nogle der har andre bud på gode "Kom i gang med PERL bøger"?. Eller andre Editorer - jeg kører winXP??

Mvh
vedikkebedre
Avatar billede erikjacobsen Ekspert
08. september 2004 - 09:45 #1
print STDOUT "Enter a number: \n";
Avatar billede vedikkebedre Nybegynder
08. september 2004 - 09:46 #2
Giver kun et linieskift i resultatet:

123
Enter a number:

The number is 123


Kan det være et compiler-problem i EPIC plugin??
Avatar billede erikjacobsen Ekspert
08. september 2004 - 09:49 #3
Det er bare noget med buffering. Prøv så:

select STDOUT;
$|=1;

før dine linier.
Avatar billede vedikkebedre Nybegynder
08. september 2004 - 09:53 #4
Hej Erik

Det virker sådan her:

select STDOUT;
$|=1;
print STDOUT "Enter a number: ";
$number = <STDIN>;
print STDOUT "\nThe number is $number";

Er det fordi STDOUT skal instatieres først, for derved at sikre at der ikke er buffered noget i den fra tidligere?

$|=1;  # Hvad bruges den til i denne her sammenhæng?

Smid et svar og få dine velfortjente point !
Avatar billede erikjacobsen Ekspert
08. september 2004 - 09:59 #5
Ingen point til mig, tak. Svar selv, accepter eget svar.

Der er forskel på hvordan buffering er sat i forskellige Perl-udgaver/platforme.
Normalt er STDOUT liniebuffered, så et linieskift burde virke, men du har een hvor
den er helt buffered. $|=1; sætter STDOUT til at flushe, dvs. udskrive bufferen
efter hver print.
Avatar billede vedikkebedre Nybegynder
08. september 2004 - 10:02 #6
Hej Erik

Takker for dine hurtige og præcise svar.

mvh
vedikkebedre
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester