_  _   ,_
/^\/^\-/ @D
~(________/ PERL.LT
|L |L
L L
Straipsniai  Funkcijos 
Funkcijos/substr - pasiimti ar pakeisti string'o dalį
  • substr EXPR,OFFSET,LENGTH,REPLACEMENT
  • substr EXPR,OFFSET,LENGTH
  • substr EXPR,OFFSET

    Ištraukia substringą iš EXPR ir jį gražina. Pirmas simbolis yra poslinkiu 0 , ar koks nurodytas $[ (bet to geriau nedaryti). Jei OFFSET neigiamas (arba tiksliau mažiau $[ ), pradeda per tiek simbolių nuo stringo pabaigos. Jei LENGTH praleistas, gražina viską iki stringo pabaigos. Jei LENGTH neigiamas, palieka tiek simbolių nuo stringo pabaigos.

    Galima funckiją substr() naudoti kaip kairę reikšmę (lvalue), kuriuo atveju EXPR pats turi būti kairė reikšmė. Jei priskiriamas kas nors trumpesnis nei LENGTH, stringas susitrauks, o jei ilgesnis nei LENGTH, - išaugs, kad atitiktų. Norint kad jo dydis išliktų toks pat, gali reikėti padidinti, ar nukirsti reikšmę naudojant sprintf.

    Jei OFFSET ir LENGTH nurodo į substringą, kuris dalinai yra už string'o, tik dalis, esanti string'e yra gražinama. Jei substringas yra už abiejų stringo galų, substr() gražina neapibrėžtą reikšmę ir išveda įspėjimą. Kai panaudotas kaip kairė reikšmė, aprašant substringą, kuris visas yra už stringo ribų, duoda lemtingą klaidą. Štai pavyzdys, parodantis elgseną ribų atveju:

        my $name = 'fred';
        substr($name, 4) = 'dy';		# $name is now 'freddy'
        my $null = substr $name, 6, 2;	# returns '' (no warning)
        my $oops = substr $name, 7;		# returns undef, with warning
        substr($name, 7) = 'gap';		# fatal error

    Alternatyva substr() kaip kairę reikšmę yra aprašyti pakaitos stringą kaip ketvirtą argumentą. Tai leidžia pakeisti EXPR dalis ir gražinti kas buvo prieš vieną operaciją, kaip kad ir su splice().

    Jei lvalue gražinta substr yra panaudota po to, kai EXPR kaip nors pakeistas, elgesysgali būti nenuspėjamas ir greičiausia keisis ateity. Į šį įspėjimą įeina kodas kaip kad print(substr($foo,$a,$b)=$bar) or (substr($foo,$a,$b)=$bar)=$fud (kur $foo pakeistas per substringo priskyrimą ir tada substr panaudotas dar kartą0 arba kur substr() yra pavadintas per foreach ciklą arba perduotas kaip parametras arba rodyklė į jį yra paimama ir tada aliasas, parametras ar tariama rodyklė yr anaudojama po originalaus EXPR pakeitim arba priskiramas ir panaudojamas antrą kartą.

algirdas@perl.lt 2005.04.11 - $dabar