tag:forum.selfhtml.org,2005:/self
perl - fatals to browser – SELFHTML-Forum
2019-03-15T15:48:03Z
https://forum.selfhtml.org/self/2019/mar/15/perl-fatals-to-browser/1744468#m1744468
1211chef
2019-03-15T12:18:25Z
2019-03-15T12:18:25Z
perl - fatals to browser
<p>hallo erstmal wieder. war lange nicht hier und hab lange nichts mehr programmiert.</p>
<p>früher benutzte ich immer use CGI::Carp qw(fatalsToBrowser); um mir scriptfehler auf den browser schreiben zu lassen. jetz hab ich nen neuen provider und da funktionierts nicht mehr.</p>
<p>hab irgendwo gelesen dass "fatals to browser" nur bis perl-vers. 2 läuft? ich hab jetzt die version 5.16.3 drauf.</p>
<p>meine frage: was ist das einfachste mittel dass ich mir wieder wie gewohnt die fehlermeldungen auf den browser schreiben lassen kann?</p>
https://forum.selfhtml.org/self/2019/mar/15/perl-fatals-to-browser/1744469#m1744469
pl
2019-03-15T12:39:30Z
2019-03-15T12:39:30Z
perl - fatals to browser
<blockquote>
<p>was ist das einfachste mittel dass ich mir wieder wie gewohnt die fehlermeldungen auf den browser schreiben lassen kann?</p>
</blockquote>
<p>Du machst genau das was CGI::Carp macht: Mögliches Exceptions (fatal error) auffangen damit das Programm nicht abstürzt. Und das machst Du mit try/catch: Alles was kritisch ist (also Dein ganzer Code) kommt in den tryblock und im catchblock gibtst Du $@ aus unter dem header text/plain.</p>
<p>MFG</p>
https://forum.selfhtml.org/self/2019/mar/15/perl-fatals-to-browser/1744486#m1744486
1211chef
2019-03-15T15:14:03Z
2019-03-15T15:14:03Z
perl - fatals to browser
<p>problem gelöst, ich nehm use CGI::Carp qw(fatalsToBrowser set_message); und lass mir die message ausgeben. passt scho ;D</p>
https://forum.selfhtml.org/self/2019/mar/15/perl-fatals-to-browser/1744472#m1744472
1211chef
2019-03-15T12:53:50Z
2019-03-15T12:53:50Z
perl - fatals to browser
<p>hallo, kannst du bitte 1-2 schritte früher anfangen, bin ziemlich raus aus der thematik. kannst du mir ein beispiel geben?</p>
https://forum.selfhtml.org/self/2019/mar/15/perl-fatals-to-browser/1744475#m1744475
pl
2019-03-15T13:22:03Z
2019-03-15T13:27:31Z
perl - fatals to browser
<p>Ok, Beispiel:</p>
<pre><code class="block language-perl"><span class="token comment">#!/usr/bin/perl</span>
<span class="token keyword">use</span> strict<span class="token punctuation">;</span>
<span class="token keyword">use</span> warnings<span class="token punctuation">;</span>
<span class="token comment"># Alle Warnungen werfen Exceptions</span>
<span class="token variable">$SIG</span><span class="token punctuation">{</span>__WARN__<span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">sub</span> <span class="token punctuation">{</span> <span class="token keyword">die</span> <span class="token variable">@_</span> <span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">print</span> <span class="token keyword">eval</span><span class="token punctuation">{</span> <span class="token comment"># try</span>
<span class="token comment"># alle Prozesse zum Erzeugen</span>
<span class="token comment"># der Response, bei Fehlern wird</span>
<span class="token comment"># eine Exception geworfen</span>
header<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">.</span>content<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token comment"># catch</span>
<span class="token operator">||</span> <span class="token string">"Content-Type: text/plain; Charset=UTF-8\n\n$@"</span><span class="token punctuation">;</span>
<span class="token keyword">sub</span> <span class="token function">header</span><span class="token punctuation">{</span>
<span class="token string">"Content-Type: text/html; Charset=UTF-8\n\n"</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">sub</span> <span class="token function">content</span><span class="token punctuation">{</span>
<span class="token keyword">local</span> <span class="token variable">$/</span> <span class="token operator">=</span> <span class="token keyword">undef</span><span class="token punctuation">;</span>
<span class="token filehandle symbol"><DATA></span>
<span class="token punctuation">}</span>
__DATA__
<span class="token operator"><</span><span class="token operator">!</span>doctype html<span class="token operator">></span>
<span class="token filehandle symbol"><header></span>
<span class="token filehandle symbol"><title></span> Titel der Seite <span class="token filehandle symbol"></title></span>
<span class="token filehandle symbol"></header></span>
<span class="token filehandle symbol"><html></span>
<span class="token filehandle symbol"><body></span>
<span class="token filehandle symbol"><p></span>Asdf usw<span class="token operator">.</span><span class="token filehandle symbol"></p></span>
<span class="token filehandle symbol"></body></span>
<span class="token filehandle symbol"></html></span>
</code></pre>
<p>AEG.</p>
<p>PS: Zum Testen wirf mal im oberen Teil eine ex wie <code>die 123</code> oder <code>die "ex\n"</code> un guck mal was dann im Browser rauskommt.</p>
https://forum.selfhtml.org/self/2019/mar/15/perl-fatals-to-browser/1744478#m1744478
pl
2019-03-15T13:45:32Z
2019-03-15T13:45:32Z
perl - fatals to browser
<p>Wenn HTML::Template vefügbar ist, tete mal das hier</p>
<pre><code class="block language-perl"><span class="token comment">#!/usr/bin/perl</span>
<span class="token keyword">use</span> strict<span class="token punctuation">;</span>
<span class="token keyword">use</span> warnings<span class="token punctuation">;</span>
<span class="token keyword">use</span> HTML<span class="token punctuation">:</span><span class="token punctuation">:</span>Template<span class="token punctuation">;</span>
<span class="token comment"># Alle Warnungen werfen Exceptions</span>
<span class="token variable">$SIG</span><span class="token punctuation">{</span>__WARN__<span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">sub</span> <span class="token punctuation">{</span> <span class="token keyword">die</span> <span class="token variable">@_</span> <span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">print</span> <span class="token keyword">eval</span><span class="token punctuation">{</span> <span class="token comment"># try</span>
<span class="token comment"># alle Prozesse zum Erzeugen</span>
<span class="token comment"># der Response, bei Fehlern wird</span>
<span class="token comment"># eine Exception geworfen</span>
header<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">.</span>content<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token comment"># catch</span>
<span class="token operator">||</span> <span class="token string">"Content-Type: text/plain; Charset=UTF-8\n\n$@"</span><span class="token punctuation">;</span>
<span class="token keyword">sub</span> <span class="token function">header</span><span class="token punctuation">{</span>
<span class="token string">"Content-Type: text/html; Charset=UTF-8\n\n"</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">sub</span> <span class="token function">content</span><span class="token punctuation">{</span>
<span class="token keyword">local</span> <span class="token variable">$/</span> <span class="token operator">=</span> <span class="token keyword">undef</span><span class="token punctuation">;</span>
<span class="token keyword">my</span> <span class="token variable">$content</span> <span class="token operator">=</span> <span class="token filehandle symbol"><DATA></span><span class="token punctuation">;</span>
<span class="token keyword">my</span> <span class="token variable">$tt</span> <span class="token operator">=</span> HTML<span class="token punctuation">:</span><span class="token punctuation">:</span>Template<span class="token operator">-></span>new<span class="token punctuation">(</span>
scalarref <span class="token operator">=></span> <span class="token operator">\</span><span class="token variable">$content</span><span class="token punctuation">,</span>
die_on_bad_params <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span>
vanguard_compatibility_mode <span class="token operator">=></span> <span class="token number">1</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$tt</span><span class="token operator">-></span>param<span class="token punctuation">(</span><span class="token punctuation">{</span>
title <span class="token operator">=></span> <span class="token string">"Der Titel meiner Seite"</span><span class="token punctuation">,</span>
body <span class="token operator">=></span> <span class="token string">"Körper zeigen..."</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> <span class="token variable">$tt</span><span class="token operator">-></span>output<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
__DATA__
<span class="token operator"><</span><span class="token operator">!</span>doctype html<span class="token operator">></span>
<span class="token filehandle symbol"><header></span>
<span class="token filehandle symbol"><title></span> <span class="token variable">%title</span><span class="token operator">%</span> <span class="token filehandle symbol"></title></span>
<span class="token filehandle symbol"></header></span>
<span class="token filehandle symbol"><html></span>
<span class="token filehandle symbol"><body></span>
<span class="token filehandle symbol"><p></span> <span class="token variable">%body</span><span class="token operator">%</span> <span class="token filehandle symbol"></p></span>
<span class="token filehandle symbol"></body></span>
<span class="token filehandle symbol"></html></span>
</code></pre>
<p>mit oder ohne provozierte Fehler. MFG</p>
https://forum.selfhtml.org/self/2019/mar/15/perl-fatals-to-browser/1744481#m1744481
1211chef
2019-03-15T13:56:49Z
2019-03-15T14:03:53Z
perl - fatals to browser
<p>hab zum testen einfach mal ne variable definiert und das "my" weggelassen. also anstatt "my $foo;" einfach nur "$foo". dein script kackt ohne explizite fehlermeldung ab und bringt nur das übliche: "internal server error".</p>
<p>da sollte jetz aber stehen "fehler in zeile x bei strict subs, foo.pl" oder so ähnlich.</p>
<p>ps: wieso läuft "fatals to browser eigentlich nimmer? die ausgegebenen fehlermeldungen haben mir immer ausgereicht um schnell das bug zu finden. ist das sicher dass es nur bis 2.0 läuft oder ist vll. an der serverconfig einfach nur irgendwas in schieflage?</p>
<p>seitdem ich beim neuen bin ist eh alles bissi konfus.</p>
https://forum.selfhtml.org/self/2019/mar/15/perl-fatals-to-browser/1744482#m1744482
pl
2019-03-15T14:06:43Z
2019-03-15T14:06:43Z
perl - fatals to browser
<p>Ein eval{}Block fängt Exceptions auf, Tippfehler und grob fahrlässige Programmierfehler nicht. MFG</p>
https://forum.selfhtml.org/self/2019/mar/15/perl-fatals-to-browser/1744483#m1744483
1211chef
2019-03-15T14:09:45Z
2019-03-15T14:09:45Z
perl - fatals to browser
<p>ja dann brauch ich ne andere lösung like "fatals to browser"</p>
https://forum.selfhtml.org/self/2019/mar/15/perl-fatals-to-browser/1744489#m1744489
pl
2019-03-15T15:40:16Z
2019-03-15T15:40:16Z
perl - fatals to browser
<p>füge diesen Block hinzu:</p>
<pre><code class="block language-perl">BEGIN<span class="token punctuation">{</span>
<span class="token variable">$SIG</span><span class="token punctuation">{</span>__DIE__<span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">sub</span><span class="token punctuation">{</span>
<span class="token keyword">print</span> <span class="token string">"Content-Type: text/plain; Charset=UTF-8\n\n@_"</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
</code></pre>
<p>MFG</p>
https://forum.selfhtml.org/self/2019/mar/15/perl-fatals-to-browser/1744491#m1744491
pl
2019-03-15T15:48:03Z
2019-03-15T15:48:03Z
perl - fatals to browser
<p>Aha! Also funktionierts ja doch!</p>
<p>Schau nach der Version und lies Dir mal die Changelog durch zu diesem Modul.</p>
<p>MFG</p>