From: Mark E. P. <me...@si...> - 2007-09-23 21:13:44
|
On 2007/09/23 17:01, Neil Cherry wrote: > Matthew Williams wrote: >> Neil Cherry wrote: >>> How do I pass, to a sub, an array that I want trimmed? By this I >>> mean that I pass the array to the subroutine and the original >>> array has it's data shifted off and the shifted data is returned. >>> >>> Ex: Array @buf = A B C D E F >> I assume that you know about "pop": >> >> $data=pop(@buf). > > Yep, I know pop but that won't work, it's the wrong end. That's why > I used shift. Pull is not the greatest name but it is what it > does. I pull the data off the @buf. :-) > >> If you need this to happen within a subroutine, an array reference is the >> way to go: >> >> $data=myfunc(\@buf); >> >> sub pull { >> my ($arrayRef)=@_; >> >> my $data=pop(@$arrayRef); > > I think this is what Mark was suggesting also. I'm about to give > that a try. > > Thanks > Looking a bit closer at what your code is actually doing (as opposed what the errors are), you probably should just use array slices. my @buf = qw( A B C D E F ); my $l = 4; print "buf: @buf\n"; my @rtn_arr = @buf[0 .. $l-1]; @buf = @buf[$l .. $#buf]; #can't use "4..-1" cuz that's empty print "rtn_arr: @rtn_arr\n"; print "buf: @buf\n"; Mark |