Perl'-s'文件测试运算符问题

Pit*_*Pit -1 perl file

我正在调试一段代码,它使用Perl'-s'函数来获取某些文件的大小.

my $File1 = /myfolder/.../mysubfolder1/document.pdf
my $File2 = /myfolder/.../mysubfolder2/document.pdf
my $File3 = /myfolder/.../mysubfolder1/document2.pdf($File3实际上是/myfolder/.../mysubfolder2/document.pdfaka 的链接$File2)

有缺陷的代码是:

my $size = int((-s $File)/1024);

哪里$File被替换为$File1- $File3.

由于某些原因,我无法解释这不适用于每个文件.

为了$File1$File3它的作品,但不适合$File2.我能理解,如果都$File2$File3不会工作,这将意味着该文件/myfolder/.../mysubfolder2/document.pdf是某种损坏.我甚至在确定文件存在if (-e $File)|{之前添加了一个测试-s,但这三个文件确实存在.

还有一个更奇怪的事情:有一个.htaccess/myfolder/.../mysubfolder1/,但没有.htaccess/myfolder/.../mysubfolder2/.如果它是反向的,我会认为.htaccess-s以某种方式阻止呼叫.

有什么想法吗?

yst*_*sth 10

如果-s失败,则返回undef并将错误设置为$!.什么是$!?

  • $!返回'包含换行符的文件名不成功'.有了这个,我可以解决问题.谢谢. (3认同)

use*_*419 5

我想如果用"stat"检查那个文件的大小,你会得到小于1024字节的东西:)如果size小于1024,你的int(( - s $ fn)/ 1024)将返回0


DVK*_*DVK 5

为了解决注释的结束,.htaccess文件控制Web服务器请求对文件访问.一旦用户请求执行有效的允许CGI /任何脚本的URL(我假设您的Perl代码在Web上下文中),那么该脚本绝对没有关于.htaccess的权限问题(除非您实际编写Perl代码以读取其内容)并明确地尊重他们).

唯一可以搞砸Perl文件的权限是操作系统中的文件系统权限.

要获取文件大小,您的Web用户需要:

  • 对包含该文件的目录执行权限

  • 可能是对包含该文件的目录的读权限(不确定文件大小是否存储在inode中?)

  • 可能,读取文件自己的权限.

如果所有3个文件(2个好文件和1个坏文件)都在同一目录中,请检查文件的读取权限.

如果它们位于不同的目录中,请检查文件的读取权限和目录权限.