小编Pet*_*ete的帖子

Perl :: 使用“use strict”集访问对象的成员?

use strict我是一名 Java/C/C#/python 编码员,正在尝试他的第一个 Perl 脚本,我有一个 Perl OOO 101 问题:需要时访问对象成员的语法是什么?

让我讲一下 Java。我有这个小程序,全部在一个类文件中:

class Dude{
    public String name;
    public Dude(String name){
        this.name = name;
    }
    public void IntroduceYourself(){
        System.out.println("Hi, I'm "+this.name);
    }
}

public toy(){
    Dude fred = new Dude("Fred");
    fred.IntroduceYourself();
}
Run Code Online (Sandbox Code Playgroud)

我的 Ubuntu 机器上的输出:

me@ubuntu01:~/$ java toy
Hi, I'm Fred
me@ubuntu01:~/$
Run Code Online (Sandbox Code Playgroud)

还有什么可以更简单呢?我创建一个Dude对象,然后调用 methodDude.IntroduceYourself()来访问类成员。

好的:我必须做完全相同的事情,但现在是在 Perl (v5.26.1) 中。再次,use strict;是必需的。这是我的悲惨尝试:

#!/usr/bin/perl
use warnings;
use strict;

# Define a "Dude" class
package Dude;
sub new
{ …
Run Code Online (Sandbox Code Playgroud)

syntax perl object member

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

Perl :: 你能在哈希中拥有对象列表吗?

在 Perl (v5.30.0) 中,我有一个脚本,它将一些标量和对象列表放入“容器”哈希中。对象列表似乎有问题,但我不确定我做错了什么。

这是我的代码:

#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;

package Person;
sub new
{
        my $type = shift;
        my %params = @_;
        my $self = {};
        $self->{'firstName'} = $params{'firstName'};
        $self->{'lastName'} = $params{'lastName'};
        bless $self, $type;
}

package main;

# I make a string:
my $string = "Some metadata...";

# I make a list of objects:
my @PersonArr = ();
push @PersonArr, Person->new( 'firstName' => "John", 'lastName' => "Schmitt" );
push @PersonArr, Person->new( 'firstName' => "Alice", 'lastName' => …
Run Code Online (Sandbox Code Playgroud)

perl hash list object

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

c strcat覆盖源字符串?

我是一个努力学习C的Java程序员.特别是,我正在努力理解strcat().如果我打电话:

strcat(dst, src);
Run Code Online (Sandbox Code Playgroud)

我得到strcat()将修改我的dst字符串.但是它不应该单独留下src String吗?考虑以下代码:

#include<stdio.h>
#include<string.h>

void printStuff(char* a, char* b){
        printf("----------------------------------------------\n");
        printf("src: (%d chars)\t\"%s\"\n",strlen(a),a);
        printf("dst: (%d chars)\t\"%s\"\n",strlen(b),b);
        printf("----------------------------------------------\n");
}

int main()
{
        char src[25], dst[25];
        strcpy(src,  "This is source123");
        strcpy(dst,  "This is destination");

        printStuff(src, dst);
        strcat(dst, src);
        printStuff(src, dst);

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

哪个在我的Linux机器上产生这个输出,用GCC编译:

----------------------------------------------
src: (17 chars) "This is source123"
dst: (19 chars) "This is destination"
----------------------------------------------
----------------------------------------------
src: (4 chars)  "e123"
dst: (36 chars) "This is destinationThis is source123"
----------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我假设完整的"This is source123"字符串仍在内存中,而strcat()已将char*src指针前进13个字符.但为什么?为什么13个字符?我已经玩过了dst字符串的长度,并且在strcat()完成后肯定会对src指针产生影响.但我不明白为什么......

另外......你会如何在GDB中调试呢?我尝试"步骤"进入strcat()函数,但我猜这个函数没有被调试器分析; "步骤"什么也没做.

谢谢!-ROA

PS …

c strcat

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

从 Perl 哈希引用开始构建数据结构是一种不好的方法吗?

一位同事编写了一些 Perl 代码 (v5.30.0) 来完成所有这些操作:

#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;

package main;

sub processScalarHash
{
        my $bar = $_[0];
        printf "A subroutine can access the scalar hash:  \"%s\"\n", $bar->{'key3'};
}

# Build the "Scalar Hash":
my $scalarHash = {};
$scalarHash->{'key1'} = 'dog';
$scalarHash->{'key2'} = 'cat';
$scalarHash->{'key3'} = 'fish';
bless $scalarHash;

printf "I can examine the scalar hash:\n";
print Dumper(\$scalarHash);

printf "I can access the scalar hash:  \"%s\"\n", $scalarHash->{'key1'};
my $tmpStr = 'key2';
printf "I can access the scalar …
Run Code Online (Sandbox Code Playgroud)

perl hash

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

我的Int*all数组是否已初始化为NULL?

我是一名努力理解C指针和数组的Java程序员.(完全披露:我也是CS学生,是的,这个问题可以帮助我完成编程任务.)

我正在尝试创建一个int*指针数组,然后确保每个指针都为NULL.稍后,当我需要在数组中查找数据时,这将发挥作用; 在给定的位置中是否存在有效的int或NULL将是重要的.

因此,为数组分配空间很简单,但如何将所有指针设置为NULL?这是我不那么出色的尝试:

#include<stdio.h>
#include<stdlib.h>

#define TABLESIZE   10

int main(int argc, char *argv[]){

    int* table = (int*) malloc(TABLESIZE * sizeof(int));

    // Initialize all *int pointers to NULL
    int i;
    for(i=0; i<TABLESIZE; i++){
        if((table+i)!=NULL){           // They may be NULL already?  I don't know...
            *(table+i) = NULL;         // This generates a warning:
                                       // "warning: assignment makes integer from pointer without a cast [-Wint-conversion]"
        }
    }

    // Sanity check :  are all int* are NULL ?
    for(i=0; i<TABLESIZE; i++){
        printf("%d:  %p  %d …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers initialization

0
推荐指数
1
解决办法
1382
查看次数

标签 统计

perl ×3

c ×2

hash ×2

object ×2

arrays ×1

initialization ×1

list ×1

member ×1

pointers ×1

strcat ×1

syntax ×1