Этот фрагмент будет заботиться о конечных слешах, кроме корневого каталога:
#!/usr/bin/perl
my $test = './';
$test =~ s{(.+)/\z}{\1};
print $test."\n";
Вот как это работает:
Первая часть регулярного выражения - s {(. +) / \ Z} - определяет группу в скобках () . На это ссылается \ 1 во второй части регулярного выражения - {\ 1} . В этой группе я определил один или несколько символов - . + -, за которыми сразу следует косая черта, после которой следует абсолютный конец строки - \ z .
Регулярное выражение сохраняет все в скобках, чтобы позже использовать его как \ 1 в спецификации замены (в основном вторая часть).
Это работает очень похоже на типичную стратегию sed, а именно:
echo "./" | sed -e 's:\(..*\)/$:\1:'
Надеюсь, это вам поможет.