Ma variable $var
a la forme 'abc.de'. Qu'est-ce Substr faire exactement dans cette déclaration:Que fait le substrat de Perl?
$convar = substr($var,0,index(".",$var));
Ma variable $var
a la forme 'abc.de'. Qu'est-ce Substr faire exactement dans cette déclaration:Que fait le substrat de Perl?
$convar = substr($var,0,index(".",$var));
index()
trouve une chaîne dans une autre et renvoie l'index ou la position de cette chaîne.
substr()
retournera la sous-chaîne d'une chaîne entre 2 positions (à partir de 0).
En regardant ce qui précède, je soupçonne que la méthode d'index est mal utilisé (puisque sa définition est index STR, SUBSTR), et il devrait être
index($var, ".")
pour trouver le « » dans les « abc.de » et déterminer une sous-chaîne de « abc.de »
L'utilisation de substr implicite ici est -
substr EXPR,OFFSET,LENGTH
Depuis le décalage est 0, l'opération retourne la chaîne jusqu'à, mais non compris le premier '.' position (comme renvoyé par index (".", $ var)) dans $ convar. Jetez un oeil aux fonctions substr et index de perldoc pour clarifier davantage les choses.
La fonction Perl substr a le format suivant:
substr [string], [offset], [length]
qui renvoie la chaîne à partir de l'indice de décalage de l'indice de décalage + longueur
index a le format suivant:
index [str], [substr]
qui renvoie le indice de la première occurrence de substr dans str.
ainsi que substr ('abc.de', 0, index (".", $ Var)); retournera la sous-chaîne commençant à l'index 0 (c'est-à-dire 'a') jusqu'au nombre de caractères à la première occurrence de la chaîne "."
Donc $ convar aura "abc" dans l'exemple que vous avez
edit: putain, les gens sont trop vite: P Edit2: et Brian a raison sur l'index utilisé incorrectement
Pourquoi pas et trouve?
#!/usr/bin/perl my $var = $ARGV[0]; my $index = index(".",$var); print "index is $index.\n"; my $convar = substr($var, 0, $index); print "convar is $convar.\n";
Exécutez cela sur un tas de mots et voyez ce qui se passe.
En outre, vous pouvez taper:
perldoc -f index perldoc -f substr
Fabuleusement, vous pouvez écrire des données dans un sous-chaîne en utilisant substr comme le côté gauche d'une affectation:
$ perl -e '$a="perl sucks!", substr($a,5,5)="kicks ass"; print $a'
perl kicks ass!
Vous n'avez pas même besoin de coller à la même longueur - la chaîne s'élargira pour s'adapter.Techniquement, cela est connu comme l'utilisation de substr comme une lvalue.
ah, donc le code original est une façon élégante de dire chop ($ convar = $ var); :) – ysth
Inélégant, sûrement :-) –
La chose "intelligente" à propos de substr() est qu'il peut également être utilisé comme une lvalue. – Beano