小编Wex*_*xor的帖子

需要perl就地编辑不在命令行上的文件

我有一个程序,内部配置了许多文件名.该程序编辑与数据库帐户关联的一组配置文件,然后更改数据库帐户的数据库密码.配置文件列表通过内部列表与数据库帐户的名称相关联.当我处理这些文件时,我的程序中有以下循环:

BEGIN { $^I = '.oldPW'; }  # Enable in-place editing
...
foreach (@{$Services{$request}{'files'}})
{
    my $filename = $Services{$request}{'configDir'} . '/' . $_;
    print "Processing ${filename}\n";
    open CONFIGFILE, '+<', $filename or warn $!;
    while (<CONFIGFILE>)
    {
        s/$oldPass/$newPass/;
        print;
    }
    close CONFIGFILE;
}
Run Code Online (Sandbox Code Playgroud)

问题是,这会将修改后的输出写入STDOUT,而不是CONFIGFILE.如何让它实际编辑到位?在循环中移动$ ^ I?打印CONFIGFILE?我很难过.

更新:我发现了我在perlmonks上寻找的东西.您可以在循环内使用本地ARGV以正常的perl方式进行就地编辑.上面的循环现在看起来像:

foreach (@{$Services{$request}{'files'}})
{
    my $filename = $Services{$request}{'configDir'} . '/' . $_;
    print "Processing ${filename}\n";
    {
        local @ARGV = ( $filename);
        while (<>)
        {
            s/$oldPass/$newPass/;
            print;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果不是在开始时修改configDir,我可以将整个列表扔到本地@ARGV,但这足够有效. …

perl file in-place

15
推荐指数
2
解决办法
5197
查看次数

Debian挤压后退与PostgreSQL 9.1

我正在尝试在Debian 6.0.5系统上安装PostgreSQL 9.1,通过Synpatic,或apt-get,或dpkg,或任何实际工作的东西.我一直在遇到Backports存储库中的元数据错误或工具中的错误.

添加后

# Backports for squeeze
deb http://backports.debian.org/debian-backports squeeze-backports main
Run Code Online (Sandbox Code Playgroud)

到/etc/apt/sources.list并运行apt-get update,我能够看到Synaptic中的大多数postgresql-9.1软件包,但它不会显示来自9.1的两个libpq软件包.我单独下载并用dpkg -i安装它们,现在当我尝试通过Synaptic或apt-get安装任何9.1软件包时,我得到:

The following packages have unmet dependencies:
 postgresql-client-9.1 : Depends: postgresql-client-common (>= 115~) but 113 is to be installed
E: Broken packages
Run Code Online (Sandbox Code Playgroud)

那么为什么没有更新-common包,如果其他包已经依赖于不存在的更新版本?这太令人困惑了.

postgresql debian

2
推荐指数
1
解决办法
4482
查看次数

标签 统计

debian ×1

file ×1

in-place ×1

perl ×1

postgresql ×1