Тривиальная задача — есть имя файла, что-то типа 'Report.doc' или 'Report.pdf', необходимо получить имя файла без расширения, т.е. в нашем случае в обоих вариантах нам нужно получить строку 'Report'. Задача упрощена тем, что
расширение файла содержит строго 3 символа.
Решая данную задачу на Perl у меня родились вот такие варианты:
#! /usr/bin/env perl
use strict;
use warnings;
use 5.010;
# исходное имя файла
my $file_name = 'report.doc';
my $copy_file_name = $file_name;
# 1 substr
substr($copy_file_name,-4) = '';
say "Name is $copy_file_name";
# 2 используя substr и index
my $name = substr($file_name,0,index($file_name,'.'));
say "Name of '$file_name' is '$name'";
# 3 используя регулярные выражения
$file_name =~ /^(.+)\.(.+)$/;
say "Name of $file_name is '$1' and ext is '$2'";
# 4 используя регулярные выражения Perl 5.010
$file_name =~ /^(?<name>.+)\.(?<ext>.+)$/;
say "Name of $file_name is '$+{name}' and ext is '$+{ext}'";
Сравнение скорости не проводилось, да и не было такой необходимости =)
Хотел поинтересоваться, какие еще возможны варианты?
Комментарии (6)
RSS свернуть / развернутьmy (undef,undef,$suffix) = fileparse($file_name, qr/\.[^.]*/);
tester
use File::Basename;
my ($name,undef, undef) = fileparse($file_name, qr/\.[^.]*/);
tester
OlegTar
OlegTar
xoma
не сработает, если в имени файла встречается более одной точки.
test.test.doc -> test
Надо использовать rindex:
my $name = substr($file_name,0,rindex($file_name,'.'));
OlegTar
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.