Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re: Printing set characters from offset.

by Corion (Pope)
on Sep 23, 2013 at 14:31 UTC ( #1055297=note: print w/ replies, xml ) Need Help??


in reply to Printing set characters from offset.

substr shows various uses of substr. Which parts did you find problematic? Which parts have you applied to your problem, and what were the results?


Comment on Re: Printing set characters from offset.
Download Code
Re^2: Printing set characters from offset.
by Jalcock501 (Sexton) on Sep 23, 2013 at 14:35 UTC
    Well, I did try:

     print{ substr(( my $lines, $schemePOS, 20) and ( my $lines, $abiPOS, 3)); }

    But I got the following:
    Global symbol "$lines" requires explicit package name at ./efhv2.pl li +ne 27. Global symbol "$lines" requires explicit package name at ./efhv2.pl li +ne 27. Not enough arguments for substr at ./efhv2.pl line 27, near "))"
    I'm not even sure if you can do that with the substr method. But as I say I'm not sure of the syntax for it.

      Please show a short, self-contained program that exhibits the problem.

      Your code is almost valid Perl, but it is highly nonsensical. Maybe you can explain in English what the characters you wrote are supposed to mean.

      I don't know how to advise you further, other than to learn Perl from a tutorial. You cannot take English sentences and hope that Perl will interpret them as you intend.

      That isn't what the "and" operator does. If you want to print 2 substrings, call substr twice, eg:

       print substr ($lines, $o1, $l1) . substr ($lines, $o2, $l2);
      A couple issues here.
      1. my is used to declare a lexical variable. In general, my $lines should appear once in your code, when you first use it. If you are going through a file, it might look like:

        while (my $lines = <$fh>) {...
        The text you have written declares two new, undefined variables named $lines.
      2. and is a logical operator. The code you wrote takes two lists (( my $lines, $schemePOS, 20) and ( my $lines, $abiPOS, 3)) and tests if they are both logically true. Since the lists are both longer than 0 elements, and returns a true value, and this true value is then fed into substr, which expects at least two arguments, thus the returned error.

      3. Lastly, print takes a list (parentheses), not a block (curly brackets) as an argument. Either

        print $arg1, $arg2, ...
        or, if you want to have a clear delimiter,
        print($arg1, $arg2, ...)
      The code you meant to write would probably look like:
      print substr($lines, $schemePOS, 20), substr($lines, $abiPOS, 3);
      I have fed print a list of two values, which are the return values of the substrs. There are a number of ways to do this, but they'd all fit this general pattern.

      Given your apparent familiarity with the language, I'd suggest going through some introductory learning materials. http://learn.perl.org has a number of resources available, including free access to Beginning Perl.


      #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1055297]
help
Chatterbox?
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: (11)
As of 2014-07-10 17:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (214 votes), past polls