Segmentation fault protection: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (→{{header|Raku}}: Add a Raku example) |
SqrtNegInf (talk | contribs) (Added Perl) |
||
Line 55: | Line 55: | ||
... |
... |
||
</lang> |
</lang> |
||
=={{header|Perl}}== |
|||
<!-- To all the Perl pedants out there: Yes, I have elided much extraneous detail --> |
|||
It's fairly hard to get into this kind of trouble with Perl, as it manages memory for you, etc, etc. But it can happen, and the #1 technique for keeping yourself on the straight and narrow is to start your programs off with: |
|||
<code>use strict; |
|||
use warnings;</code> |
|||
This is so important, I'm going to say it again, louder: |
|||
<code><b>use strict; |
|||
use warnings;</b></code> |
|||
<p> |
|||
For example, this code will segfault: |
|||
<lang perl>unpack p,1x8</lang> |
|||
But with the safety features enabled you get compilation errors: |
|||
<lang perl>use strict; |
|||
use warnings; |
|||
unpack p,1x8</lang> |
|||
{{out}} |
|||
<pre>Bareword "p" not allowed while "strict subs" in use at exp/SegV line 6. |
|||
Execution aborted due to compilation errors.</pre> |
|||
But if you absolutely feel the need to court disaster, at least run your code in an external process. |
|||
<lang perl>qx/perl -e 'unpack p,1x8' 2>&1/ or die "Couldn't execute command\n";</lang> |
|||
=={{header|Phix}}== |
=={{header|Phix}}== |