Heylo,
我一直在努力让我的程序更容易维护.我有一个我声明的数组:
my @pizza = ($p1 = "Pizza One", $p2 = "Pizza Two" );
Run Code Online (Sandbox Code Playgroud)
然后我继续把这个@Pizza数组放在另一个数组中,如下所示:
my @food = (\@pizza);
Run Code Online (Sandbox Code Playgroud)
当我尝试通过@food属性访问$ p1或$ p2时,我得到一个返回值,如"Array {0x8001}",它似乎是一个内存引用.我试过的是这个:
$test = ${$food[$pizza[$p1]]};
Run Code Online (Sandbox Code Playgroud)
访问它的正确方法是什么?我希望不使用索引,以简化程序的可读性.你们能指出我正确的方向吗?
问候,
这就是我想要做的:
我有几个数据库(为了说明,这是一个例子)
数据库一
表一(D1T1)| 第一栏| 第二栏| 第三栏| 第四栏
表二(D1T2)| 第一栏| 第二栏| 第三栏
数据库二
表一(D2T1)| 第一栏| 第二栏| 第三栏
表二(D2T2)| 第一栏| 第二栏| 第三栏
表三(D2T2)| 第一栏| 第二栏| 第三栏
在这两个数据库之间存在与它们之间的特定记录相关的信息.我想要做的是创建一个数组(每个数组将代表一个数据库)和插入变量(每个变量代表一个table.field.在数据源中)一旦我这样做,我创建一个数组来保存所有teh数组(代表数据库的那些)作为这个数组将代表两个数据库中的单个条目,然后我可以对其进行操作.例:
@ D1 =(t1.col1,t1.col4,t2.col1); @ D2 =(t1.col1,t2.col1,t3.col2,t3.col3);
@rec =(\ @ D1,\ @ D2);
如果我想知道数据库2中的内容 - >表2 - >第4列,该声明是什么?我应该使用哈希吗?我确实需要这个二维数组/哈希.
任何帮助深表感谢.
MC
Sch*_*ern 10
不知道你想要完成什么,你正在建模什么数据,我能帮你解决的是语法混乱.这里有几点困惑.
# You wrote
my @pizza = ($p1 = "Pizza One", $p2 = "Pizza Two" );
Run Code Online (Sandbox Code Playgroud)
那不符合你的意思.它使阵列("Pizza One", "Pizza Two"),但它也将$p1是Pizza One和$p2是Pizza Two.我想你正试图分配Pizza One钥匙p1.我想你想使用哈希/关联数组:
# Try a hash
my %pizzas = (p1 => "Pizza One", p2 => "Pizza Two");
Run Code Online (Sandbox Code Playgroud)
现在$pizzas{p1}是Pizza One.或者,只需列出一个清单:
# An array
my @pizzas = ("Pizza One", "Pizza Two");
Run Code Online (Sandbox Code Playgroud)
然后$pizzas[0]就是Pizza One.继续...
# You wrote
my @food = (\@pizza);
Run Code Online (Sandbox Code Playgroud)
你正试图让另一个列表参考@pizza.上面$food[0]提到的@pizza不是你的意思.Perl中的引用是标量,并且具有不同的语法.
# What you probably meant
my $food = \@pizza;
Run Code Online (Sandbox Code Playgroud)
现在$food->[0]是Pizza One和$food->[0]是Pizza Two.
# You wrote
$test = ${$food[$pizza[$p1]]};
Run Code Online (Sandbox Code Playgroud)
只需添加更多括号,直到输出为止.我建议阅读Perl Data Structures Cookbook.哦,打开警告.在它们全部消失之前不要关闭它们并且不要将它们关闭,因为它们太多了.真.真的真的.
更新
"我想知道数据库2中的内容 - >表2 - >第4列该声明是什么?"
不要使用数字.给他们起名,因为我确定他们有名字.所以,是的,你想要哈希.那么让我们说数据库Foo - >表格栏 - >列Baz.你可以访问...
$values = $databases->{Foo}{Bar}{Baz};
Run Code Online (Sandbox Code Playgroud)
或长手
$tables = $databases->{Foo};
$columns = $tables->{Bar};
$values = $columns->{Baz};
Run Code Online (Sandbox Code Playgroud)
其中$values可以是Foo.Bar.Baz的所有值的数组引用,或者由Foo.Bar的主键键入的另一个哈希值.哪个更有意义取决于您正在做什么来处理数据.
我会留给你来调整Chaz的答案来生成哈希而不是数组.
当然,我必须要问为什么要将整个两个数据库转储到一个大的内存结构中,然后继续工作呢?如果您有数据库,请查询它们.它会更快,更灵活.
我们回到最基本的问题; 你真正想做的是什么?