📜  Perl目录

📅  最后修改于: 2021-01-07 08:37:07             🧑  作者: Mango

Perl目录

不同的操作系统具有不同的命令来查看目录中的文件列表。例如,“ li”命令用于Linux,“ dir”命令用于Windows。

但是我们也可以使用Perl目录功能在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打开/显示目录

要在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创建目录

要在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。

SCALAR上下文中的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;

输出:

Perl在LIST上下文中读取目录

在列表上下文中, 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删除目录

要在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变更目录

要在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的文件。