有了这个 Perl 和这台机器:
$ perl -v
perl 5, version 34, subversion 0 (v5.34.0) built for x86_64-linux-gnu-thread-multi
$ sb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy
我运行了这段代码:
my $filename= 't/mod_Prototype/SecondModule.t';
my $nofile = chmod 0777, $filenmame;
printf "%5sNumber of file :: %s - %s\n",'',$nofile,$filename;
我检查了它是否更改了权限:
ll t/mod_Prototype/
total 8
-rw-rw-r-- 1 lutz lutz 674 Mar 19 09:00 SecondModule.pm.t
-rw-rw-r-- 1 lutz lutz 674 Mar 19 10:05 SecondModule.t
这是我的问题:
我认为 Perl 中的系统调用可以解决这个问题, 但我正在寻找一个纯粹的 Perl 或语言解决方案。
我尝试创建一个脚本文件。
我希望使文件可执行(也称为更改文件的模式)。
我喜欢自动化脚本开发并测试 Perl 语言集,这些语言使用频率较低。 Perl 中有 215 个已知函数/关键字,但其中 49% 的关键字非常特殊,需要进行实验以确保它们仍然正常运行。
没有错误,没有产生警告,并且收到了正确的返回值(列表中的一个文件为 1),但该命令无法有效更改文件的模式。
您使用strict吗?这些变量不是同一个变量:
$filename
$filenmame
是的,
chmod
可以在Ubuntu上运行。但您还没有检查命令是否成功。通常,这是通过检查它是否返回错误值来完成的。在 chmod
的情况下,它返回已更改的文件数,但由于您只更改一个,如果失败,它将返回 0。
my $nofile = chmod 0777, $filenmame or die "chmod 0777, $filename failed: $!"
您也可以使用 autodie 自动执行此操作。
最后,打开strict和warnings来捕获变量名称中的拼写错误等错误。
use strict;
use warnings;
use autodie;
my $nofile = chmod 0777, $filenmame;
哎呀,有一个错字。
$filenmame
vs $filename
。