in reply to Long URLs and Text::Wrap

Sounds like the text 'click on this url' is being processed differently than the URL itself. Maybe you're printing one and passing the other to Text::Wrap?

Give us a simplified test case that exhibits the problem you're seeing. Your description of the problem makes it sound like it's a logic problem with your code, not with Text::Wrap.

Replies are listed 'Best First'.
Re: Re: Long URLs and Text::Wrap
by kleinbiker7 (Sexton) on Nov 30, 2001 at 02:04 UTC
    OK Fastolfe, Thanks for writing.
    Here is my code:
    #! /usr/local/bin/perl use Text::Wrap; # Check Referring URL &check_url; # Code not included for clarity # Parse Form Contents &parse_form; # Code not included for clarity # Send E-Mail &send_mail; # This is the function we need to deal with! sub send_mail { my $count, $to, $name; # When these are commented out, the URL fits beautifully, # Only prob is that we need to wrap the text! $Text::Wrap::columns=60; $FORM{'message'} = wrap("","",$FORM{'message'}); if ($FORM{'fromemail'} eq "") { $FORM{'fromemail'} ="webmaster\@xxx +.com"; } if ($FORM{'from'} eq "") { $FORM{'from'} ="xxx.com"; } # Process form variables for up to 5 email addresses # sent in by the form. for ($count=1; $count<=5; $count++) { $to = 'email' . $count; $name = 'name' . $count; $type = 'email_type' . $count; if ($FORM{$to} ne "") { if ($FORM{$type} eq 'text') { open(MAIL,"|$mailprog -t"); print MAIL "To: $FROM{$name} <$FORM{$to}>\n"; print MAIL "From: $FORM{'from'} <$FORM{'fromemail'} +>\n"; print MAIL "Content-type: text\n"; print MAIL "Subject: National Biosolids Partnership + Web Site\n\n"; print MAIL "$FORM{'message'}\n"; close (MAIL); } else # it's HTML mail { # Grab the header $header = &GetTheHeader (); # Grab the footer $footer = &GetTheFooter (); # Format the message to HTML $message = $FORM{'message'}; $message =~ s/\n/<BR>/g; $message =~ s|(http\S+\s)|<A href="$1">$1</A>|g; open(MAIL,"|$mailprog -t"); print MAIL "To: $FROM{$name} <$FORM{$to}>\n"; print MAIL "From: $FORM{'from'} <$FORM{'fromemail'} +>\n"; print MAIL "Content-type: text/html\n"; print MAIL "MIME-Version: 1.0\n"; + print MAIL "Subject: National Biosolids Partnership + Web Site\n\n"; print MAIL "$header"; print MAIL "$message\n"; print MAIL "$footer"; close (MAIL); } } } print "Location: $FORM{'redirect'}\n\n"; }
    Cheers!
    Robert

      I said a simple test case, not your entire application. :)

      Before we begin, I need to state right off the bat: use strict and warnings and use CGI or die;

      Here is the test case I used. The results are not consistent with the problem you're seeing. See if you can reduce your application down to something as simple as this and see if your problem persists.

      #!/usr/bin/perl use strict; use warnings; use Text::Wrap; my $data; { local $/; $data = <DATA>; } $Text::Wrap::columns = 60; print "Before:\n"; print $data; print "\n"; print "After:\n"; print wrap("", "", $data); print "\n"; __DATA__ This is a block of text that will precede the URL that is being presen +ted THE URL http://xxx.yyy.com/admin/more_grassroots/bigalerts/thefeder +algovernment/oy_veit/email/the_email_template.html This is the concluding block of text that will appear AFTER the URL. If this block is NOT at the bottom of the email, then we need to fix t +he wrapping algorithm!
      This prints:
      ... After: This is a block of text that will precede the URL that is being presented THE URL http://xxx.yyy.com/admin/more_grassroots/bigalerts/thefeder algovernment/oy_veit/email/the_email_template.html This is the concluding block of text that will appear AFTER the URL. If this block is NOT at the bottom of the email, then we need to fix the wrapping algorithm!
      As expected.
        Maybe my conundrum is different, but I'd like it to output text like below, with text wrapped but URLs not. How would you do this? I thought of doing a split on the URL regex I found here, but that could get messy quick...

        Thanks!
        Troy

        ---

        This is a block of text that will precede the URL that is
        being presented

        THE URL
        http://xxx.yyy.com/admin/more_grassroots/bigalerts/thefederalgovernment/oy_veit/email/the_email_template.html

        This is the concluding block of text that will appear AFTER
        the URL.

        If this block is NOT at the bottom of the email, then we
        need to fix the wrapping algorithm!

      I agree, definitly make a simple example! You are concluding that Text::Wrap is the problem, but there is a lot more going on in there.

      Try peeking at $FORM{'message'} just before and just after the call to wrap, and see if it indeed got re-arranged at that point.

Re: Re: Long URLs and Text::Wrap
by kleinbiker7 (Sexton) on Nov 30, 2001 at 02:14 UTC
    Actual examples

    
    WHEN WRAP IS ENABLED
    ====================
    This is a block of text that will precede the URL
    that is being presented
    
    THE URL
    This is the concluding block of text that will appear AFTER
    the URL.
    
    If this block is NOT at the bottom of the email, then we
    need to fix the wrapping algorithm!
    
    http://xxx.yyy.com/admin/more_grassroot
    s/bigalerts/thefederalgovernment/oy_veit/email/the_email_te
    mplate.html
    
    
    
    
    WHEN WRAP IS N O T ENABLED
    ==========================
    This is a block of text that will precede the URL that is being presented
    
    THE URL    http://xxx.yyy.com/admin/more_grassroots/bigalerts/thefederalgovernment/oy_veit/email/the_email_template.html
    
    This is the concluding block of text that will appear AFTER the URL.
    
    If this block is NOT at the bottom of the email, then we need to fix the wrapping algorithm!