{"id":476724,"date":"2026-04-20T20:16:00","date_gmt":"2026-04-20T20:16:00","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=476724"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=476724","title":{"rendered":"Perl \u2014 \u0437\u0440\u044f \u0437\u0430\u0431\u044b\u0442\u044b\u0439 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f?"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f Perl \u043e\u0431\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c: \u043e \u043d\u0451\u043c \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u0438 \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c Perl \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435, \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0442 \u0435\u0433\u043e \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0432\u0430\u043c \u043e \u043d\u0451\u043c \u043f\u043e\u0432\u0435\u0434\u0430\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0435\u0433\u043e \u0444\u0438\u0447\u0430\u0445 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/206\/fdb\/249\/206fdb24931c19cc3c9ced0600ed57ea.jpg\" alt=\"Perl\" title=\"Perl\" width=\"733\" height=\"774\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/206\/fdb\/249\/206fdb24931c19cc3c9ced0600ed57ea.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/206\/fdb\/249\/206fdb24931c19cc3c9ced0600ed57ea.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Perl<\/figcaption><\/div>\n<\/figure>\n<h2>\u0427\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Perl?<\/h2>\n<p>Perl\u00a0\u2014 \u044d\u0442\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a (\u043a\u0430\u043a Bash \u0438\u043b\u0438 Python), \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0435\u0449\u0451 \u0432 1987\u00a0\u0433\u043e\u0434\u0443 \u041b\u044d\u0440\u0438 \u0412\u043e\u043b\u043e\u043c. Perl\u00a0\u2014 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439. \u041f\u043e\u00a0\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0443 \u043a\u043e\u0434 \u043d\u0430\u00a0\u043d\u0451\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a\u00a0\u0447\u0442\u043e\u2011\u0442\u043e \u043c\u0435\u0436\u0434\u0443 Python, C, \u0438 \u0447\u0435\u043c\u2011\u0442\u043e \u0441\u0432\u043e\u0438\u043c, \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043e\u0434\u043d\u0438\u043c \u0438\u0437\u00a0\u0435\u0433\u043e \u0434\u0435\u0432\u0438\u0437\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f\u00a0\u2014 \u00ab\u0417\u0434\u0435\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c\u00bb, \u0447\u0442\u043e\u00a0\u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 \u044f\u0437\u044b\u043a\u0430.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u201cHello, World!\u201d:<\/p>\n<pre><code class=\"perl\">my $var = \"World\"; # \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 $varprint (\"Hello, $var!\\n\");       # \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \"Hello, World!\"print \"Hello, $var!\\n\";         # \u0411\u0435\u0437 \u0441\u043a\u043e\u0431\u043e\u0447\u0435\u043aprint \"Hello, \", $var, \"!\\n\";   # \u0412 \u0432\u0438\u0434\u0435 \u043b\u0438\u0441\u0442\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u044f\u0442\u043e\u0439print \"Hello, \" . $var . \"!\\n\"; # \u0412 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0443 \u0442\u043e\u0447\u043a\u0430\u043c\u0438printf \"Hello, %s!\\n\", $var;    # printfsay \"Hello, $var!\"; # say - \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 print, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430 \u043a\u043e\u043d\u0446\u0435                    # \u0415\u0441\u0442\u044c \u0432 Perl 5.10 \u0438 \u043f\u043e\u0437\u0434\u043d\u0435\u0435<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u043e\u0442 10 \u0434\u043e 1:<\/p>\n<pre><code class=\"perl\"># \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u043b\u044f C for loopfor (my $i = 10; $i &gt; 0; --$i) {    say $i;}# foreach \u043f\u043e \u043f\u0435\u0440\u0435\u0432\u0451\u0440\u043d\u0443\u0442\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u043e\u0442 1 \u0434\u043e 10foreach my $i (reverse 1..10) {    say $i;}# \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043c\u0435\u0436\u0434\u0443 foreach \u0438 for \u043d\u0435\u0442for my $i (reverse 1..10) {    say $i;}# \u0417\u0430\u043f\u0438\u0441\u044c \u0438 \u0432\u044b\u0432\u043e\u0434 \u0438\u0437 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f $_for (reverse 1..10) {    # \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438    # for my $_ (reverse 1..10)    say $_;}# \u0412 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443say $_ for reverse 1..10;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h2>\u041a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439.<\/h2>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a Perl \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u043a\u0430\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f Unix, \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 Unix \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043e\u043d \u0441\u0442\u043e\u0438\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0441\u0442\u044c \u043b\u0438 \u043e\u043d \u0443 \u0432\u0430\u0441 <span class=\"habrahidden\"><code>whereis perl<\/code><\/span>.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 <s>\u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0438 \u043d\u0435\u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043c\u043e\u0439<\/s> Windows \u043d\u0435 \u0432\u0441\u0451 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Bash, \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u0442\u0430\u043d\u0446\u044b \u0441 \u0431\u0443\u0431\u043d\u043e\u043c \u0434\u043b\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 Linux \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e <a href=\"https:\/\/strawberryperl.com\/\" rel=\"noopener noreferrer nofollow\">c\u043a\u0430\u0447\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 Perl<\/a>.<\/p>\n<p>Perl \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439: \u0447\u0438\u0442\u0430\u0442\u044c, \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c, \u0443\u0434\u0430\u043b\u044f\u0442\u044c, \u0444\u0430\u0439\u043b\u044b \u0438 \u043f\u0430\u043f\u043a\u0438, \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 cat \u0438\u043b\u0438 sort \u0432 Perl \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code class=\"perl\"># cat \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u043b\u044e\u0431\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435.# \u0414\u0430\u0436\u0435 \u0442\u043e\u0447\u043a\u0430 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0431\u043b\u043e\u043a\u0430 \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u044c.print &lt;&gt; # \u0410\u043b\u043c\u0430\u0437\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &lt;&gt; - \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u0432\u043e\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430# \u042d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043b \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0444\u0430\u0439\u043b\u044b,# \u0442\u043e \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0432\u043e\u0434 \u0441 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430# \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0432\u0435\u0440\u043d\u0451\u0442 end-of-file \u043a\u043e\u0434 (\u0421trl-D) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0435<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"perl\">print sort &lt;&gt; # \u0421\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0438\u0445 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"perl\"># \u0410\u043d\u0430\u043b\u043e\u0433 'nl -b a' \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u043c\u0435\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0438\u0445 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044cprintf \"%6d  $_\", $. while &lt;&gt; # $. \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<details class=\"spoiler\">\n<summary>\u0427\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0430\u043b\u043c\u0430\u0437\u043d\u043e\u043c\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0443 &lt;&gt; \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Perl \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"perl\"># \u0421\u0430\u0431\u0440\u0443\u0442\u0438\u043d\u0430 (\u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0447\u0442\u043e \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445) subrsub subr {    my $ret; # \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 $ret    # \u0415\u0441\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, @ARGV, \u043f\u0443\u0441\u0442\u043e\u0439, \u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c    # \u0432\u0432\u043e\u0434 \u0441 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 $ret    if (!@ARGV)    {        while (my $line = &lt;STDIN&gt;) {            $ret .= $line;        }    }    # \u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0442\u043e \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439    # \u0444\u0430\u0439\u043b \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0432 $ret    else    {        foreach my $ARG (@ARGV)        {            open my $fd, \"&lt;\", $ARG;            while (my $line = &lt;$fd&gt;) {                $ret .= $line;            }        }    }    return $ret;}# \u0412\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438print &amp;subr<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0430<\/p>\n<\/div>\n<\/details>\n<p>\u041c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c <a href=\"http:\/\/main.pl\" rel=\"noopener noreferrer nofollow\">main.pl<\/a> \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u043a\u043e\u0434 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c:<\/p>\n<pre><code>perl main.pl PATH_TO_FILE<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 Perl \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u044b \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e \u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 \u043d\u0435\u043f\u0440\u0435\u0432\u0437\u043e\u0439\u0434\u0451\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c (\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444) \u043c\u043e\u0436\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0436\u0438\u0437\u043d\u044c.<\/p>\n<pre><code class=\"perl\"># \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 `` \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0435\u0451 \u0432\u044b\u0432\u043e\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044fmy $ping = `ping google.com -w 2`;print $ping<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"perl\"># -| \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0430open( my $ping, '-|', 'ping google.com -w 2' );# \u0411\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e \u0445\u043e\u0434\u0443 \u0435\u0451 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044fwhile my $line (&lt;$ping&gt;) {    print $line}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e Perl \u043a\u0443\u0434\u0430 \u043f\u0440\u043e\u0449\u0435, \u043c\u043e\u0449\u043d\u0435\u0435 \u0438 \u0433\u0438\u0431\u0447\u0435 \u0447\u0435\u043c Bash, \u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0431\u043e\u043b\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0435\u0442 Bash, \u0434\u0430 \u0438 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043e. \u041d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Perl, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430 Bash, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438 \u043d\u0435\u0442, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Unix, \u043d\u043e \u0438 \u043d\u0430 Windows, \u0445\u043e\u0442\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0431\u044b \u0442\u0430\u043a\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u043e\u0448\u0451\u043b Python. \u0412\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0448\u0438\u0445 \u0446\u0435\u043b\u0435\u0439, \u0436\u0435\u043b\u0430\u043d\u0438\u0439 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c<\/h2>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c &#8212; \u044d\u0442\u043e \u043f\u043e\u0436\u0430\u043b\u0443\u0439 \u0441\u0430\u043c\u0430\u044f \u0441\u0438\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 Perl \u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u043a\u0442\u043e\u0440 \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u0432\u0448\u0438\u0439 \u0435\u0433\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438, \u043d\u0443 \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u0441\u0430\u043c \u043d\u0430\u0447\u0430\u043b \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0430\u0442\u044c. \u0418\u0437\u2011\u0437\u0430 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441\u00a0regexp \u0438 \u0442\u0435\u043c \u043a\u0430\u043a\u00a0\u0441\u0442\u0440\u0430\u0448\u043d\u043e \u0438 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u043e\u0434 \u043d\u0430\u00a0regexp \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c, \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u043e\u00a0Perl \u043e\u0442\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u00abwrite only language\u00bb, \u043d\u043e\u00a0\u044d\u0442\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043d\u0435\u00a0\u0442\u0430\u043a \u0438 \u0434\u0430\u0436\u0435 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0434\u043e\u043a\u0430\u0436\u0443 \u044d\u0442\u043e \u0432\u0430\u043c \u043d\u0430\u00a0\u0441\u0432\u043e\u0451\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435.<\/p>\n<p>\u0422\u0430\u043a \u0432\u043e\u0442, \u043a\u043e\u0433\u0434\u0430 \u044f \u0434\u0435\u043b\u0430\u043b 3D \u0438\u0433\u0440\u0443 \u0441 raylib, \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 3D \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043a\u0430\u0440\u0442 \u0438 \u044f \u043d\u0430\u0448\u0451\u043b <a href=\"https:\/\/trenchbroom.github.io\/\" rel=\"noopener noreferrer nofollow\">TrenchBroom<\/a>. \u0414\u043b\u044f \u044d\u043d\u0442\u0438\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 TrenchBroom \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 .FGD, \u0430 \u044d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u043e\u0447\u0435\u043d\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0439, \u043f\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0438 \u0441 \u043d\u0438\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0430\u043a\u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u0443 \u0438 \u043c\u043d\u0435 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0439\u0434\u0451\u0442\u0441\u044f \u044d\u0442\u0438\u0445 \u044d\u043d\u0442\u0438\u0442\u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0430 C\/C++, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043a \u044d\u0442\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0443 \u043f\u0440\u0438\u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f? \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f C\/C++ \u043a\u043e\u0434 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u0432\/\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0435\u0433\u043e \u0432 .FGD.<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0443\u0436\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0444\u0430\u0439\u043b \u0442\u0430\u043a\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430:<\/p>\n<pre><code class=\"cpp\">#ifndef EXAMPLE_H#define EXAMPLE_H\/\/ Example classstruct Example {    const char* name;    int hp; \/\/ Character's health    void spawn();    \/\/ Substracts damage from hp    void takeDamage(int damage);};struct Example2 {    int ammount = 0; \/\/ Ammount of stuff    Example2();    \/\/ Returns true if ammount is even    bool isEven();};#endif \/\/EXAMPLE_H<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u043e\u0442 \u0432 \u044d\u0442\u043e:<\/p>\n<pre><code>@PointClass size(-16 -16 -32, 16 16 32) = Example : \"Example class\"[    name(string): :  : \"\"    hp(integer): :  : \"Character's health\"]@PointClass size(-16 -16 -32, 16 16 32) = Example2 : \"\"[    ammount(integer): : 0 : \"Ammount of stuff\"]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0443 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043a\u0430\u043a \u043e\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0435:<\/p>\n<ol>\n<li>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0442\u0438\u043f\u0430 <code>\/\/ COMMENT\\n struct NAME {...};<\/code> \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 .FGD \u043a\u043b\u0430\u0441\u0441\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u0430 <code>@PointClass size(-16 -16 -32, 16 16 32) = NAME : \"COMMENT\" [...]<\/code> \u043f\u0440\u0438 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0442\u0438\u043f\u0430 <code>TYPE NAME = DEFINITION; \/\/ COMMENT<\/code> \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u044f .FGD \u043a\u043b\u0430\u0441\u0441\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 <code>NAME(TYPE): : DEFINITION : \"COMMENT\"<\/code>, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0438\u043f\u044b int \u0438 const char* \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 integer \u0438 string.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435 \u043b\u0438\u0448\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u0430, \u043b\u0438\u0448\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438, \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0438 \u0438\u043d\u043a\u043b\u044e\u0434\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u043d\u0430 Perl \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \u0422\u0443\u0442 \u044f \u0443\u0442\u043e\u0447\u043d\u044e, \u0447\u0442\u043e \u043a\u0440\u043e\u043c\u0435 C\/C++ \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u043e \u0442\u043e\u043b\u043a\u043e\u043c \u0438 \u043d\u0435 \u0437\u043d\u0430\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u0435 \u043c\u043d\u043e\u0433\u043e. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0430 \u0442\u043e \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0447\u0440\u0435\u0437\u043c\u0435\u0440\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c, \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u043c \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u043c.<\/p>\n<p>regex.h \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 IP \u0430\u0434\u0440\u0435\u0441, \u043f\u0430\u0440\u043e\u043b\u044c, \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u0430\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0442\u043f., \u043d\u043e \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435, \u0442\u043e \u0442\u0443\u0442 \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0443\u0436\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0442\u044c, \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0439\u044e\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0435 <s>write only<\/s> \u0440\u0435\u0433\u0435\u043a\u0441\u043f\u044b. std::regex \u0443\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u0441 \u043d\u0438\u043c \u0432\u0441\u0451 \u0442\u0430 \u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/p>\n<p>\u0415\u0441\u0442\u044c <a href=\"https:\/\/github.com\/PCRE2Project\/pcre2\" rel=\"noopener noreferrer nofollow\">PCRE2 (Perl Compatable Regular Expressions)<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 \u043a\u0443\u0447\u0435\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043c\u043d\u043e\u0433\u043e \u0448\u0443\u043c\u0430 \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0435\u0433\u043e \u0442\u0440\u0443\u0434\u043d\u0435\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c, \u0438 \u0434\u043b\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043a\u0438 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u044d\u0442\u043e \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0440.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0438\u0437 \u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/* Set PCRE2_CODE_UNIT_WIDTH to indicate we will use 8-bit input. *\/#define PCRE2_CODE_UNIT_WIDTH 8#include &lt;pcre2.h&gt;#include &lt;string.h&gt; \/* for strlen *\/#include &lt;stdio.h&gt;  \/* for printf *\/int main(int argc, char* argv[]) {    if (argc != 3) {        fprintf(stderr, \"Usage: %s &lt;pattern&gt; &lt;subject&gt;\\n\", argv[0]);        return 1;    }    const char *pattern = argv[1];    const char *subject = argv[2];    \/* Compile the pattern. *\/    int error_number;    PCRE2_SIZE error_offset;    pcre2_code *re = pcre2_compile(        pattern,               \/* the pattern *\/        PCRE2_ZERO_TERMINATED, \/* indicates pattern is zero-terminated *\/        0,                     \/* default options *\/        &amp;error_number,         \/* for error number *\/        &amp;error_offset,         \/* for error offset *\/        NULL);                 \/* use default compile context *\/    if (re == NULL) {        fprintf(stderr, \"Invalid pattern: %s\\n\", pattern);        return 1;    }    \/* Match the pattern against the subject text. *\/    pcre2_match_data *match_data =        pcre2_match_data_create_from_pattern(re, NULL);    int rc = pcre2_match(        re,                   \/* the compiled pattern *\/        subject,              \/* the subject text *\/        strlen(subject),      \/* the length of the subject *\/        0,                    \/* start at offset 0 in the subject *\/        0,                    \/* default options *\/        match_data,           \/* block for storing the result *\/        NULL);                \/* use default match context *\/    \/* Print the match result. *\/    if (rc == PCRE2_ERROR_NOMATCH) {        printf(\"No match\\n\");    } else if (rc &lt; 0) {        fprintf(stderr, \"Matching error\\n\");    } else {        PCRE2_SIZE *ovector = pcre2_get_ovector_pointer(match_data);        printf(\"Found match: '%.*s'\\n\", (int)(ovector[1] - ovector[0]),               subject + ovector[0]);    }    pcre2_match_data_free(match_data);   \/* Free resources *\/    pcre2_code_free(re);    return 0;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0410 \u0432\u043e\u0442 boost\/regex.hpp &#8212; \u044d\u0442\u043e \u043f\u043e\u0436\u0430\u043b\u0443\u0439 \u0441\u0430\u043c\u044b\u0439 \u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0437 \u0432\u0441\u0435\u0445, \u0442\u043a \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443 \u0438 \u043c\u043e\u0449\u044c \u0440\u0435\u0433\u0435\u043a\u0441\u043f\u0430 \u041f\u0451\u0440\u043b\u0430, \u043d\u0438\u043a\u0430\u043a \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0434\u0430\u0432\u044f \u043d\u0430 \u0433\u043b\u0430\u0437\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u043c\u043e\u0433 \u0431\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441 boost\/regex.hpp<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include &lt;boost\/regex.hpp&gt;#include &lt;fstream&gt;#include &lt;iterator&gt;#include &lt;string&gt;int main(int argc, char **argv){    std::ifstream ifs(argv[1], std::ios::binary);    std::string source((std::istreambuf_iterator&lt;char&gt;(ifs))                      , std::istreambuf_iterator&lt;char&gt;());    const boost::regex re(R\"((?xs)    (?: \\s* \/\/\\s* (?&lt;struct_comment&gt;[^\\n]*) )?    (?&lt;struct&gt;        \\s* struct\\s+ (?&lt;struct_name&gt;\\w+\\d?)\\s* \\{            (?&lt;struct_content&gt;.*?)        \\};    )    )\", boost::regex::perl);    const std::string repl = R\"(@PointClass size(-16 -16 -32, 16 16 32) = $+{struct_name} : \"$+{struct_comment}\"[    $+{struct_content}])\";    source = boost::regex_replace( source, re, repl                                 , boost::match_default                                 | boost::format_perl );    std::ofstream ofs(argv[2], std::ios::binary);    ofs &lt;&lt; source;    return 0;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438:<\/p>\n<pre><code>#ifndef EXAMPLE_H#define EXAMPLE_H@PointClass size(-16 -16 -32, 16 16 32) = Example : \"Example class\"[    const char* name;    int hp; \/\/ Character's health    void spawn();    \/\/ Substracts damage from hp    void takeDamage(int damage);]@PointClass size(-16 -16 -32, 16 16 32) = Example2 : \"\"[    int ammount = 0; \/\/ Ammount of stuff    Example2();    \/\/ Returns true if ammount is even    bool isEven();]#endif \/\/EXAMPLE_H<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0423 \u043f\u0438\u0442\u043e\u043d\u0430 \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c <a href=\"https:\/\/docs.python.org\/3\/howto\/regex.html\" rel=\"noopener noreferrer nofollow\">re<\/a> \u0442\u043e\u0436\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0433\u043e regex \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"python\">charref = re.compile(r\"\"\" &amp;[#]                # Start of a numeric entity reference (     0[0-7]+         # Octal form   | [0-9]+          # Decimal form   | x[0-9a-fA-F]+   # Hexadecimal form ) ;                   # Trailing semicolon\"\"\", re.VERBOSE)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0443 \u0430 \u043a\u0430\u043a \u0431\u044b \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043d\u0430 \u0441\u0430\u043c\u043e\u043c Perl? \u041a\u0430\u043a-\u0442\u043e <a href=\"https:\/\/github.com\/infgotoinf\/C-structs-to-valveFGD\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u043a<\/a>, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u0438 \u0441 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0442\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"perl\">#!\/usr\/bin\/env perl# \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0430\u043c\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e Perl \u043e\u043d\u0430 \u043f\u043e \u0434\u0435\u0432\u043e\u043b\u0442\u0443 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 strict \u0438 warningsuse v5.42;# \u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b untf8use utf8;binmode STDOUT, ':encoding(UTF-8)';binmode STDIN, ':encoding(UTF-8)';# \u041f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 - C \u0441\u0442\u0440\u043a\u0443\u0442\u0443\u0440\u0430, \u0432\u0442\u043e\u0440\u043e\u0439 - \u043f\u0443\u0442\u044c \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043bmy $source = $ARGV[0];my $dest = $ARGV[1];# \u0427\u0442\u0435\u043d\u0438\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430open (my $source_file, '&lt;', $source)    or die \"Could not open source file: $!\\n\";# \u0421\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043e\u0434\u043d\u0443my $source_code = join '', &lt;$source_file&gt;;# \u0417\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430 .FGD$source_code =~ s{# \u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435(?: ^\\s* \/\/\\s* (?&lt;struct_comment&gt;[^\\n]*) )?# \u0411\u043b\u043e\u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b(?&lt;struct&gt;    \\s* struct\\s+ (?&lt;struct_name&gt;\\w+\\d?)\\s* \\{        (?&lt;struct_content&gt;.*?)    \\};)}{\\@PointClass size(-16 -16 -32, 16 16 32) = $+{struct_name} : \"$+{struct_comment}\"[    $+{struct_content}]}mgxs; # m \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b $^\\R \u0431\u044b\u043b\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u043d\u0435 \u0432\u0441\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430       # g \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u043d\u044b \u0432\u0441\u0435\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e       # x \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b regexp \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438 \u0432\u0441\u0451 \u043c\u043e\u0436\u043d\u043e       #   \u0431\u044b\u043b\u043e \u0447\u0438\u0442\u0430\u0435\u043c\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c       # s \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b . \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u0432 \u0441\u0435\u0431\u044f \\n# \u0417\u0430\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043d\u0430 \u043f\u043e\u043b\u044f .FGD \u043a\u043b\u0430\u0441\u0441\u0430$source_code =~ s{# \u041f\u0430\u0440\u0441 \u0442\u0438\u043f\u0430, \u0438\u043c\u0435\u043d\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u043f\u043e\u043b\u044f\\s* (?&lt;variable_type&gt;[\\w\\s*::&lt;&gt;]+?)\\s+    (?&lt;var_name&gt;\\w+)    (?:\\s* =\\s* (?&lt;default_value&gt;\\w+?))?;    (?:\\s* \/\/\\s* (?&lt;var_comment&gt;[^\\n]+))?}{    $+{var_name}($+{variable_type}): : $+{default_value} : \"$+{var_comment}\"}mgxs;# \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u0442\u0440\u043e\u043a$source_code =~ s{^\\s*# \u0421\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 #, \/\/, \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 ; \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c# \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438( \\#.+ | \/\/.*? | .*?; (\\s*\/\/.*)? | )\\R}{}mgx;# \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445$source_code =~ s\/\\((const )?int\\)\/(integer)\/g;$source_code =~ s\/\\((const )?char\\*\\)\/(string)\/g;# \u0417\u0430\u043f\u0438\u0441\u044c \u0444\u0430\u0439\u043b\u0430open (my $dest_file, '&gt;', $dest)    or die \"Could not create dest file: $!\\n\";<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u043a \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0441 Perl \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u0432 \u043b\u044e\u0431\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u043e\u043d\u043e \u0442\u043e\u0433\u043e?.. \ud83e\udd14<\/p>\n<h2>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 CPAN<\/h2>\n<p>\u0414\u043b\u044f Perl \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 (\u043f\u0440\u044f\u043c\u043e \u043a\u0430\u043a \u0438 \u0434\u043b\u044f Python), \u043d\u043e \u043f\u043e\u0436\u0430\u043b\u0443\u0439 \u0441\u0430\u043c\u044b\u043c\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438 \u0438\u0437 \u043d\u0438\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f Getopt::Long \u0438 Pod::Usage, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434. \u041c\u043d\u043e\u0433\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0438\u0434\u0443\u0442 \u0441\u0440\u0430\u0437\u0443 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 Perl (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0435, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b), \u0430 \u0442\u0435, \u0447\u0442\u043e \u0438 \u043d\u0435 \u0438\u0434\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/cpanmin.us\/\" rel=\"noopener noreferrer nofollow\">cpanm<\/a>, \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442\u0441\u044f \u0434\u043e <code>sudo cpanm MODULE<\/code>. \u041d\u0430 NixOS \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0438\u0448\u0443 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0448\u0435\u043b\u043b \u043a\u043e\u043d\u0444\u0438\u0433:<\/p>\n<details class=\"spoiler\">\n<summary>shell.nix<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>{ pkgs ? import &lt;nixpkgs&gt;{}}:let  perll = with pkgs; [    perl    perlnavigator  ];  # \u0410 \u0437\u0434\u0435\u0441\u044c \u0441\u0430\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u0438  perl_modules = with pkgs.perl5Packages; [  ];inpkgs.mkShell {  nativeBuildInputs = perll ++ perl_modules;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u041d\u0443 \u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u044f \u0432\u0430\u043c \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451, \u043e \u0447\u0451\u043c \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u0432 \u043e\u0434\u043d\u043e\u043c \u0435\u0434\u0438\u043d\u043e\u043c <a href=\"https:\/\/github.com\/infgotoinf\/auto-pinger\" rel=\"noopener noreferrer nofollow\">\u0441\u043a\u0440\u0438\u043f\u0442\u0435<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0435\u0440\u0451\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u043a\u0441\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0438\u043d\u0433\u0443\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0438\u0445 \u0441\u0430\u0439\u0442\u044b:<\/p>\n<pre><code class=\"perl\">#!\/usr\/bin\/env perluse v5.42;use utf8;binmode STDOUT, ':encoding(UTF-8)';binmode STDIN, ':encoding(UTF-8)';# \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u0438use Furl;use Getopt::Long;use Pod::Usage;# \u0417\u0430\u0434\u0430\u0451\u043c \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044fmy $help = 0;my $proxy_list ='https:\/\/cdn.jsdelivr.net\/gh\/proxifly\/free-proxy-list@main\/proxies\/all\/data.txt';my $timeout = 1;# \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044bGetOptions( 'help|?' =&gt; \\$help          , 'link-to-proxy|p=s' =&gt; \\$proxy_list          , 'timeout|t=i' =&gt; \\$timeout);pod2usage(1) if $help;pod2usage(2) unless $ARGV[0];# \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u0430\u0439\u0442 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u043a\u0441\u0438 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 @proxy_listmy $furl = Furl-&gt;new(timeout =&gt; 5);my @proxy_list = split( \/\\n\/, $furl-&gt;get($proxy_list)-&gt;content );# \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a c\u0430\u0439\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c# \u043f\u0438\u043d\u0433\u043e\u0432\u0430\u0442\u044cmy @link_list = @ARGV;my %proxy_hash;my $counter = @proxy_list;foreach my $proxy (@proxy_list){    say $counter--, '..'; # \u041e\u0442c\u0447\u0451\u0442 \u0442\u043e\u0433\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u043a\u0441\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c    foreach my $link (@link_list)    {        # \u0414\u0435\u043b\u0430\u0435\u043c curl \u0437\u0430\u043f\u0440\u043e\u0441        open my $fh, '-|',        \"curl -s -x GET -o \/dev\/null --write-out '\\%{exitcode} \\%{time_total}' --proxy $proxy -m $timeout $link\";        while (my $line = &lt;$fh&gt;)        {            # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0434\u0430\u043b\u0441\u044f \u0438 \u0435\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438            # \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0432 %proxy_hash            if ($line =~ \/^(?&lt;exit_code&gt;\\d+) (?&lt;time&gt;.+)\/            and $+{exit_code} == 0 &amp;&amp; $+{time} &lt; $timeout)            {                say \"$+{time} - $proxy\";                $proxy_hash{$proxy} .= $+{time};            }        }    }}# \u0421\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u043a\u0441\u0438 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u043cforeach (sort {$proxy_hash{$a} &lt;=&gt; $proxy_hash{$b}} keys %proxy_hash) {    say \"$proxy_hash{$_} - $_\";}# perlpod \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f__END__=head1 SYNOPSISmain.pl [options...] &lt;urls...&gt;=head1 OPTIONS=over 4=item B&lt;-h, --help&gt;Prints this message.=item B&lt;-p, --link-to-proxy&gt; &lt;url&gt;Link to a site from that to fetch proxy server links.Default is: https:\/\/cdn.jsdelivr.net\/gh\/proxifly\/free-proxy-list@main\/proxies\/all\/data.txt=item B&lt;-t, --timeout&gt; &lt;seconds&gt;Max time to wait for a responce before switching to next proxy.Default is: 1=back=cut<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>% .\/main.plUsage:    main.pl [options...] &lt;urls...&gt;% .\/main.pl -hUsage:    main.pl [options...] &lt;urls...&gt;Options:    -h, --help        Prints this message.    -p, --link-to-proxy &lt;url&gt;        Link to a site from that to fetch proxy server links.        Default is:        https:\/\/cdn.jsdelivr.net\/gh\/proxifly\/free-proxy-list@main\/proxies\/al        l\/data.txt    -t, --timeout &lt;seconds&gt;        Max time to wait for a responce before switching to next proxy.        Default is: 1% .\/main.pl -t 2 google.com3408..1.499812 - socks5:\/\/72.49.49.11:310343407..3406..1.611254 - socks5:\/\/69.61.200.104:361813405..3404..3403..3402..3401..3400..3399..^C<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h2>\u0420\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u0441 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b Perl, \u0442\u043e \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043a \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044e:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/perldoc.perl.org\/perlintro\" rel=\"noopener noreferrer nofollow\">perldoc\/perlintro<\/a> &#8212; \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 Perl \u0438 \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/perldoc.perl.org\/perl\" rel=\"noopener noreferrer nofollow\">perldoc\/perl<\/a> &#8212; \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0433\u043e Perl.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/perldoc.perl.org\/perlvar\" rel=\"noopener noreferrer nofollow\">perldoc\/perlvar<\/a> &#8212; $_, $., $!, $$ \u0438 \u0442\u0434.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/perldoc.perl.org\/perlr\" rel=\"noopener noreferrer nofollow\">perldoc\/perlre<\/a> &#8212; \u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430\u0445 \u0432 Perl.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.perltutorial.org\/\" rel=\"noopener noreferrer nofollow\">PerlTutorial<\/a> &#8212; \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/perlmaven.com\/perl-tutorial\" rel=\"noopener noreferrer nofollow\">pelmaven\/perl-tutuorial<\/a> &#8212; \u0431\u043b\u043e\u0433 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0435\u043c\u044b, \u0437\u043d\u0430\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f. <\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/metacpan.org\/\" rel=\"noopener noreferrer nofollow\">metacpan<\/a> &#8212; \u0441\u0430\u0439\u0442 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u0434\u043b\u044f Perl.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0443 \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0440\u0430\u0439\u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/www.oreilly.com\/library\/view\/learning-perl-8th\/9781492094944\/\" rel=\"noopener noreferrer nofollow\">Learning Perl 8th Edition<\/a>, \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043a\u043d\u0438\u0433\u0430 2021-\u043e\u0433\u043e \u0433\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u043a\u00a0\u0442\u043e\u043c\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u0430\u043a\u00a0\u0432\u044b \u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u0432\u044b\u0439\u0434\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u0434\u0430\u043d\u0438\u0435\u00a0\u2014 \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0435\u0433\u043e. \u0423\u0434\u0430\u0447\u0438!<\/p>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b<\/h2>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u044f\u0437\u044b\u043a\u0430 Perl, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0435\u0437\u0430\u043c\u0435\u043d\u0438\u043c\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c, \u0430 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043c\u044b\u043c (\u0437\u0430\u043c\u0435\u043d\u0438\u043c\u044b\u043c \u043d\u0430 Python). \u0423 \u044f\u0437\u044b\u043a\u0430 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043e\u043d \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u044b\u0447\u0435\u043d, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0438 \u043a\u0440\u0443\u0442, \u043d\u043e \u0435\u0441\u0442\u044c \u043b\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u043d\u043e\u0433\u043e \u0442\u043e\u043b\u043a\u0430 \u0432 \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438? \u041d\u0443 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u043e\u0433\u043e, \u044d\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u0445\u043e\u0440\u043e\u0448\u0438\u0439, \u043d\u043e \u0442\u043e\u043b\u043a \u0432 \u044d\u0442\u043e\u043c \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1025824\/\">https:\/\/habr.com\/ru\/articles\/1025824\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f Perl \u043e\u0431\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c: \u043e \u043d\u0451\u043c \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u0438 \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c Perl \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435, \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0442 \u0435\u0433\u043e \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0432\u0430\u043c \u043e \u043d\u0451\u043c \u043f\u043e\u0432\u0435\u0434\u0430\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0435\u0433\u043e \u0444\u0438\u0447\u0430\u0445 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u044f.Perl\u0427\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Perl?Perl\u00a0\u2014 \u044d\u0442\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a (\u043a\u0430\u043a Bash \u0438\u043b\u0438 Python), \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0435\u0449\u0451 \u0432 1987\u00a0\u0433\u043e\u0434\u0443 \u041b\u044d\u0440\u0438 \u0412\u043e\u043b\u043e\u043c. Perl\u00a0\u2014 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439. \u041f\u043e\u00a0\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0443 \u043a\u043e\u0434 \u043d\u0430\u00a0\u043d\u0451\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a\u00a0\u0447\u0442\u043e\u2011\u0442\u043e \u043c\u0435\u0436\u0434\u0443 Python, C, \u0438 \u0447\u0435\u043c\u2011\u0442\u043e \u0441\u0432\u043e\u0438\u043c, \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043e\u0434\u043d\u0438\u043c \u0438\u0437\u00a0\u0435\u0433\u043e \u0434\u0435\u0432\u0438\u0437\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f\u00a0\u2014 \u00ab\u0417\u0434\u0435\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c\u00bb, \u0447\u0442\u043e\u00a0\u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 \u044f\u0437\u044b\u043a\u0430.\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u201cHello, World!\u201d:my $var = &#171;World&#187;; # \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 $varprint (&#171;Hello, $var!\\n&#187;);       # \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 &#171;Hello, World!&#187;print &#171;Hello, $var!\\n&#187;;         # \u0411\u0435\u0437 \u0441\u043a\u043e\u0431\u043e\u0447\u0435\u043aprint &#171;Hello, &#171;, $var, &#171;!\\n&#187;;   # \u0412 \u0432\u0438\u0434\u0435 \u043b\u0438\u0441\u0442\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u044f\u0442\u043e\u0439print &#171;Hello, &#187; . $var . &#171;!\\n&#187;; # \u0412 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0443 \u0442\u043e\u0447\u043a\u0430\u043c\u0438printf &#171;Hello, %s!\\n&#187;, $var;    # printfsay &#171;Hello, $var!&#187;; # say &#8212; \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 print, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430 \u043a\u043e\u043d\u0446\u0435                    # \u0415\u0441\u0442\u044c \u0432 Perl 5.10 \u0438 \u043f\u043e\u0437\u0434\u043d\u0435\u0435\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u043e\u0442 10 \u0434\u043e 1:# \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u043b\u044f C for loopfor (my $i = 10; $i &gt; 0; &#8212;$i) {    say $i;}# foreach \u043f\u043e \u043f\u0435\u0440\u0435\u0432\u0451\u0440\u043d\u0443\u0442\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u043e\u0442 1 \u0434\u043e 10foreach my $i (reverse 1..10) {    say $i;}# \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043c\u0435\u0436\u0434\u0443 foreach \u0438 for \u043d\u0435\u0442for my $i (reverse 1..10) {    say $i;}# \u0417\u0430\u043f\u0438\u0441\u044c \u0438 \u0432\u044b\u0432\u043e\u0434 \u0438\u0437 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f $_for (reverse 1..10) {    # \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438    # for my $_ (reverse 1..10)    say $_;}# \u0412 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443say $_ for reverse 1..10;\u041a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439.\u0422\u0430\u043a \u043a\u0430\u043a Perl \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u043a\u0430\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f Unix, \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 Unix \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043e\u043d \u0441\u0442\u043e\u0438\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0441\u0442\u044c \u043b\u0438 \u043e\u043d \u0443 \u0432\u0430\u0441 whereis perl.\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0438 \u043d\u0435\u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043c\u043e\u0439 Windows \u043d\u0435 \u0432\u0441\u0451 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Bash, \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u0442\u0430\u043d\u0446\u044b \u0441 \u0431\u0443\u0431\u043d\u043e\u043c \u0434\u043b\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 Linux \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e c\u043a\u0430\u0447\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 Perl.Perl \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439: \u0447\u0438\u0442\u0430\u0442\u044c, \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c, \u0443\u0434\u0430\u043b\u044f\u0442\u044c, \u0444\u0430\u0439\u043b\u044b \u0438 \u043f\u0430\u043f\u043a\u0438, \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 cat \u0438\u043b\u0438 sort \u0432 Perl \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443:# cat \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u043b\u044e\u0431\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435.# \u0414\u0430\u0436\u0435 \u0442\u043e\u0447\u043a\u0430 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0431\u043b\u043e\u043a\u0430 \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u044c.print &lt;&gt; # \u0410\u043b\u043c\u0430\u0437\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &lt;&gt; &#8212; \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u0432\u043e\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430# \u042d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043b \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0444\u0430\u0439\u043b\u044b,# \u0442\u043e \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0432\u043e\u0434 \u0441 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430# \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0432\u0435\u0440\u043d\u0451\u0442 end-of-file \u043a\u043e\u0434 (\u0421trl-D) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0435print sort &lt;&gt; # \u0421\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0438\u0445 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c# \u0410\u043d\u0430\u043b\u043e\u0433 &#8216;nl -b a&#8217; \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u043c\u0435\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0438\u0445 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044cprintf &#171;%6d  $_&#187;, $. while &lt;&gt; # $. \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438\u0427\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0430\u043b\u043c\u0430\u0437\u043d\u043e\u043c\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0443 &lt;&gt; \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Perl \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:# \u0421\u0430\u0431\u0440\u0443\u0442\u0438\u043d\u0430 (\u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0447\u0442\u043e \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445) subrsub subr {    my $ret; # \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 $ret    # \u0415\u0441\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, @ARGV, \u043f\u0443\u0441\u0442\u043e\u0439, \u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c    # \u0432\u0432\u043e\u0434 \u0441 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 $ret    if (!@ARGV)    {        while (my $line = &lt;STDIN&gt;) {            $ret .= $line;        }    }    # \u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0442\u043e \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439    # \u0444\u0430\u0439\u043b \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0432 $ret    else    {        foreach my $ARG (@ARGV)        {            open my $fd, &#171;&lt;&#171;, $ARG;            while (my $line = &lt;$fd&gt;) {                $ret .= $line;            }        }    }    return $ret;}# \u0412\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438print &amp;subr\u0430\u041c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c main.pl \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u043a\u043e\u0434 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c:perl main.pl PATH_TO_FILE\u0412 Perl \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u044b \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e \u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 \u043d\u0435\u043f\u0440\u0435\u0432\u0437\u043e\u0439\u0434\u0451\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c (\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444) \u043c\u043e\u0436\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0436\u0438\u0437\u043d\u044c.# \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#171; \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0435\u0451 \u0432\u044b\u0432\u043e\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044fmy $ping = `ping google.com -w 2`;print $ping# -| \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0430open( my $ping, &#8216;-|&#8217;, &#8216;ping google.com -w 2&#8217; );# \u0411\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e \u0445\u043e\u0434\u0443 \u0435\u0451 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044fwhile my $line (&lt;$ping&gt;) {    print $line}\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e Perl \u043a\u0443\u0434\u0430 \u043f\u0440\u043e\u0449\u0435, \u043c\u043e\u0449\u043d\u0435\u0435 \u0438 \u0433\u0438\u0431\u0447\u0435 \u0447\u0435\u043c Bash, \u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0431\u043e\u043b\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0435\u0442 Bash, \u0434\u0430 \u0438 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043e. \u041d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Perl, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430 Bash, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438 \u043d\u0435\u0442, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Unix, \u043d\u043e \u0438 \u043d\u0430 Windows, \u0445\u043e\u0442\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0431\u044b \u0442\u0430\u043a\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u043e\u0448\u0451\u043b Python. \u0412\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0448\u0438\u0445 \u0446\u0435\u043b\u0435\u0439, \u0436\u0435\u043b\u0430\u043d\u0438\u0439 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c &#8212; \u044d\u0442\u043e \u043f\u043e\u0436\u0430\u043b\u0443\u0439 \u0441\u0430\u043c\u0430\u044f \u0441\u0438\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 Perl \u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u043a\u0442\u043e\u0440 \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u0432\u0448\u0438\u0439 \u0435\u0433\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438, \u043d\u0443 \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u0441\u0430\u043c \u043d\u0430\u0447\u0430\u043b \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0430\u0442\u044c. \u0418\u0437\u2011\u0437\u0430 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441\u00a0regexp \u0438 \u0442\u0435\u043c \u043a\u0430\u043a\u00a0\u0441\u0442\u0440\u0430\u0448\u043d\u043e \u0438 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u043e\u0434 \u043d\u0430\u00a0regexp \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c, \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u043e\u00a0Perl \u043e\u0442\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u00abwrite only language\u00bb, \u043d\u043e\u00a0\u044d\u0442\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043d\u0435\u00a0\u0442\u0430\u043a \u0438 \u0434\u0430\u0436\u0435 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0434\u043e\u043a\u0430\u0436\u0443 \u044d\u0442\u043e \u0432\u0430\u043c \u043d\u0430\u00a0\u0441\u0432\u043e\u0451\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435.\u0422\u0430\u043a \u0432\u043e\u0442, \u043a\u043e\u0433\u0434\u0430 \u044f \u0434\u0435\u043b\u0430\u043b 3D \u0438\u0433\u0440\u0443 \u0441 raylib, \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 3D \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043a\u0430\u0440\u0442 \u0438 \u044f \u043d\u0430\u0448\u0451\u043b TrenchBroom. \u0414\u043b\u044f \u044d\u043d\u0442\u0438\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 TrenchBroom \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 .FGD, \u0430 \u044d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u043e\u0447\u0435\u043d\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0439, \u043f\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0438 \u0441 \u043d\u0438\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0430\u043a\u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u0443 \u0438 \u043c\u043d\u0435 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0439\u0434\u0451\u0442\u0441\u044f \u044d\u0442\u0438\u0445 \u044d\u043d\u0442\u0438\u0442\u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0430 C\/C++, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043a \u044d\u0442\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0443 \u043f\u0440\u0438\u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f? \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f C\/C++ \u043a\u043e\u0434 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u0432\/\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0435\u0433\u043e \u0432 .FGD.\u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0443\u0436\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0444\u0430\u0439\u043b \u0442\u0430\u043a\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430:#ifndef EXAMPLE_H#define EXAMPLE_H\/\/ Example classstruct Example {    const char* name;    int hp; \/\/ Character&#8217;s health    void spawn();    \/\/ Substracts damage from hp    void takeDamage(int damage);};struct Example2 {    int ammount = 0; \/\/ Ammount of stuff    Example2();    \/\/ Returns true if ammount is even    bool isEven();};#endif \/\/EXAMPLE_H\u0412\u043e\u0442 \u0432 \u044d\u0442\u043e:@PointClass size(-16 -16 -32, 16 16 32) = Example : &#171;Example class&#187;[    name(string): :  : &#171;&#187;    hp(integer): :  : &#171;Character&#8217;s health&#187;]@PointClass size(-16 -16 -32, 16 16 32) = Example2 : &#171;&#187;[    ammount(integer): : 0 : &#171;Ammount of stuff&#187;]\u041d\u0443 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043a\u0430\u043a \u043e\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0435:\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0442\u0438\u043f\u0430 \/\/ COMMENT\\n struct NAME {&#8230;}; \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 .FGD \u043a\u043b\u0430\u0441\u0441\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u0430 @PointClass size(-16 -16 -32, 16 16 32) = NAME : &#171;COMMENT&#187; [&#8230;] \u043f\u0440\u0438 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b.\u041f\u043e\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0442\u0438\u043f\u0430 TYPE NAME = DEFINITION; \/\/ COMMENT \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u044f .FGD \u043a\u043b\u0430\u0441\u0441\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 NAME(TYPE): : DEFINITION : &#171;COMMENT&#187;, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b.\u0422\u0438\u043f\u044b int \u0438 const char* \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 integer \u0438 string.\u0412\u0441\u0435 \u043b\u0438\u0448\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u0430, \u043b\u0438\u0448\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438, \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0438 \u0438\u043d\u043a\u043b\u044e\u0434\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f.\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u043d\u0430 Perl \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \u0422\u0443\u0442 \u044f \u0443\u0442\u043e\u0447\u043d\u044e, \u0447\u0442\u043e \u043a\u0440\u043e\u043c\u0435 C\/C++ \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u043e \u0442\u043e\u043b\u043a\u043e\u043c \u0438 \u043d\u0435 \u0437\u043d\u0430\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u0435 \u043c\u043d\u043e\u0433\u043e. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0430 \u0442\u043e \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0447\u0440\u0435\u0437\u043c\u0435\u0440\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c, \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u043c \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u043c.regex.h \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 IP \u0430\u0434\u0440\u0435\u0441, \u043f\u0430\u0440\u043e\u043b\u044c, \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u0430\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0442\u043f., \u043d\u043e \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435, \u0442\u043e \u0442\u0443\u0442 \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0443\u0436\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0442\u044c, \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0439\u044e\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0435 write only \u0440\u0435\u0433\u0435\u043a\u0441\u043f\u044b. std::regex \u0443\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u0441 \u043d\u0438\u043c \u0432\u0441\u0451 \u0442\u0430 \u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.\u0415\u0441\u0442\u044c PCRE2 (Perl Compatable Regular Expressions), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 \u043a\u0443\u0447\u0435\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043c\u043d\u043e\u0433\u043e \u0448\u0443\u043c\u0430 \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0435\u0433\u043e \u0442\u0440\u0443\u0434\u043d\u0435\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c, \u0438 \u0434\u043b\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043a\u0438 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u044d\u0442\u043e \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0440.\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0438\u0437 \u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\/* Set PCRE2_CODE_UNIT_WIDTH to indicate we will use 8-bit input. *\/#define PCRE2_CODE_UNIT_WIDTH 8#include &lt;pcre2.h&gt;#include &lt;string.h&gt; \/* for strlen *\/#include &lt;stdio.h&gt;  \/* for printf *\/int main(int argc, char* argv[]) {    if (argc != 3) {        fprintf(stderr, &#171;Usage: %s &lt;pattern&gt; &lt;subject&gt;\\n&#187;, argv[0]);        return 1;    }    const char *pattern = argv[1];    const char *subject = argv[2];    \/* Compile the pattern. *\/    int error_number;    PCRE2_SIZE error_offset;    pcre2_code *re = pcre2_compile(        pattern,               \/* the pattern *\/        PCRE2_ZERO_TERMINATED, \/* indicates pattern is zero-terminated *\/        0,                     \/* default options *\/        &amp;error_number,         \/* for error number *\/        &amp;error_offset,         \/* for error offset *\/        NULL);                 \/* use default compile context *\/    if (re == NULL) {        fprintf(stderr, &#171;Invalid pattern: %s\\n&#187;, pattern);        return 1;    }    \/* Match the pattern against the subject text. *\/    pcre2_match_data *match_data =        pcre2_match_data_create_from_pattern(re, NULL);    int rc = pcre2_match(        re,                   \/* the compiled pattern *\/        subject,              \/* the subject text *\/        strlen(subject),      \/* the length of the subject *\/        0,                    \/* start at offset 0 in the subject *\/        0,                    \/* default options *\/        match_data,           \/* block for storing the result *\/        NULL);                \/* use default match context *\/    \/* Print the match result. *\/    if (rc == PCRE2_ERROR_NOMATCH) {        printf(&#171;No match\\n&#187;);    } else if (rc &lt; 0) {        fprintf(stderr, &#171;Matching error\\n&#187;);    } else {        PCRE2_SIZE *ovector = pcre2_get_ovector_pointer(match_data);        &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-476724","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/476724","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=476724"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/476724\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=476724"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=476724"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=476724"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}