Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl FreeBSD软件包版本信息_Perl_Freebsd - Fatal编程技术网

Perl FreeBSD软件包版本信息

Perl FreeBSD软件包版本信息,perl,freebsd,Perl,Freebsd,我有一个用perl编写的脚本,它收集有关通过端口安装的包的信息。不幸的是,似乎没有一种功能简单的方法来确定端口的版本。当然,您可以使用: pkg_version -v 这将显示所有软件包、与其状态相关的符号(需要更新、成功端口等)及其版本 由于这是一个脚本,我真的不想这样做: my $blah = "pkg_version -v | grep -vE '(up-to-date|succeeds)'|awk '{print \$1}'"; # Then make a var and run it

我有一个用perl编写的脚本,它收集有关通过端口安装的包的信息。不幸的是,似乎没有一种功能简单的方法来确定端口的版本。当然,您可以使用:

pkg_version -v
这将显示所有软件包、与其状态相关的符号(需要更新、成功端口等)及其版本

由于这是一个脚本,我真的不想这样做:

my $blah = "pkg_version -v | grep -vE '(up-to-date|succeeds)'|awk '{print \$1}'";
# Then make a var and run it through with backticks.
这会给我一个所有包的列表,让我把它变成一个数组,然后用它做一些魔术。我想做的是找出包的版本,而包的名称是提供的

同样,我可以用管道、awk等来做这件事,但如果可以避免的话,我不想这样做

请让我知道你们能想出什么,因为我发现很难找到这方面的信息

这里有一些信息:

FreeBSD版本:9.1 拱门:x64 Perl版本:5.14.2(amd64 freebsd多线程)


如果有人可以为端口添加标记,那就太好了,因为它还不存在。

您可以直接使用
opendir
/
readdir

检查
/var/db/pkg
中的包数据库,我假设您是指使用目录名来确定版本,对吗?例如,包“blah”有目录“blah-1.1.1_3”是的,没错。它假设
pkg.*
工具已经正确地完成了内务管理,但是如果你允许他们出错,那么你就有了一大堆其他可能的问题。是的,的确如此。这当然是野兽的本性。当然,我需要履行我的职责,写一些奇特的精神检查,以确保这不会失控。谢谢你的帮助。:)在这方面工作了一段时间,我不太确定我是否喜欢这种方法。不幸的是,这有点不可靠,比如说我们有blah-1.2.3.4_1和bleh-1.4.3.2,这需要大量的正则表达式构建,这可能是徒劳的。还有其他可以通过pkg脚本作为参数运行的想法吗?@rubyschai:my($pkg,$ver)=split/-/为什么不是一个简单的问题?