获取文件扩展名并将其大写(Perl)

时间:2014-08-07 23:30:18

标签: regex perl

我怎样才能使这段代码更加简洁(在一行中),但仍然可以理解。

 ($ext) = $ARGV[0] =~ /(\.[^.]+)$/;
 $ext=~s/^.//s;
 $ext=uc $ext;

获取文件扩展名,删除点然后将其大写。

in: asldaldjlajdlk.torrent
out: TORRENT

5 个答案:

答案 0 :(得分:4)

我想我可能会使用类似的东西:

my $ext = ($ARGV[0] =~ /\.(\w+)$/) ? uc($1) : undef;

undef调整为您希望正则表达式无法匹配时的默认值$ext

答案 1 :(得分:3)

您选择的模式并不总是匹配。

因此,我建议使用三元组来明确指定未定义的值。

my $ext = $ARGV[0] =~ /\.([^.]+)$/ ? uc($1) : '';

答案 2 :(得分:1)

$ v是您的输入

($m = uc $v) =~ s/(\w+)\.(\w+)/$2/g;

答案 3 :(得分:0)

删除我的答案,这将在此处讨论:Inline regex replacement in perl

我得到的最远的是:

($ext = uc $ARGV[0]) =~ s/^.*\.([^.]+)$/$1/;

答案 4 :(得分:0)

我想我会忽略文件名可能不包含点的可能性,并写

(my $ext = uc shift) =~ s/.*\.//
  • 如果名称中有一个点,则会将$ext设置为大写文件扩展名(最后一个点后的所有内容)。

  • 否则$ext设置为整个大写文件名。