2010-11-19 4 views
0

Pourquoi cela ne fonctionne pas?Perl anonyme liste question

my $str = 'we,you,them,us'; 

print $(split($str,','))[0]; 

Je sais que je peux faire:

my @str = split... 

mais je me souviens il y a un moyen de sauter ça.

Merci,

+0

Heck, je ne peux même pas le compiler. Si '$ (...)' pourrait fonctionner pour quelque chose, vous pourriez obtenir autre chose que ce que vous attendez. Mais c'est un cas de la langue ne fonctionne tout simplement pas de cette façon. Vous avez peut-être obtenu quelque chose sur les * parenthèses de déréférencement scalaire * '$ {...}'. Qui plus est, il cherche dans '$ _' pour 'nous, vous, eux, nous' et ne le trouve pas. La chose que vous voulez diviser est l'argument * second *, le délimiteur est le premier. – Axeman

Répondre

8

Vous avez l'ordre des arguments en faveur de scission inverse. Il ne devrait pas y avoir de signe dollar devant les parens. Les travaux suivants (les forces de signe plus perl pour évaluer ce qui suit comme expression):

use strict; 
use warnings; 

my $str = 'we,you,them,us'; 

print +(split(',',$str))[0]; 
+3

Vous avez quatre caractères d'affilée, XYXY, où le premier Y fait quelque chose de complètement différent de ce que fait le second Y mais qui sont identiques en apparence. Ceci est déroutant. C'est pourquoi les gens passent à une grosse virgule dans ce scénario. En outre, l'argument principal plus de défaite ne vous permet d'économiser qu'un seul caractère au prix d'une autre source possible de confusion ou d'erreur. Je conseille donc de réécrire cette dernière ligne comme 'print ((split", "=> $ str) [0]);' à la place. N'est-ce pas * beaucoup * plus lisible? *** Je le pense certainement, mais votre kilométrage peut varier. – tchrist

+0

Merci! et où puis-je lire à propos de ces choses? été à la recherche de perltoc sous-man pages, mais ne pouvait pas trouver des choses liées. – snoofkin

+0

@ soulSurfer2010: Lisez à propos de quoi? La meilleure chose à faire est chdir dans le répertoire pod et grep libéralement. – tchrist

-1

L'utilisation [split $str, ',']->[0]; serait bien.

+0

pas besoin de créer un tableau anonyme – Arkadiy

5

Chaque fois que vous n'avez besoin d'accéder qu'à une petite partie de la valeur de retour d'une fonction, vous devez vérifier s'il existe une plus petite fonction de portée que vous pouvez utiliser. Dans ce cas, je pourrais utiliser une expression régulière:

print $str =~ /^([^,]*)/;