2017-06-25 2 views
3

Dans le schéma de raquette, il existe une structure de données appelée "port de chaîne" et vous pouvez en lire les données. Quelque chose de similaire à perl6? Pour des exemples, je veux atteindre ces résultats:perl6 Un port de chaîne similaire à Racket Scheme pour lire des données?

my $a = "(1,2,3,4,5)"; # if you read from $a, you get a list that you can use; 
my $aList=readStringPort($a); 
say $aList.WHAT; # (List) 
say $aList.elems; # 5 elements 

my $b = "[1,2,3]"; # you get an array to use if you read from it; 

my $c = "sub ($one) {say $one;}"; 
$c("Big Bang"); # says Big Bang 

La fonction EVAL ne fait pas tout à fait l'ensemble des tâches:

> EVAL "1,2,3" 
(1 2 3) 
> my $a = EVAL "1,2,3" 
(1 2 3) 
> $a.WHAT 
(List) 
> my $b = EVAL "sub ($one) {say $one;}"; 
===SORRY!=== Error while compiling: 
Variable '$one' is not declared. Did you mean '&one'? 
------> my $b = EVAL "sub (⏏$one) {say $one;}"; 

Merci beaucoup!

lisprog

+0

Je vois! Je l'ai maintenant. Merci smls !! – lisprogtor

Répondre

5

EVAL fait cela.

Le problème dans votre dernier exemple, est que chaînes entre guillemets doubles$ variables et interpolent { blocs et similaires. Pour représenter ces choses dans une chaîne littérale, que ce soit leur échapper avec antislashs ...

my $b = EVAL "sub (\$one) \{say \$one;}"; 

... ou utiliser une chaîne non interpoler littérale:

my $b = EVAL 'sub ($one) {say $one;}'; 
my $b = EVAL Q[sub ($one) {say $one;}];