---- #!/usr/local/bin/perl use strict; use utf8; use warnings; use Data::Dumper; use Encode; use File::Spec; use FindBin; use Win32::API; Win32::API::Struct->typedef('FILETIME', qw( DWORD dwLowDateTime; DWORD dwHighDateTime;)) or die $!; Win32::API::Struct->typedef('WIN32_FIND_DATA', qw( DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[260]; TCHAR cAlternateFileName[14];)) or die $!; my $FindFirstFile = Win32::API->new('kernel32', 'FindFirstFile', 'PS', 'N') or die $!; my $FindNextFile = Win32::API->new('kernel32', 'FindNextFile', 'NS', 'I') or die $!; my $FindClose = Win32::API->new('kernel32', 'FindClose', 'N', 'I') or die $!; my $path = File::Spec->catdir($FindBin::Bin, '*'); my $FindData = Win32::API::Struct->new('WIN32_FIND_DATA') or die $!; my $hFind = $FindFirstFile->Call($path, $FindData); $hFind == -1 and die $!; my @list = ($FindData->{cFileName}); push @list, $FindData->{cFileName} while $FindNextFile->Call($hFind, $FindData; $FindClose->Call($hFind); print Dumper(\@list); __END__