Portál AbcLinuxu, 12. května 2025 06:20
sub check_pkgname($) { ($_[0] =~ m/^\w+(|(\-|\w)*\w)(|\/\w+(|(\-|\w)*\w))$/) ? $pkg = $_[0] : die "Not a valid package name: $_[0]!"; }a teď když spustím
check_pkgname("něco")
, tak to proběhne. Když to regexpu neodpovídá, tak vypíše:
Not a valid package name: (whatever)! at ./test.pl line 7.Proč tam píše "at ./test.pl line 7"? To nechci. Ovšem horší je tohle: jakmile se pokusím o
check_pkgname($_[0])
, tak hodí:
Use of uninitialized value in pattern match (m//) at ./test.pl line 7. Use of uninitialized value in concatenation (.) or string at ./test.pl line 7. Not a valid package name: ! at ./test.pl line 7.Napadlo mě zkusit ještě
check_pkgname(int $_[0])
, to hodí:
Use of uninitialized value in int at ./test.pl line 12.Co dělám špatně?
Když to regexpu neodpovídá, tak vypíše:Sorry, nevěděl jsem, že je to běžný chování funkceNot a valid package name: (whatever)! at ./test.pl line 7.Proč tam píše "at ./test.pl line 7"? To nechci.
die()
, jsem trouba die "Not a valid package name: (whatever)!\n";
shift
u, že?
Pokud volam $pkgname="nazev-1-2/balicku-xyz-321"; check_pkgname($pkgname);
, tak mi to probehne korektne.
Btw. moc jsem nepochopil proc je v tom regularnim vyrazu ^\w+(|(\-|\w)*\w)(|\/\w+(|(\-|\w)*\w))$
to \w za (\-|\w)*
Btw. moc jsem nepochopil proc je v tom regularnim vyrazuProtože chci aby to prošlo jen tehdy, když string bude končit na '^\w+(|(\-|\w)*\w)(|\/\w+(|(\-|\w)*\w))$
to \w za (\-|\w)*
\w
' a ne '-
'.
/^\w(?:[-\w]*\w)?(?:\/\w(?:[-\w]*\w)?)?$/To
(?:)
místo ()
je jen kvůli rychlosti - neplní se $n
registry. Pokud by ty slova nikdy nebyli méně než dvouznakové, tak by se dokonce dalo napsat/^\w[-\w]*\w(?:\/\w[-\w]*\w)?$/
$n
registr?
perlvar
$<digits> Contains the subpattern from the corresponding set of capturing parentheses from the last pattern match, not counting patterns matched in nested blocks that have been exited already. (Mnemonic: like \digits.) These variables are all read-only and dynamically scoped to the current BLOCK.Jinak \1..\9 by se mělo používat jen v m-regexpu nebo na levé straně (první parametr) s-regexpu.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.