繁体   English   中英

使用Perl进行分割和打印

[英]Splitting and printing with Perl

我的Perl脚本试图输入一个命令行参数(例如name.txt或hello.txt.exe),并基于解析出文件扩展名。 定界符,并仅显示扩展名,如exe或txt。 这是我目前无法打印的内容,我不确定为什么。

usr/bin/perl -w
use  strict;

my ($user_arg) = shift @ARGV;

my ($ext); 

if ( ($ext) = $user_arg =~ /(\.[^.].+)$/) 
{

    print "Ends in ", ($ext) = $user_arg =~ /(\.[^.].+)$/ , "\n";
    print "Ends in" , ($ext) = $user_arg =~ /(\.[^.]+)$/, "\n";


}
elsif( ($ext) = $user_arg =~ /(\.[^.]+)$/)
{ 
    print"Ends in " , ($ext), "\n";

}
else
{
    print "No Extension";

}

*已更新,现在我的问题是,如果它像name.txt这样的话,第一条语句将同时打印两个条件,它将打印两次.txt,在这里我只希望它一次打印.txt,除非它是我想要的name.txt.exe它先打印.txt.exe然后.exe

这里有两个主要问题:

1)您需要shift@ARGV

my $arg = shift @ARGV;

2)您需要转义“点”

my @values = split /\./, $user_arg;

其他事情...

您通常希望清理用户输入:

 die "usage: $0 filename\n" if {some condition}

我想你的意思是chomp $val; 在你的foreach

熟悉File :: Basenamefileparse可以使您的生活更轻松,这没有什么坏处。 虽然在这里可能会矫kill过正。

更新

您应该可以自己集成此功能。 在您的情况下,您不需要循环遍历文件列表,而只有一个。

这不会按照您想要的方式打印“ txt.exe”,“ exe”。 但是您可以根据自己的喜好进行调整。

my @file_tests = qw(nosuffix testfile.txt /path/to/file.exe foo.bar.baz);

for my $fullname (@file_tests) {

    my @names = split /\./, $fullname;
    # shift off the first element, which will
    # give you the list of suffixs or an empty list
    shift @names;

    # you can decide how you want to print this list
    # if scalar @names is 0 don't print anything
    print "list of suffixes: " . join( ', ', @names ) . "\n"
        if scalar(@names) > 0;
}

输出:

list of suffixes: txt
list of suffixes: exe
list of suffixes: bar, baz

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM