2016-02-02 3 views
3

Я хочу, чтобы sub, который принимает аргумент и печатает аргумент, предоставленный в его исходной форме, вместе с оценкой аргумента.Как получить содержимое аргумента в подпрограмму Perl

В этом случае оценка аргументов проста, это значение по умолчанию! Это затрудняет фактический ввод в его первоначальной форме.

use strict; 
use warnings; 

sub echo { 
    my ($input) = @_; 
    # print "5 + 10 ="; 
    print $input; 
    print "\n"; 
} 

echo 5 + 10; 

Это будет выводить 15.

Хочу вывести 5 + 10 = "15"

+5

Вы не сможете, если не передать «5 + 10» в виде строки. '5 + 10' - выражение, результатом этого выражения является то, что передается в sub; ключ - это результат, который «не помнит» о том, как он появился. – raina77ow

ответ

2

Самое лучшее, что вы можете сделать, это передать строку, а затем оценить его с eval. Пример:

use strict; 
use warnings; 

sub echo { 
    my ($input) = @_; 
    print $input, "="; 
    print eval $input; 
    print "\n"; 
} 

echo "5 + 10"; 

Но всегда будьте осторожны с eval: не используйте свою функцию с пользовательским вводом.