📅  最后修改于: 2021-01-07 08:37:07             🧑  作者: Mango
不同的操作系统具有不同的命令来查看目录中的文件列表。例如,“ li”命令用于Linux,“ dir”命令用于Windows。
但是我们也可以使用Perl目录功能在Perl中打开目录。在这里,目录处理与文件处理非常相似。
Perl为目录提供了两种选择:文件遍历和目录功能。文件通配通常用于文件的相似子集,而目录功能提供更多选项。
在给定的表中,我们列出了一些目录功能。
Function | Usage |
---|---|
opendir DIRHANDLE, EXPR | It opens a directory. |
readdir DIRHANDLE | It reads a directory. |
rewinddir DIRHANDLE | It positions pointer to the beginning. |
telldir DIRHANDLE | It returns current position of the dir |
seekdir DIRHANDLE, POS | It points pointer to POS inside dir. |
closedir DIRHANDLE | It closes a directory. |
要在Perl中打开目录,有一个函数opendir 。成功时此函数返回true,失败时返回false。
设定$!带有实际错误消息将显示失败原因。
句法:
opendir(DIR, 'dirName') or die;
例:
#!/usr/bin/perl
my $directory = '/users/javatpoint';
opendir (DIR, $directory) or die "Couldn't open directory, $!";
while ($file = readdir DIR) {
print "$file\n";
}
closedir DIR;
输出:
要在Perl中创建一个新目录,有一个函数mkdir 。您需要创建目录的权限。
句法:
mkdir(dirName) or die;
例:
#!/usr/bin/perl
my $directory = '/users/javatpoint/perl';
#creating directory perl
mkdir( $directory ) or die "Couldn't create $directory directory, $!";
print "Directory created successfully\n";
输出:
Directory created successfully
给定的快照在/ users / javatpoint目录列表中显示了创建的目录perl。
要读取目录的内容,请使用函数readdir 。在标量上下文中,此函数将一个接一个地返回目录的每个项目。一旦一切都被读出,它将返回undef 。
句法:
while (my $directory = readdir $dh) {
say $directory;
}
例:
use strict;
use warnings;
use 5.010;
my $directory = shift // '/users/javatpoint';
opendir my $dh, $directory or die "Could not open '$directory' for reading '$!'\n";
while (my $content = readdir $dh) {
say $content;
}
closedir $dh;
输出:
在列表上下文中, readdir函数将在一条语句中返回目录的所有内容。因此它使用更多的内存。
句法:
my @directory = readdir $dh;
foreach my $directory (@directory) {
say $directory;
}
例:
use strict;
use warnings;
use 5.010;
my $directory = shift // '/users/javatpoint';
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中删除目录,有一个函数rmdir 。您需要必需的权限才能删除目录。您要删除的目录在删除之前应该为空。
句法:
rmdir('dirName') or die;
例:
#!/usr/bin/perl
$directory = "/users/javatpoint/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中更改目录,有一个函数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中关闭目录,有一个函数closeir 。此函数正式关闭目录句柄和目录之间的连接。虽然,在Perl中关闭目录不是强制性的,因为当变量超出范围时,目录将自动关闭。
句法:
closedir $dh;
OR
closedir DIR;
要打开目录中与特定模式匹配的所有文件,请使用Perl文件名glob匹配模式语法。
我们将在目录中显示所有扩展名为.docx的文件的列表。
#!/usr/bin/perl -w
opendir(DIR, ".");
@files = grep(/\.docx$/,readdir(DIR));
closedir(DIR);
foreach $file (@files) {
print "$file\n";
}
输出:
在上面的输出中,所有文件都在目录中读取,但是grep仅传递扩展名为.docx的文件。