Commander Salamander has asked for the wisdom of the Perl Monks concerning the following question:

UPDATE: PROBLEM SOLVED

Turns out all I had to do was join the array into a string and then print it.

Thanks!

Hi

I'm rather new to cgi, so please bear with me. I have a cgi script that stores an array of hidden text with a "Download Data" button. The button calls a small script with the lines:
print "Content-Type:application/x-download\n"; print "Content-Disposition:attachment;filename=whatever.txt\n\n"; print @mytext

In this code, @mytext is the hidden data that was passed as a parameter. Everything works peachy, except that my "\t" and "\n" characters in @mytext are maintained as literal text. How do I get the tabs and new-lines interpreted so that the saved text file is properly formatted?

Thanks for your time.

Replies are listed 'Best First'.
Re: Really simple (I hope) CGI question
by Joost (Canon) on Aug 12, 2005 at 23:55 UTC
    \t and \n are only interpreted as tabs and newlines in double-quoted text:
    $nl = "\n"; # newline $nl = '\n'; # backslash n $nl = qq(\n); # newline $nl = q(\n); # backslash n

    Basically, this means that your literal text is either quoted wrong (if it's a literal string in your code) or it has a literal \n (not a newline) in the text (if you're reading it from a file / somewhere else).

    see also Quote and Quote-like Operators in the perlop manpage.

    update: If you *really* want to interpret all \n as newline and \t as tabs from your input, you can do something like this:

    for (@input) { s/\\n/\n/g; # replace \n with newline s/\\t/\t/g; # replace \t with tab }
    Note: this doesn't take quoting into account (\\n will be \ followed by a newline)