小编mob*_*mob的帖子

是否有工具在一台机器上管理多个PHP安装(例如,支持不同版本)?

perlbrew是一个在您的系统上管理Perl的多个安装的工具,可以很容易地,比如快速运行一套针对许多不同版本的Perl的测试脚本.

PHP有什么类似的吗?现在,当我想更改我的系统使用的PHP版本时,我将进入构建目录以获取我想要的版本并运行make install.

php

7
推荐指数
1
解决办法
1197
查看次数

getchar()和putchar()

在示例中:

#include <stdio.h>

main()
{
    long nc;

    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)

我不太明白.putchar()会把角色放出来,但为什么在EOF之后它会把所有的角色都放出来,它在哪里记住所有这些角色?谢谢.

c programming-languages putchar getchar

6
推荐指数
1
解决办法
4134
查看次数

如何有条件地将C代码片段编译到我的Perl模块?

我有一个模块,将针对几种不同的操作系统和配置.有时,一些C代码可以使这个模块的任务更容易一些,所以我有一些C函数,我想绑定代码.我不具备绑定C函数-我不能保证最终用户甚至有一个C编译器,例如,它通常不是优雅地故障转移到完成同样的事情的纯Perl的方式有问题 - 但如果我可以从Perl脚本调用C函数,那就太好了.

还在我这儿?这是另一个棘手的部分.几乎所有的C代码都是特定于系统的 - 为Windows编写的函数不能在Linux上编译,反之亦然,而在Solaris上执行类似操作的函数看起来会完全不同.

#include <some/Windows/headerfile.h>
int foo_for_Windows_c(int a,double b)
{
  do_windows_stuff();
  return 42;
}
Run Code Online (Sandbox Code Playgroud)
#include <path/to/linux/headerfile.h>
int foo_for_linux_c(int a,double b)
{
  do_linux_stuff(7);
  return 42;
}
Run Code Online (Sandbox Code Playgroud)

此外,即使对于同一系统的本机代码,也可能只能在任何特定配置上编译其中一些.

#include <some/headerfile/that/might/not/even/exist.h>
int bar_for_solaris_c(int a,double b)
{
  call_solaris_library_that_might_be_installed_here(11);
  return 19;
}
Run Code Online (Sandbox Code Playgroud)

但理想情况下,我们仍然可以使用可以使用该配置进行编译的C函数.所以我的问题是:

  • 如何有条件地编译C函数(只编译适合当前值的代码$^O)?

  • 如何单独编译C函数(某些函数可能无法编译,但我们仍然想使用那些函数)?

  • 我可以在构建时(最终用户安装模块时)或在运行时(Inline::C例如)进行此操作吗?哪种方式更好?

  • 我如何判断哪些函数已成功编译并可从Perl中使用?

所有的想法赞赏!


更新:感谢所有回复的人.所以这就是我做的:

我考虑了一个与语句Inline::C内部 运行时绑定的方案eval,但最终确定了子类化Module::Build 和自定义ACTION_build方法:

my $builderclass = Module::Build->subclass(
 class => 'My::Custom::Builder',
 code => <<'__CUSTOM_BUILD_CODE__,',
 sub ACTION_build {
   use File::Copy;
   my …
Run Code Online (Sandbox Code Playgroud)

perl swig xs

5
推荐指数
1
解决办法
577
查看次数

如何在Perl中使用类属性/变量作为打印文件句柄?

我想做同样的事情

open MYFILE, ">", "data.txt";
print MYFILE "Bob\n";
Run Code Online (Sandbox Code Playgroud)

而是在类变量中

sub _init_tmp_db
{
    my ($self) = @_;

    open $$self{tmp_db_fh}, ">", "data.txt";
    print $$self{tmp_db_fh} "Bob\n";
}
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:'字符串找到了运营商预期的附近"Bob \n"'

我该怎么办?

syntax perl class file-writing

5
推荐指数
1
解决办法
821
查看次数

Perl将printf输出附加到字符串

我正在解析一些数据并组织它,现在我需要在变量中捕获它.

在此之前我从未使用过printf或sprintf.

我以这样的方式使用printf来组织数据:

printf("%-30s %18s %18s\n", "$a", "$b", "$c\n");
Run Code Online (Sandbox Code Playgroud)

现在我有一个存储字符串的变量,我想将有组织的数据附加到变量$ result.

我试过类似的东西

$result.printf("%-30s %18s %18s\n", "$a", "$b", "$c\n");
Run Code Online (Sandbox Code Playgroud)

它不起作用.我也试过sprintf.

有任何想法吗?

谢谢,S

perl

5
推荐指数
2
解决办法
7457
查看次数

Code Golf:C#:将ulong转换为Hex String

我尝试编写一个扩展方法来接收ulong并返回一个字符串,该字符串以十六进制格式表示提供的值,没有前导零.我对我提出的建议并不满意......使用标准.NET库是不是更好的方法呢?

public static string ToHexString(this ulong ouid)
{
    string temp = BitConverter.ToString(BitConverter.GetBytes(ouid).Reverse().ToArray()).Replace("-", "");

    while (temp.Substring(0, 1) == "0")
    {
        temp = temp.Substring(1);
    }

    return "0x" + temp;
}
Run Code Online (Sandbox Code Playgroud)

c# hex

4
推荐指数
1
解决办法
8946
查看次数

Perl模块ForkManager无法正常工作

我的错误如下

当你在/usr/lib/perl5/site_perl/5.8.6/Parallel/ForkManager.pm第463行的子进程中时,无法启动另一个进程.

我的代码中有问题的部分如下,在我的代码下面是forkmanager失败的子例程,我无法弄清楚原因.没有forkmanager,我可以运行得很好.

my $pm = new Parallel::ForkManager($MAX_PROCESSES);
for (0..$SCOUNT)
{
my $pid = $pm->start and next;
    my %shash = ();
    %shash =
    (   ID      => "$SREF->[$_]->[0]",
        typeID  => "$SREF->[$_]->[1]",
        extIP   => "$SREF->[$_]->[2]",
        intIP   => "$SREF->[$_]->[3]",
        NAME    => "$SREF->[$_]->[4]",
        buTYPE  => "NULL"
    );
    if ($shash{typeID} =~ /^(4|16|17|25|27|28|42|49|50|51|54|58|60|63|19)$/){$shash{buTYPE} = 'LINUX DEDICATED';}
    if ($shash{typeID} =~ /^(11|14|22|32|34|36|37|46)$/)                    {$shash{buTYPE} = 'LINUX FULL';}
    if ($shash{typeID} =~ /^(44)$/)                                         {$shash{buTYPE} = 'EMAIL MARKETER';}
    if ($shash{typeID} =~ /^(43)$/)                                         {$shash{buTYPE} = 'TYip1';}
    if ($shash{typeID} =~ /^(45)$/)                                         {$shash{buTYPE} = 'DDDOMAINS';} …
Run Code Online (Sandbox Code Playgroud)

perl multithreading fork

4
推荐指数
1
解决办法
1883
查看次数

使用perl md5比较两个文件

我想运行一个代码,如果文件存在则继续检查文件是否退出,然后检查文件的MD5与之前的MD5.如果有一些变化,那么它会执行一些代码.但是每次我为同一个文件调用hexdigest时,perl MD%似乎都在变化.MD5每次都会改变吗?

我最初有

$md5 = Digest::MD5->new; 
Run Code Online (Sandbox Code Playgroud)

之前 while(1)

如果不是这样做,还有什么可以实现我的意图吗?谢谢

while(1)
{
    if(!(-e $config_file)){
            next;
    }else{
            $md5 = Digest::MD5->new;
            $md5->addpath($config_file);
            print "<->";
            print $md5->hexdigest;

            $value=($digest eq $md5->hexdigest ? 1 : 0);
            if($value==1)
            {
                    next;
            }else
            {
                    $digest=$md5->hexdigest;
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

perl md5 file-comparison

3
推荐指数
1
解决办法
2418
查看次数

为什么不在报警信号处理程序中死掉进程?

从如何为Perl系统调用指定超时限制?

eval { 
    local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required 
    alarm $timeout; 
    $nread = sysread SOCKET, $buffer, $size; 
    alarm 0; 
}; 
if ($@) { 
    die unless $@ eq "alarm\n";   # propagate unexpected errors 
    # timed out 
} 
else { 
    # didn't 
} 
Run Code Online (Sandbox Code Playgroud)

如果发生超时,应该sub { die "alarm\n" }; 导致进程结束.我想我无法理解die.这个http://www.cs.cf.ac.uk/Dave/PERL/node111.html说"die()函数用于退出脚本并显示一条消息供用户阅读".但是,对于上面的脚本,脚本将处理#timed out中的代码.sysread继续工作.我有一个睡眠时间为30秒的perl脚本,而不是sysread.我的超时设置为10秒.正如预期的那样,执行#timed out中的代码,但脚本继续睡眠.任何输入都被赞赏

perl die

3
推荐指数
1
解决办法
4421
查看次数

为什么undef变成空字符串?

use strict;
use warnings;
use Data::Dumper;

my %h;
my $undef = undef;
$h{''}='test2';
$h{$undef} = 'test';

print Dumper (\%h);
Run Code Online (Sandbox Code Playgroud)

创建以下输出:

$VAR1 = {
          '' => 'test'
        };
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我有Perl 5.12.3.

谢谢你的时间.

perl

3
推荐指数
1
解决办法
127
查看次数