Perl - cvičení 3

Operátor autoinkrementu a rozsahu v seznamovém kontextu

print "$_," for "aa".."zz";
print "$_," for "a".."zz";
print "$_," for "a1".."zz10";
...
...
print "$_," for "aa12".."za"; # nevytiskne nic

Bitová negace

print ~0;
printf "%b",~0;
print length sprintf "%b",~0;

Řetězcová interpretace odkazu

print \1;
print \@ARGV;
print \%ENV;

Zbytek po celočíselném dělení

print 10 % 3;   # 1
print -10 % 3;  # 2
print 10 % -3;  # -2
print -10 % -3; # -1

Operátor x

@x = (1,2); print join ", ", (@x) x 5; # 1, 2, 1, 2, 1, 2, 1, 2, 1, 2
@x = (1,2); print join ", ", @x x 5    # 22222

Operátor testování souborů

# vytvoreni souboru  pro testovani
open F, ">data";
print F "abcd";

print -T 'data';   # vytiskne 1
print -B 'data';   # vytiskne ''

open F, ">data";
print F "abcd\1\2";

print -T 'data';   # vytiskne 1
print -B 'data';   # vytiskne ''

open F, ">data\1\2\3";
print F "abcd";

print -T 'data';   # vytiskne ''
print -B 'data';   # vytiskne 1

open F, ">data";
print F "abcd\0";

print -T 'data';   # vytiskne ''
print -B 'data';   # vytiskne 1


# jeden program
open F, ">data";
print F "abcd\1\2\3";

print -T 'data';   # vytiskne 1
print -B 'data';   # vytiskne 1
# pro konec souboru nebo prazdny soubor vzdy vraci 1

# jeden program
open F, ">data";
print F "abcd\1\2\3";
close F;  # ukazatel v souboru dame na zacatek
print -T 'data';   # vytiskne ''	
print -B 'data';   # vytiskne 1
sub e {return 2.718}
print 10*e;   # vytiskne 27.18
print 10*-e;  # vytiskne 0


sub q {return 2.718}
print 10*-q;  # chyba, operator testovani souboru -q neexistuje

Pojmenované unární operátory

$_ = 1;
print cos < 1;      # chyba
print cos / 2;      # chyba

Relační operátory

print 1 == 2;
print '001' == 1;
print 'abc' == 'xyz';
print 1 eq 2;
print '001' eq 1;
print 'abc' eq 'xyz';

@x=(1,2); @y=(1,2,3);
print @x==@y;    # nic
@y=('a','b');
print @x==@y;    # 1

print (1,2,3) == ('a','b','c',3);    # vytiskne 123 :-)
print + (1,2,3) == ('a','b','c',3);  # vytiskne 1

Logické operátory se zkráceným vyhodnocováním

$x = 1; $y = 2; $z = 3;
print $x || $y || $z;   # vytiskne 1

$x = 0; $y = 0; $z = 3;
print $x || $y || $z;   # vytiskne 3

$x = 0; $y = ''; $z = 0;
print $x || $y || $z;   # vytiskne 0

$x = 0; $y = ''; $z = '';
print $x || $y || $z;   # vytiskne ''

Operátor rozsahu řádků

Soubor data:
1
2
.
.
.
8
9
10
KONEC

open F, "data";
while (<F>) {
        print if 3..5;  # vytiskne 3\n4\n5\n
}
Soubor data:
#1
#2

3
4
KONEC

open F, "data";
while (<F>) {
        print if 1..!/^#/;  # vytiskne #1\n#2\n\n
}

Podmínkový operátor

$x = 1; $y = 1;
for (1..10) {
        ($x>$y?$y:$x)++;

        print "\$x je $x, \$y je $y\n"
}

# vytiskne
$x je 2, $y je 1
$x je 2, $y je 2
$x je 3, $y je 2
$x je 3, $y je 3
$x je 4, $y je 3
$x je 4, $y je 4
$x je 5, $y je 4
$x je 5, $y je 5
$x je 6, $y je 5
$x je 6, $y je 6


$x = 1; $y = 1;
for (1..10) {
       $x>$y?$y:$x++;

       print "\$x je $x, \$y je $y\n"
}

# vytiskne
$x je 2, $y je 1
$x je 2, $y je 1
$x je 2, $y je 1
$x je 2, $y je 1
$x je 2, $y je 1
$x je 2, $y je 1
$x je 2, $y je 1
$x je 2, $y je 1
$x je 2, $y je 1
$x je 2, $y je 1