http://www.perlmonks.org?node_id=1055307


in reply to Re^2: Printing set characters from offset.
in thread Printing set characters from offset.

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.