2016-09-20 5 views
1

Существует этот маленький кусочек кода:

use strict; 
use warnings; 

sub checkDefinition { 
    my ($var, $desc) = @_; 

    if (defined $var) { 
    print "$desc: $var \n"; 
    } else { 
    print "$desc: undef \n"; 
    } 
} 

checkDefinition($ , "list separator"); 

Однако, когда я пытаюсь запустить его, я получаю следующее сообщение об ошибке:

>perl listSeparator.pl String found where operator expected at listSeparator.pl line 14, near "$ , "list separator"" 
     (Missing operator before "list separator"?) syntax error at listSeparator.pl line 14, near "$ , "list separator"" Execution of 
listSeparator.pl aborted due to compilation errors. 

так, возникает вопрос, как же один проход переменная разделителя списка в подпрограмму? Я попытался сделать ссылку на него:

my $lineSepRef = \$ ; 

однако, я получаю другую ошибку:

Semicolon seems to be missing at listSeparator.pl line 14. 

Можно ли передать $ в подпрограмму? Если да, то как?

FYI, работающие на окнах, клубничный Perl версии 5.016003

Спасибо заранее.

+0

Я смущен. Что вы подразумеваете под «разделителем строк»? Символ '$' используется внутри регулярных выражений для соответствия с концом строки. Но это не переменная, вы не можете использовать ее вне обычного выражения. – redneb

+0

Я понимаю, что это специальная глобальная переменная, содержащая символ разделителя строк. По крайней мере, согласно [Perl in a Nutshell] (http://docstore.mik.ua/orelly/perl4/perlnut/ch04_04.htm) – FrankRalphBob

+4

В ссылке есть опечатка. Правильная переменная для разделителя списков - '$ '' (см. [Perlvar] (http://perldoc.perl.org/perlvar.html#%24LIST_SEPARATOR)). – redneb

ответ

3

Я полагаю, что «разделителем строк» ​​вы имеете в виду специальную переменную Perl $/, которая является разделителем входных данных .

Вы можете передать значение, что в подпрограмму, как это, даже когда я не понимаю, почему вы хотите сделать это:

checkDefinition($/ , "list separator"); 

В случае, если вы имеете в виду другую специальную переменную, вы можете передать его так же. Вы можете найти значения всех специальных переменных Perl here.

EDIT:

Поскольку вы были на самом деле искали "разделителя списка", вы можете сделать следующее:

checkDefinition($" , "list separator"); 
+0

Спасибо, Inferno, но я думаю, что мой справочный материал был неправильным. Я искал $ "- разделитель списка, который был отмечен rednab. – FrankRalphBob

+0

Я добавил еще один пример для этого случая. Вы можете видеть, что это в основном то же самое, просто другая переменная. –

+1

Тогда мы отметим это как ответ. Благодаря! – FrankRalphBob