Я бы хотел взаимодействовать с linux напрямую из perl, чтобы выполнить некоторые вызовы, такие как statvfs. Мне любопытно, есть ли способ сделать это только с помощью основного пакета perl (без дополнительных модулей).
Технический, но, вероятно, не очень полезный ответ на ваш вопрос: да, действительно существует способ сделать то, что statvfs делает только с ядром perl и без модулей. Это работает так:
my $statfs_buffer = "\0" x length(pack($STATFS_TEMPLATE, ()));
my $retval = syscall($SYS_statfs, $some_filename, $statfs_buffer);
if ($retval == -1) {
die "statfs failed: $!";
}
my($f_type, $f_bsize, $f_blocks, $f_bfree,
$f_bavail, $f_files, $f_ffree,
$f_fsid, $f_namelen) = unpack($STATFS_TEMPLATE, $statfs_buffer);
Проблема в том, что вам придется самостоятельно определить значения для $SYS_statfs
и $STATFS_TEMPLATE
; первое легко, а второе не сложно.
Однако в некоторых системах вам придется использовать вариант statfs64
.
Так что да, можно делать то, что вы хотите, при условии, что вы достаточно решительны. Однако есть и лучшие способы сделать это.