in reply to Re: Re: Re: Re: Insert at regular increments
in thread Insert at regular increments

Using $/ is a nice esoteric idea requiring the person to really know perl in order to understand the code...
I'd saying changing the value of $/ to alter how a file is read in is pretty idiomatic perl[1], and failing that knowledge there was a link to the perlvar manpage.
but it won't work unless you already know that the file doesn't have the record separators.
If the records are delimited by 320 character chunks then the code should work as it'll remove any existing newlines then append one. If it gets much more complex than that then some seek()ing and closer examination of the data will be needed.
HTH

_________
broquaint

[1] what's more, setting $/ to an integer reference was implemented with record-oriented files in mind

update: reworded the second paragraph to be more accurate/less wrong (thanks for the heads-up Aristotle)

  • Comment on Re: Re: Re: Re: Re: Insert at regular increments

Replies are listed 'Best First'.
Re^6: Insert at regular increments
by Aristotle (Chancellor) on Jul 23, 2002 at 14:12 UTC
    Looks as though that's the case; if I understood correctly, bad files have 320 character records and good ones have 322 character ones.

    Makeshifts last the longest.

Re: Re: Re: Re: Re: Re: Insert at regular increments
by sauoq (Abbot) on Jul 23, 2002 at 19:21 UTC
    I'd saying changing the value of $/ to alter how a file is read in is pretty idiomatic perl, and failing that knowledge there was a link to the perlvar manpage.

    I'm quite comfortable with using $/ myself but in the real world not everyone knows perl as well as you or I. Many people, even those who are aware of $/, have never seen it used for fixed length records. My suggestion was to use English;[1]. If it were a one-liner I'd use $/ but in a program which needs to be maintained it is best to type the extra characters in $INPUT_RECORD_SEPARATOR and to add some comments too.

    If the records are delimited by 320 character chunks then the code should work as it'll remove any existing newlines then append one.

    To show the problem with the solution you provided, consider a record length of 3 characters and the string "abc\ndef" as input. (We'll ignore the fact that the delimiter was actually CRLF as it doesn't make your solution any more correct.) Your code would read in "abc" and append a newline to it. The next loop would read in "\nde" and append a newline to it... etc. Does that explanation make more sense?

    -sauoq
    "My two cents aren't worth a dime.";
    
    [1]What's more, use English; was implemented with maintainability in mind. :-P