2015-06-03 3 views
0

Я написал функцию для выполнения команды на удаленной машине.вызов функции perl с аргументами

Command : iptunnel add obs mode gre remote x.x.x.x local X.X.X.X ttl 225 $okey $ikey 

$okey $ikey значения передаются как аргументы.

Теперь, иногда я хочу выполнить команду WITHOUT $ okey и $ ikey.

Command : iptunnel add obs mode gre remote x.x.x.x local X.X.X.X ttl 225 

Теперь мой вопрос: как передать значения $ okey и $ ikey в качестве дополнительных аргументов. Если значения $ okey и $ ikey НЕ передаются, необходимо выполнить следующую команду.

iptunnel add obs mode gre remote x.x.x.x local X.X.X.X ttl 225 

Если переданы значения $ okey и $ ikey, тогда должна быть выполнена следующая команда.

iptunnel add obs mode gre remote x.x.x.x local X.X.X.X ttl 225 $okey $ikey 

Функция:

sub gre_testing { 
     my ($self,$okey,$ikey) = @_; 
     $self->execute('iptunnel add obs mode gre remote x.x.x.x local X.X.X.X ttl 225 $okey $ikey'); 
     return 1; 
} 

Вызов функции:

gre_testing(1000,1000); 
+2

Одиночные кавычки не интерполируют переменные. Используйте двойные кавычки. – choroba

+0

'my ($ self, $ okey, $ ikey) = (@_, (" ") x 3 - @ _);' –

+1

@ Сухой27 Это немного запутанно читать. Для меня хотя бы: | –

ответ

1

Назначают их пустую строку, если они не установлены:

unless (defined $okey && defined $ikey) 
{ 
    $okey = $ikey = ""; 
} 

Кроме того, как choroba заостренным вам нужно доу в кавычки execute, а не одинарные кавычки.

4

Если вы хотите, чтобы быть факультативным вам нужно на самом деле писать поддержку, что в вашем gre_testing подпрограммой:

sub gre_testing { 
    my ($self, $okey, $ikey) = @_; 

    # if these arguments are not passed 
    # use the empty string so no value is interpolated below 
    $okey //= ''; 
    $ikey //= ''; 

    $self->execute(
     "iptunnel add obs mode gre remote x.x.x.x local X.X.X.X ttl 225 $okey $ikey" 
    ); 
    return 1; 
} 

Другой вопрос, что строка, которую вы передаете выполнить котируется одинарные кавычки, так что ни один ваших переменных будут интерполированы. Используйте двойные кавычки.

Теперь в случае, если вы не хотите $okey и $ikey вы просто говорите:

$self->gre_testing(); 

Я заметил, вы определили $self выше, но не вызывать свой метод на объекте. Я предполагаю, что вы хотите это сделать, иначе вы получите сообщение об ошибке, когда вы попробуете $self->execute(..)

Смежные вопросы