我怎样才能使这段代码更加简洁(在一行中),但仍然可以理解。
($ext) = $ARGV[0] =~ /(\.[^.]+)$/;
$ext=~s/^.//s;
$ext=uc $ext;
获取文件扩展名,删除点然后将其大写。
in: asldaldjlajdlk.torrent
out: TORRENT
答案 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
设置为整个大写文件名。