Как объединить переменные Perl с дефисом?

Я пытаюсь объединить две или три переменные с дефисами. Пожалуйста, проверьте приведенный ниже пример.

my $QueueName   = Support;
my $CustomerID  = abc;
my $UserCountry = India;
my $Count       = 12345;

my $Tn = $QueueName.$CustomerID.$UserCountry.$Count;

Я получаю следующий вывод:

"$Tn" = SupportabcIndia12345

Но я хочу так:

$Tn = Support-abc-India-12345

person Abhijeet N    schedule 21.09.2015    source источник
comment
Примечание: у вас должно быть use strict; use warnings; в начале каждого Perl-скрипта, который вы пишете. Это потребует, чтобы вы указали свои строки, например. my $QueueName = 'Support';, но это поможет вам избежать многих распространенных ошибок, таких как опечатки в именах переменных.   -  person ThisSuitIsBlackNot    schedule 21.09.2015


Ответы (3)


Это плохой Perl, и он не будет работать под use strict, который вам действительно следует использовать. Если бы вы были, вы бы увидели отображаемые ошибки.

Вместо этого напишите это так:

use strict;
use warnings;

my $QueueName   = 'Support';
my $CustomerID  = 'abc';
my $UserCountry = 'India';
my $Count       = '12345';

my $Tn = "$QueueName-$CustomerID-$UserCountry-$Count";
print "$Tn\n";

Вы должны заключать строки в кавычки. Если вам нужен дефис, вы можете использовать описанный выше метод для выделения значений, разделенных дефисом.

person Dr.Avalanche    schedule 21.09.2015
comment
На самом деле допустимо объединять две переменные, не помещая их в кавычки: my $var = $string1.$string2 — это вполне допустимый синтаксис Perl. - person tjwrona1992; 21.09.2015
comment
@ tjwrona1992 Доктор Лавина имеет в виду использование голых слов, например. my $QueueName = Support;, который не будет работать со строгими подписками. ОП, вероятно, не знает о строгости, так что это действительно нужно объяснить лучше. - person ThisSuitIsBlackNot; 21.09.2015
comment
О, тогда да, доктор Эвеланш прав. Если используется strict/warnings, это приведет к ошибке. . . и вы должны ВСЕГДА использовать strict/warnings. - person tjwrona1992; 21.09.2015

Вы можете использовать join() для объединения элементов списка с разделителем,

my $Tn = join "-", $QueueName, $CustomerID, $UserCountry, $Count;
person mpapec    schedule 21.09.2015

Вы должны использовать strict и warnings, чтобы внедрить хорошие привычки программирования. Хотя ваше решение технически допустимо для Perl, оно не пройдет тест strict, поскольку вы пытаетесь определить переменные с помощью «голых слов».


Чтобы исправить это, поместите эти две строки в начало кода:

use strict;
use warnings;

Затем измените свой код, чтобы он соответствовал правилам модуля strict.

ex:

my $QueueName = Support;

должно быть:

my $QueueName = 'Support';


Что касается объединения переменных, это будет работать:

my $Tn = $QueueName.'-'.$CustomerID.'-'.$UserCountry.'-'.$Count;

-or-

my $Tn = "$QueueName-$CustomerID-$UserCountry-$Count";

Также будет работать функция join:

my $Tn = join '-', $QueueName, $CustomerID, $UserCountry, $Count;


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

person tjwrona1992    schedule 21.09.2015
comment
настолько полным, насколько вы хотели быть, вы забыли привести хороший пример того, как использовать оператор join(). пожалуйста, добавьте это к ответу - person vanHoesel; 21.09.2015
comment
Я не включил его, потому что это уже было покрыто другим ответом. - person tjwrona1992; 22.09.2015
comment
Добавлен пример join. - person tjwrona1992; 22.09.2015