Tôi biết câu hỏi này là một vài tuổi, nhưng đối với bất cứ ai mà đến đây trong tương lai, một cách dễ dàng để phá vỡ một đường dẫn tập tin vào con đường cấu thành của nó , tên tệp, tên cơ sở và đuôi mở rộng như sau.
use File::Basename;
my $filepath = '/foo/bar.txt';
my ($basename, $parentdir, $extension) = fileparse($filepath, qr/\.[^.]*$/);
my $filename = $basename . $extension;
Bạn có thể kiểm tra kết quả bằng những điều sau đây.
my @test_paths = (
'/foo/bar/fish.wibble',
'/foo/bar/fish.',
'/foo/bar/fish.asdf.d',
'/foo/bar/fish.wibble.',
'/fish.wibble',
'fish.wibble',
);
foreach my $this_path (@test_paths) {
print "Current path: $this_path\n";
my ($this_basename, $parentdir, $extension) = fileparse($this_path, qr/\.[^.]*$/);
my $this_filename = $this_basename . $extension;
foreach my $var (qw/$parentdir $this_filename $this_basename $extension/) {
print "$var = '" . eval($var) . "'\n";
}
print "\n\n";
}
Hy vọng điều này sẽ hữu ích.
Nguồn
2014-04-04 16:56:10
Bạn có chắc chắn chỉ muốn kiểm tra tiện ích mở rộng không? Nếu bạn đang hy vọng kiểm tra loại tệp bạn đang xử lý, bạn nên kiểm tra loại mime. Hãy xem một cái gì đó như thế này: http://search.cpan.org/~pmison/File-Type-0.22/lib/File/Type.pm – totels
Chim với hỗ trợ cho @totels và một vài câu trả lời đại diện thấp hơn . Tôi ngạc nhiên vì có bao nhiêu suy nghĩ dựa vào phần mở rộng hoặc là an toàn ('mv virus.exe hooters.jpg') hoặc mạnh mẽ (' mv some-huge-dossy-garbage.bin whatever.zip'). Giả sử lỗi zip và bắt hoặc khám phá kiểu MIME là các câu trả lời đúng. Bất kỳ giải pháp sử dụng phần mở rộng là một sai lầm. – Ashley