Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

comment on

( #3333=superdoc: print w/replies, xml ) Need Help??
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):

  • a VBVar object, like stephen suggested
  • translating all VB arrays to Perl listrefs.

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

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

  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or or How to display code and escape characters are good places to start.
Log In?

What's my password?
Create A New User
Domain Nodelet?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2021-11-30 11:35 GMT
Find Nodes?
    Voting Booth?

    No recent polls found