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) 在 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) 我是一个努力学习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 …
一位同事编写了一些 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) 我是一名努力理解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)