gpt4 book ai didi

perl - 如何为存储在 perl 中的变量中的目录路径返回 1 级

转载 作者:行者123 更新时间:2023-12-04 04:35:15 38 4
gpt4 key购买 nike

我动态获取目录的路径,并将其存储在变量中。我需要降低 1 级并获取父目录。此外,该路径是 Windows 路径。
基本上,我在 Windows 上运行 perl。
如何在 perl 中实现这一点?一切都很好 - 正则表达式或任何其他方式。
请帮忙!

例如 :

原始目录路径:

        my $dir = "C:/mytest/mydata/mywork/mydir";

输出需要的是:
        my $dir = "C:/mytest/mydata/mywork";

我需要直到父目录“mywork”,而不是“mydir”。

任何人都可以帮助编写相同的代码吗?

第二个查询:

我在目录路径中有空间:

例子 :
      my $testdir = "C:/mytest own/mydata/mywork/mydir";

请注意,“mytest own”是一个目录,但有空间。
现在,当我尝试输入以使用此变量进入此目录时,我无法这样做。

对于查询 1,我尝试了以下代码:

@英戈:
          #!/usr/bin/perl

my $dir = "C:/mytest/mydata/mywork/mydir";

print "Input directory is : $dir\n";

my $outdir = $dir . "/..";

print "Output directory is : $outdir";

注意:我需要在不使用任何 perl 模块的情况下完成此操作。

@TLP:我尝试使用您的缩短方法,再次复制代码,但没有提供所需的输出。
        #!/usr/bin/perl

use strict;
use warnings;
use File::Spec;

my $str = "C:/mytest/mydata/mywork/mydir";
my @dirs = File::Spec->splitdir($str); # parse directories
my $newdir = File::Spec->catdir(@dirs, File::Spec->updir()); # create new path
print $newdir;

输出看起来像:输出附加/..
          C:/mytest/mydata/mywork/mydir/..

最佳答案

使用模块来操作路径可能是更安全的选择。 File::Spec 有方便的splitdircatdir职能:

use strict;
use warnings;
use File::Spec;

my $str = "C:/mytest/mydata/mywork/mydir";
my @dirs = File::Spec->splitdir($str); # parse directories
pop @dirs; # remove top dir
my $newdir = File::Spec->catdir(@dirs); # create new path
print $newdir;

请注意,默认情况下,新路径将使用您当前系统使用的路径分隔符。

你也可以做
my $newdir = File::Spec->catdir(@dirs, File::Spec->updir());

( updir() 返回 .. )在我的系统(Windows 7)上的输出是相同的,也就是说
C:\mytest\mydata\mywork

我原以为会是 C:\mytest\mydata\mywork\mydir\.. ,但显然模块缩写。

关于perl - 如何为存储在 perl 中的变量中的目录路径返回 1 级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19838779/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com