Trên hệ thống * nix, tôi đã sử dụng những điều sau đây với kết quả tốt.
sub filesExist { return scalar (my @x = `ls -1a 2> /dev/null "$_[0]"`) }
Trả lời bằng số kết quả được tìm thấy hoặc 0 nếu không có. Làm cho nó dễ dàng được sử dụng trong các điều kiện 'nếu' có điều kiện như:
if(!filesExist("/foo/var/not*there.log") &&
!filesExist("/foo/var/*/*.log") &&
!filesExist("/foo/?ar/notthereeither.log"))
{
print "No matches!\n";
} else {
print "Matches found!\n";
}
Chính xác những gì bạn có thể sử dụng sẽ được xác định bởi những gì hệ vỏ của bạn hỗ trợ. Nhưng hầu hết các shell hỗ trợ sử dụng '*' và '?' - và chúng có cùng ý nghĩa ở mọi nơi tôi từng thấy. Tất nhiên, nếu bạn loại bỏ các cuộc gọi đến chức năng 'vô hướng', nó sẽ trả về các trận đấu - hữu ích cho việc tìm kiếm những tên tập tin biến.
Nguồn
2013-09-30 18:32:11
Để hoàn thành, bạn có thể thực hiện 'foreach (glob (" *. Tệp ")) {something}' ... – dawg
Nhưng tôi không thể đặt regexp vào đó. Tôi có thể sử dụng cụm từ thông dụng không? – Jean
@alertjean Không, bạn sẽ phải mở thư mục và quét thủ công tên tệp bằng cách sử dụng cụm từ thông dụng. 'glob' chỉ hỗ trợ các thẻ [shell wild] truyền thống (http://www.tuxfiles.org/linuxhelp/wildcards.html). – meagar