Strona 1 z 1

[SOLVED][perl] sleep i zmienna jako wyraz

: 01 wrz 2009, 14:13
autor: Goten22
Mam następujące pytanie (w perlu jestem jeszcze nowy), jak zrobić żeby zmienna była wyrazem a nie liczbą, np.

Kod: Zaznacz cały

$komenda = <STDIN>;
if ($komenda == wyraz) {
print "jakiś tekst";
Jeżeli tak zrobię nic to nie daje, ale to działa normalnie.

Kod: Zaznacz cały

$komenda = <STDIN>;
if ($komenda == 1) {
print "jakiś tekst";
Jak zrobić żebym mógł wpisać wyrazy, a nie liczby?

Mam jeszcze drugie pytanie co do opcji sleep. Wydaje mi się, że nie działa ona poprawnie, tzn. chciałbym zrobić takie coś

Kod: Zaznacz cały

print "W";
sleep 1;
print "i";
sleep 1;
itd. itd.
Dałoby mi to efekt takiego jakby pisania. Ale sleep chyba nie jest do tego najlepszy. Może jest jakaś lepsza komenda do tego?

Odp: [perl] sleep i zmienna jako wyraz

: 01 wrz 2009, 14:31
autor: kabanek
co do pierwszego pytania to może spróbuj tak:

Kod: Zaznacz cały

$komenda = "<STDIN>";
nie umiem za dobrze perla więc niech się wypowiedzą mądrzejsi :D

Odp: [perl] sleep i zmienna jako wyraz

: 01 wrz 2009, 14:39
autor: beluosus
Nie bardzo rozumiem pierwszy problem ale chyba nie wiesz, że perl ma słabą typizację.
Drugi problem - chodzi o buforowanie wyjścia, które w Twoim wypadku trzeba wyłączyć:

Kod: Zaznacz cały

$| = 1; # wyłączenie buforowania wyjścia
sleep(1);
print("a");
sleep(1);
print("b");
sleep(1);
print("c");

Odp: [perl] sleep i zmienna jako wyraz

: 01 wrz 2009, 14:54
autor: leon1313
To na dzień dobry:
http://www.shlomifish.org/lecture/Perl/ ... tring.html
A druga sprawa nazywa się ładnie z anielskiego "non-buffering output" czy jakoś tak.
Realizowany jest poprzez ustawienie zmiennej specjalnej $| na 1:

Kod: Zaznacz cały

#!/usr/bin/perl
use strict;
use Time::HiRes qw(usleep);
$| = 1;


my $microseconds = 500000;
my $one_word="1234567890";
my @one_word_array = split('', $one_word);

foreach (@one_word_array){
print $_ ;
usleep $microseconds;
}
print "\n";
/edit..za długo to pisałem, wyścignęli mnie :-)

Odp: [perl] sleep i zmienna jako wyraz

: 01 wrz 2009, 20:10
autor: el.pescado
Do porównywania napisów służy operator eq a nie ==.

Odp: [perl] sleep i zmienna jako wyraz

: 01 wrz 2009, 21:11
autor: thalcave

Kod: Zaznacz cały

if ($komenda == wyraz)
Jak kolega wyżej wspomniał eq nie ==, a dwa lepiej wyraz umieścić w " ".

Odp: [perl] sleep i zmienna jako wyraz

: 02 wrz 2009, 19:42
autor: Goten22
Ok, wielkie dzięki za pomoc ;)