Perl习题强力挫败感求指教

软件和网站开发以及相关技术探讨
回复
头像
liu滔
帖子: 7214
注册时间: 2010-10-09 23:01

Perl习题强力挫败感求指教

#1

帖子 liu滔 » 2011-08-31 21:04

Perl小白一枚,今天看那本《C程序员精通Perl》的``子过程和模块''部分,尝试了做后面的一道

习题,接着就迎来了强烈的挫败感啊 :em20

题目是``编写一个交换两个数组的子过程'',好吧,我冥思苦想的糟糕代码如下
[perl]
use strict;
use warnings;

my @st = qw(I have a dream);
my @nd = qw(Do you have dream);

print "first array: @st\nsecond array: @nd\n";

sub swap_array(\@\@) {
my $first = shift;
my $second = shift;
my $i = 0;
my $t;

foreach my $elt (@{$first}) {
$t = $$first[$i];
$$first[$i] = $$second[$i];
$$second[$i] = $t;
$i++;
}
}

swap_array(@st, @nd);
print "First array: @st\nSecond array: @nd\n";

[/perl]

我知道各位大神一定有更好的方法的,请告诉我以让我死个明白慷慨就义吧 :em06
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: Perl习题强力挫败感求指教

#2

帖子 eexpress » 2011-08-31 23:22

学术研究,可以找 cfy/tusooa
自带的功能,不去研究内部了。
@a=@b
● 鸣学
头像
ChenFengyuan
帖子: 770
注册时间: 2008-03-23 0:39

Re: Perl习题强力挫败感求指教

#3

帖子 ChenFengyuan » 2011-09-01 10:30

[perl]#!/usr/bin/perl

use strict;
use warnings;
use YAML;

my @a=qw(1 2 3);
my @b=qw(a b c);
my @t;
@t=@a;
@a=@b;
@b=@t;
print Dump \@a;
print "#" x 42;
print Dump \@b;
[/perl]
结果
---
- a
- b
- c
##########################################---
- 1
- 2
- 3
头像
liu滔
帖子: 7214
注册时间: 2010-10-09 23:01

Re: Perl习题强力挫败感求指教

#4

帖子 liu滔 » 2011-09-01 11:02

楼上两位,能不能给个定义子程序的例子呢,我现在就是搞不清楚Perl的那个引用啊, :em06

传递参数的时候不是应该用引用吗?那引用传递进去了应该怎么恢复成原来的那个数组呢? :em06
头像
tangboyun
帖子: 701
注册时间: 2009-07-25 1:57
联系:

Re: Perl习题强力挫败感求指教

#5

帖子 tangboyun » 2011-09-01 11:03

Perl里,标量的交换可以这么写:
($b,$a) = ($a,$b);
但array的话是不行的。

楼主你题目里,那2个数组一定等长吗?
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: Perl习题强力挫败感求指教

#6

帖子 eexpress » 2011-09-01 11:39

看书的,入门反而慢。
看实例,边看边学。别浪费时间,研究没用的过程。交换的,直接临时数组赋值而已,不论长度。
● 鸣学
头像
liu滔
帖子: 7214
注册时间: 2010-10-09 23:01

Re: Perl习题强力挫败感求指教

#7

帖子 liu滔 » 2011-09-01 15:20

tangboyun 写了:Perl里,标量的交换可以这么写:
($b,$a) = ($a,$b);
但array的话是不行的。

楼主你题目里,那2个数组一定等长吗?
可以假设它们是等长的 :em09 我那个就是假设了两者等长的 :em06
头像
liu滔
帖子: 7214
注册时间: 2010-10-09 23:01

Re: Perl习题强力挫败感求指教

#8

帖子 liu滔 » 2011-09-01 15:21

eexpress 写了:
看书的,入门反而慢。
看实例,边看边学。别浪费时间,研究没用的过程。交换的,直接临时数组赋值而已,不论长度。
刚才在折腾Apache,因为要学习用Perl来写CGI程序,无奈Apache不会用,配置起来相当不懂,现在觉得好纠结啊 :em20 :em20 :em20
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: Perl习题强力挫败感求指教

#9

帖子 eexpress » 2011-09-01 15:25

网页,网站的事情,你可以找叶子。
哦。你可以加入perlchina的googlecode的讨论组,可以问任何网络问题。都是些搞网站的在。
还有大公司介绍工作的。
● 鸣学
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: Perl习题强力挫败感求指教

#10

帖子 tusooa » 2011-09-03 16:37

代码: 全选

● perl -e '$a=[qw/a b c/];$b = [qw/A B C/];($a, $b) = ($b, $a); print "@$a\n@$b\n";'
A B C
a b c
reference是好东西啊。

代码: 全选

] ls -ld //
回复