Да, я удивлен, что никто не исправил это для вас:)
Похоже, что человек, который написал это, пытался урезать начальные и конечные пробелы из каждого поля. Это действительно странный способ сделать это, и по какой-то причине он был чрезмерно обеспокоен внутренними пробелами в каждой области, несмотря на свои якоря.
Я думаю, что это должно быть то же самое, что обрезка пробелов вокруг разделителя в split :
foreach (@tmp_cycledef)
{
s/^\s+//; s/$//; #leading and trailing whitespace on the whole string
my ($cycle_code, $close_day, $first_date) = split(/\s*\|\s*/, $_, 3);
$cycledef{$cycle_code} = [ $close_day, split(/-/,$first_date) ];
}
Ключом к размышлению о split
является рассмотрение того, какие части строки вы хотите выбросить, а не только то, что разделяет нужные вам поля.