in reply to A Tricky Problem with Context
You are clearly building your own namespace table -- that's how you determined in the first example that x was an array. In nonstrict code, you're just going to have to determine a variable's type based on assignment. In the second example, that's not too difficult: split would imply an array. But what if the unknown Object is returned from a function:
x = FetchSomethingStrange(a) Function FetchSomethingStrange(p as Integer) If p < 5 Then FetchSomethingStrange = split("my,array,result", ",") Else FetchSomethingStrange = "my string result" End If End Function
Now, in this case, there's no way of knowing until runtime whether FetchSomethingStrange is going to return a String or an array. That leaves you with 2 options (as I see it):
The listrefs would translate your nonstrict code as follows:
$x = b_split('john,biran,someone',','); print($x->[0] . $x->[2]); sub b_split { # not fully finished, needs $count and $compare my ($string, $delimiter, $count, $compare) = @_; $delimiter = quotemeta($delimiter); return [ split(/$delimiter/, $string) ]; }
My code translates well, too:
$x = FetchSomethingStrange($a); sub FetchSomethingStrange { my($p) = @_; my $FetchSomethingStrange; # Autogenerated return value for VB funct +ions if ($p < 5) { $FetchSomethingStrange = b_split("my,array,result", ","); } else { $FetchSomethingStrange = "my string result" } return $FetchSomethingStrange; # Autoreturn }
Again, you should be fine as long as the Perl translation is always talking in scalars, be they adapted VB scalars (String, Integer, Double) , Variant or Object types, or listrefs derived from Variant/Object auto-arrays or even from explicitly Dimed arrays.
- Richie
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: A Tricky Problem with Context
by Juerd (Abbot) on Apr 08, 2002 at 09:40 UTC | |
|
Re: Re: A Tricky Problem with Context
by tlhf (Scribe) on Apr 08, 2002 at 14:34 UTC |