小编Sen*_*mar的帖子

如何将数组转换为Perl中的哈希?

我有一个数组,并尝试将数组内容转换为带键和值的哈希.索引0是键,索引1是值,索引2是键,索引3是值等.

但它没有产生预期的结果.代码如下:

open (FILE, "message.xml") || die "Cannot open\n";

$var = <FILE>;

while ($var ne "")
{
 chomp ($var);
 @temp = split (/[\s\t]\s*/,$var);
 push(@array,@temp);
 $var = <FILE>;
}

$i = 0;
$num = @array;
    while ($i < $num)
{
 if (($array[$i] =~ /^\w+/i) || ($array[$i] =~ /\d+/))
 {
#   print "Matched\n";
#   print "\t$array[$i]\n";
  push (@new, $array[$i]);
 }
 $i ++;
}
print "@new\n";


use Tie::IxHash;
tie %hash, "Tie::IxHash";

%hash = map {split ' ', $_, 2} @new;

while ((my $k, …
Run Code Online (Sandbox Code Playgroud)

perl hashmap

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

在Perl中动态创建数组

我想根据用户输入动态创建数组.例如,如果用户给出输入作为3然后三个阵列应当具有名称创建@message1,@message2@message3.

我怎么在Perl中做到这一点?

arrays perl

8
推荐指数
2
解决办法
3万
查看次数

如何在 Perl 的客户端服务器程序中发送数组?

我有一个客户端-服务器 Perl 程序。我想将存储在数组中的消息发送到服务器。

服务器代码:

use IO::Socket::INET;

# Creating a a new socket
$socket=new IO::Socket::INET->new(LocalPort=>5000,Proto=>'udp');

print "\nUDPServer Waiting for client on port 5000";

while(1)
{
    $socket->recv($recieved_data,1024);
    $peer_address = $socket->peerhost();
    $peer_port = $socket->peerport();
    print "\n($peer_address , $peer_port) said : $recieved_data";
}
Run Code Online (Sandbox Code Playgroud)

客户端代码::

use IO::Socket::INET;

# Create a new socket
$socket=new IO::Socket::INET->new(PeerAddr=>'127.0.0.1',PeerPort=>5000,Proto=>'udp');

@message_array = ("message", 120, "sample");
$socket->send(@message_array);
Run Code Online (Sandbox Code Playgroud)

在服务器端我改变了,

$socket->recv(@recieved_data,1024);
Run Code Online (Sandbox Code Playgroud)

但我收到这样的错误,

UDPServer Waiting for client on port 5000usage: $sock->recv(BUF, LEN [, FLAGS]) at udp_server.pl line 17
Run Code Online (Sandbox Code Playgroud)

如何发送数组并将其打印或显示在服务器端。?

sockets perl

5
推荐指数
0
解决办法
2093
查看次数

为什么括号在分配此正则表达式匹配时如此重要?

我有一段代码:

$s = "<sekar kapoor>";
($name) = $s =~ /<([\S\s]*)>/;
print "$name\n";               # Output is 'sekar kapoor'
Run Code Online (Sandbox Code Playgroud)

如果在第二行代码中删除了括号,则在变量中$name:

$name = $s =~ /<([\S\s]*)>/;   # $name is now '1'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它会像这样.任何人都可以解释为什么会这样吗?

regex perl

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

在perl中使用'pack'函数发送数组的问题

我正在使用pack函数将列表的内容发送到套接字.代码如下.

$message_array = pack ("(A*)*", @ul_dcch_message);
Run Code Online (Sandbox Code Playgroud)

列表内容是

@ul_dcch_message = (101101012411011, "emergency", 25, "simple");
Run Code Online (Sandbox Code Playgroud)

这段代码发送列表中包含的所有字符串和数字.但如果列表中的数字超过15位,我会得到这样的东西,

 1.01101012411011e+16emergency25simple
Run Code Online (Sandbox Code Playgroud)

我的要求是,我想"打包"数字和字符串,数字将超过15位或更多.

有什么办法吗?有没有其他模板可以做到这一点?

任何帮助表示赞赏.

perl pack

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

如何卸载Perl模块?

我在我的Linux机器上安装了一些Perl模块.如果我输入perldoc perllocal它显示我的机器中安装的Perl模块列表,但现在我不需要那些Perl模块,所以我想删除它们.

有谁知道如何卸载或删除Linux中安装的那些模块(debian 2.6.26)?

perl git-submodules

4
推荐指数
2
解决办法
3448
查看次数

模式也匹配连字符

我有一个像这样的Perl代码(模式匹配),

$var = "<AT>this is an at command</AT>";

if ($var =~ /<AT>([\s\w]*)<\/AT>/i)
{
    print "Matched in AT command\n";
    print "$var\n\n";
}
Run Code Online (Sandbox Code Playgroud)

如果标签之间的内容没有连字符,它工作正常.如果在像这样的标签之间出现的字符串之间插入连字符,则无效<AT>this is an at-command</AT>.

即使连字符也被插入,任何人都可以修复此正则表达式吗?

帮帮我吧

塞特希

regex perl

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

为什么我用Perl的XML :: Simple会出现"Out of memory"错误?

编辑::

大家好,

我有一个像这样的XML文件,

        <message>
            <c1>
                <rrcConnectionSetupComplete>
                    <rrc-TransactionIdentifier>2</rrc-TransactionIdentifier>
                    <criticalExtensions>
                        <c1>
                            <rrcConnectionSetupComplete-r8>
                                <selectedPLMN-Identity> 1 </selectedPLMN-Identity>
                                <dedicatedInfoNAS> 07410109014290112345671000028020000f0 </dedicatedInfoNAS>
                            </rrcConnectionSetupComplete-r8>
                        </c1>
                    </criticalExtensions>
                </rrcConnectionSetupComplete>
            </c1>
        </message>
Run Code Online (Sandbox Code Playgroud)

我使用像这样的Perl代码来访问xml文件中的数据(我应该坚持这种访问格式)

#!/usr/bin/perl

use strict;

use XML::Simple;

my $xml = new XML::Simple;

my $data = $xml->XMLin("uL-DCCH-Message.xml");

my $rrc_trans_identifier = $data->{'c1'}->{'rrcConnectionSetupComplete'}->{'rrc-TransactionIdentifier'};
print "rrc_trans_id :: $rrc_trans_identifier\n";

my $selected_plmn_id = $data->{c1}->{rrcConnectionSetupComplete}->{criticalExtensions}->{c1}->{'rrcConnectionSetupComplete-r8'}->{'selectedPLMN-Identity'};
print "plmn identity :: $selected_plmn_id\n";

my $rrc_dedicated_info_nas = $data->{c1}->{rrcConnectionSetupComplete}->{criticalExtensions}->{c1}->{'rrcConnectionSetupComplete-r8'}->{dedicatedInfoNAS};
print "dedicated info nas :: $rrc_dedicated_info_nas\n";
Run Code Online (Sandbox Code Playgroud)

产生的输出是,

rrc_trans_id :: 2
plmn identity ::  1
dedicated info nas ::  07410109014290112345671000028020000f0
Run Code Online (Sandbox Code Playgroud)

使用XML :: Simple的Perl代码适用于较小的XML文件(如上面的输出所示). …

xml perl parsing

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

拆分字符串以删除周围的<和>字符

我有一个像这样的字符串<name>,我想切断<>并取出 name并将其放入变量中.

如何使用perl"拆分"功能?

perl split

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

我如何使用Perl的Inline :: C?

我有一段这样的代码(Perl文件):

print "9 + 16 = ", add(9, 16), "\n";
print "9 - 16 = ", subtract(9, 16), "\n";
Run Code Online (Sandbox Code Playgroud)

C代码也是,

#include<stdio.h>

main ()
{
 int x = 9;
 int y = 16;
 printf(" add() is %d\n", add(x,y));
 printf(" sub() is %d\n", subtract(x,y));
//  return 0; 
}
int add(int x, int y) 
{
 return x + y;
}

int subtract(int x, int y) 
{
 return x - y;
} 
Run Code Online (Sandbox Code Playgroud)

如何使用perl运行此C代码Inline::C?我尝试过,但我并没有完全得到.

perl inline

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

标签 统计

perl ×10

regex ×2

arrays ×1

git-submodules ×1

hashmap ×1

inline ×1

pack ×1

parsing ×1

sockets ×1

split ×1

xml ×1