I don't think that a second parse or using tie would make any difference here. Bear in mind that Visual Basic is not that smart either. I also thought that an unexplicitly-defined variable, like x in your example, is treated by VB as the omnivorous Variant, but MSDN claims that it automatically becomes an object. Strange -- that might be a difference between VB6 and VB.NET.

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


In reply to Re: A Tricky Problem with Context by RSevrinsky
in thread A Tricky Problem with Context by tlhf

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.