1

多年来我一直使用 Fortran,当然也使用 Fortran 中的类型。

现在,由于我在一家新公司工作,我必须使用 Perl。

由于我的主要工作是处理文本文件中的数据并且必须通读文件,因此我想从这些数据中生成“对象”或“类型”。在 Fortran 中,我会这样做,因此进一步的工作要容易得多:)

Perl 是否可以像在 Fortran 中那样为严格的类型模式生成类型?

例如......这就是我在 Fortran 中所做的:

Type demoType
    integer i
    character(256) str
end Type

然后我可以使用这种类型的变量。Type(demoType) demoVar 例如

有没有机会在 Perl 中这样工作?

对不起我的英语......我是德语母语:)

4

4 回答 4

2

在 FORTRAN 中,与 C 非常相似,变量大多占据内存中的固定空间。所以Type像你demoType描述的项目是如何布局的,像字符串这样的东西必须预先分配一个最大大小。

在 Perl 中,标量值——主要是字符串和数字——占用的空间远远超过值本身的空间,因此不能以相同的方式映射。

要在 Perl 中编程,您必须远离实现,并让运行时系统为您处理事情。字符串的大小可以无限变化(取决于计算机的内存),关联值集的首选方法是使用散列(一种由任意字符串而不是数字索引的数组类型)。

例如,单个 demoType值可能看起来像

my $demo_type = {
  i => 99,
  str => 'text'
}

如果您想使用许多这样的配对,那么您应该查看 Perl 对象。

如果您没有面向对象软件的经验,那么您将面临一段漫长而迷人的旅程!

于 2013-04-09T08:28:13.970 回答
0

我建议你看看Modern Perl
如果您想使用类型,请查看 Moose 以面向对象的方式工作并公开方法和属性。
perl 的核心是动态评估变量以将类型分配给变量。

于 2013-04-09T07:48:28.517 回答
0

有一些 CPAN 模块可以帮助您。这是一个选项:Class::Struct(属于标准 perl 发行版,无需进一步安装)。示例(取自模块文档):

use Class::Struct;

struct( Rusage => {
        ru_utime => 'Timeval',  # user time used
        ru_stime => 'Timeval',  # system time used
});

struct( Timeval => [
        tv_secs  => '$',        # seconds
        tv_usecs => '$',        # microseconds
]);

# create an object:
my $t = Rusage->new(ru_utime=>Timeval->new(), ru_stime=>Timeval->new());


# $t->ru_utime and $t->ru_stime are objects of type Timeval.
# set $t->ru_utime to 100.0 sec and $t->ru_stime to 5.0 sec.
$t->ru_utime->tv_secs(100);
$t->ru_utime->tv_usecs(0);
$t->ru_stime->tv_secs(5);
$t->ru_stime->tv_usecs(0);
于 2013-04-09T08:09:04.697 回答
0

我认为您可能正在尝试存储整数值和相同数字的字符串化值。

{
  i = 123;
  str = "123";
}

如果是这样的话,你正在尝试做一些 Perl 自动为你做的事情。

my $integer = 123;

my $string = $integer;

print $string;

另一种可能性是您需要将数字与字符串相关联。在这种情况下,您可以使用:

  • 数组。

    my @data = ( 123, 'string' );
    
    print 'integer: ', $data[0], "\n";
    print 'string: ', $data[1], "\n";
    
  • 数组参考。

    my $data = [ 123, 'string' ];
    
    print 'integer: ', $data->[0], "\n";
    print 'string: ', $data->[1], "\n";
    
  • 哈希

    my %data = (
      123 => 'string',
    );
    
    print $data{123}, "\n";
    
  • 哈希参考

    my $data = {
      123 => 'string',
    };
    
    print $data->{123}, "\n";
    

无论如何,您应该真正发布匿名示例数据,这样我们才能真正帮助您学习 Perl。

我认为您应该阅读Perl 的文档。这是相当广泛的。这实际上是我学习 Perl 编程的方式。

至少阅读perlintroperldata。如果您需要构建嵌套数据结构,您还应该看看perldsc

您还可以查看learn.perl.org

于 2013-04-09T18:06:20.013 回答