本文概述
不同的操作系统具有不同的命令来查看目录中的文件列表。例如, ” li”命令用于Linux, ” dir”命令用于Windows。
但是我们也可以使用Perl目录函数在Perl中打开目录。在这里, 目录处理与文件处理非常相似。
Perl为目录提供了两种选择:文件遍历和目录函数。文件通配通常用于文件的相似子集, 而目录函数提供更多选项。
Perl目录函数
在给定的表中, 我们列出了一些目录函数。
Function
Usage
opendir DIRHANDLE, EXPR
它打开一个目录。
readdir DIRHANDLE
它读取目录。
rewinddir DIRHANDLE
它将指针定位到起点。
Telldir DIRHANDLE
返回目录的当前位置
seekdir DIRHANDLE, POS
它在目录中指向POS的指针。
closedir DIRHANDLE
关闭目录。
Perl打开/显示目录
要在Perl中打开目录, 有一个函数opendir。成功时此函数返回true, 失败时返回false。
设定$!带有实际错误消息将显示失败原因。
句法:
opendir(DIR, 'dirName') or die;
例:
#!/usr/bin/perl
my $directory = '/users/srcmini';
opendir (DIR, $directory) or die "Couldn't open directory, $!";
while ($file = readdir DIR) {
print "$file\n";
}
closedir DIR;
输出
Perl创建目录
要在Perl中创建一个新目录, 有一个函数mkdir。你需要创建目录的权限。
句法:
mkdir(dirName) or die;
例:
#!/usr/bin/perl
my $directory = '/users/srcmini/perl';
#creating directory perl
mkdir( $directory ) or die "Couldn't create $directory directory, $!";
print "Directory created successfully\n";
输出
Directory created successfully
给定的快照在/ users / srcmini目录列表中显示了创建的目录perl。
SCALAR上下文中的Perl读取目录
要读取目录的内容, 请使用函数readdir。在标量上下文中, 此函数将逐个返回目录的每个项目。读取所有内容后, 它将返回undef。
句法:
while (my $directory = readdir $dh) {
say $directory;
}
例:
use strict;
use warnings;
use 5.010;
my $directory = shift // '/users/srcmini';
opendir my $dh, $directory or die "Could not open '$directory' for reading '$!'\n";
while (my $content = readdir $dh) {
say $content;
}
closedir $dh;
输出
Perl在LIST上下文中读取目录
在列表上下文中, readdir函数将在一条语句中返回目录的所有内容。因此它使用更多的内存。
句法:
my @directory = readdir $dh;
foreach my $directory (@directory) {
say $directory;
}
例:
use strict;
use warnings;
use 5.010;
my $directory = shift // '/users/srcmini';
opendir my $dh, $directory or die "Could not open '$directory' for reading '$!'\n";
my @content = readdir $dh;
foreach my $content (@content) {
say $content;
}
closedir $dh;
输出
Perl删除目录
要在Perl中删除目录, 有一个函数rmdir。你需要必需的权限才能删除目录。你要删除的目录在删除之前应该为空。
句法:
rmdir('dirName') or die;
例:
#!/usr/bin/perl
$directory = "/users/srcmini/perl";
# This removes perl directory from /tmp directory.
rmdir( $directory ) or die "Couldn't remove $directory directory, $!";
print "Directory removed successfully\n";
输出
Directory removed successfully
Perl变更目录
要在Perl中更改目录, 有一个函数chdir。要更改目录并进入新目录, 你需要必需的权限。
句法:
chdir('dirName') or die;
例:
#!/usr/bin/perl
$directory = "/users/";
# TThe directory changes to users.
chdir( $directory ) or die "Couldn't go inside $directory directory, $!";
print "Diretory has been changed to $directory\n"
输出
Diretory has been changed to /users/
Perl关闭目录
要在Perl中关闭目录, 有一个函数closeir。此函数正式关闭目录句柄和目录之间的连接。虽然, 在Perl中关闭目录不是必需的, 因为当变量超出范围时, 目录将自动关闭。
句法:
closedir $dh;
OR
closedir DIR;
使用文件通配的Perl打开目录
要打开目录中与特定模式匹配的所有文件, 请使用Perl文件名glob匹配模式语法。
我们将在目录中显示所有扩展名为.docx的文件的列表。
#!/usr/bin/perl -w
opendir(DIR, ".");
@files = grep(/\.docx$/, readdir(DIR));
closedir(DIR);
foreach $file (@files) {
print "$file\n";
}
输出
在上面的输出中, 所有文件都在目录中读取, 但是grep仅传递扩展名为.docx的文件。