2013-08-24 4 views
0

Я пытаюсь войти в систему на всех машинах. Так написал сценарий PerlВзаимосвязь числа и скаляра в Perl

my $i = 7; 
while ($i < 20){ 
    my $key = "192\.235\.2\.$i.1 "; 
    print $key; 
    $i++; 
} 

, который бежит от 192.235.2.71 к .191. Но конкатенация здесь не сработала.

+0

пожалуйста, объясните это правильно для лучших ответов. – Shivaay

+0

Обратите внимание, что строки и числа являются скалярами. –

ответ

5

Вы не можете использовать конкатентацию в пределах строка. $i.1 внутри строки с двойными кавычками будет интерполировать значение $i, но оставить .1 как есть. Вы можете взять конкатенацию вне строки и написать '192.235.2.'.$i.'1' (точки не нуждаются в экранировании). Но проще написать "192.235.2.${i}1". ${i} - это то же самое, что и $i, но избегает двусмысленности с $i1.

Если вы хотите напечатать все IP-адреса из 192.235.2.71 в 192.235.2.191 с шагом в десять, а затем рассмотреть

print join(' ', map "192.235.2.${_}1", 7 .. 19), "\n"; 
1

Вы не используете конкатенацию но интерполяцию строки, если вы хотите, чтобы сцепить:

my $key="192.235.2." . $i . ".1 "; 

Если вы хотите, чтобы достичь того же результата с интерполяцией:

my $key="192.235.2.$i.1 "; 

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

+0

Первый код, работающий с маленьким с изменением: my $ key = "192.235.2." , $ i. «1»; – bd1257

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