Pergunta

Existe uma maneira de extrair o título da página HTML usando Perl? Eu sei que pode ser passado como uma variável oculto durante envio de formulário e, em seguida, recuperados em Perl dessa forma, mas eu queria saber se existe uma maneira de fazer isso sem o enviar?

Como, digamos que eu tenho uma página HTML como esta:

<html><head><title>TEST</title></head></html>

e, em seguida, em Perl que eu quero fazer:

$q -> h1('something');

Como posso substituir 'algo' de forma dinâmica com o que está contido em tags ? </P> </div> </div> </div> <div id="boxRight" class="tab-content col-xl-6"> <div id="boxSoluzioneDescrizione" class="boxArticolo"> <div class="row"> <div class="col-md-6"> <div class="row justify-content-start"> <div class="col-md-12"> <form id="feedback" action="/pt/articolo/feedback" method="post"> <input type="hidden" name="_csrf" value="p4vnNkANm0jxhS2TkgtNmTvrJ0iaRVU3xciyeKMCmAPU5bhADUPCJ4KzV6P3cT3VWLkeMKwKN2Kz5f0pwjTOZA=="> <div class="hidden" style="display:none;"> <div class="form-group field-feedbackform-pagina required"> <input type="hidden" id="feedbackform-pagina" class="pagina" name="FeedbackForm[pagina]" value="/articolo/details"> <p class="help-block help-block-error"></p> </div> <div class="form-group field-feedbackform-idargomento"> <input type="hidden" id="feedbackform-idargomento" class="idArgomento" name="FeedbackForm[idArgomento]" value="214947"> <p class="help-block help-block-error"></p> </div> </div> <div> Foi útil? <div class="example-block text-center"> <label class="radio-inline" for="happy" style="font-size:1.5em;cursor:pointer;color:green;"> <i class="far fa-thumbs-up" title="This answer is useful"></i> <!-- fas per effetto mano piena --> <!--<img class="votoImg" src="https://img.icons8.com/color/100/000000/bored.png" width="84" height="84" loading="lazy" fetchpriority="high"> --> </label> <input type="radio" id="happy" class="voto input-hidden" name="FeedbackForm[voto]" value="10"> </div> <div class="example-block text-center"> <label class="radio-inline" for="sad" style="font-size:1.5em;cursor:pointer;color:red;"> <i class="far fa-thumbs-down" title="This answer is not useful"></i> <!-- fas per effetto mano piena --> <!--<img class="votoImg" src="https://img.icons8.com/color/100/000000/boring.png" width="84" height="84" loading="lazy" fetchpriority="high">--> </label> <input type="radio" id="sad" class="voto input-hidden" name="FeedbackForm[voto]" value="0"> </div> <!--<div class="col-auto example-block text-center"> <label class="radio-inline"> <input type="radio" name="voto" id="exicetd" class="input-hidden" /> <img class="votoImg" src="https://img.icons8.com/color/100/000000/smiling.png " width="84" height="84" loading="lazy" fetchpriority="high"> </label> </div>--> </div> <div class="row footer justify-content-between"> <div class="col"> <button type="button" class="btn btn-primary" data-dismiss="modal">Enviar</button> </div> </div> </form> </div> </div> </div> <div class="col-md-6"> </div> </div> <div class="row "> <div class="col-md-12"> <p class="title" style="background-color:green;"> <i class="far fa-thumbs-up"></i> Solução </p> <div class="testo"> <P> Gostaria de usar <a href="http://search.cpan.org/perldoc?pQuery" rel="noreferrer"> pQuery </a>. Ele funciona exatamente como jQuery. </P> <P> Você pode dizer: </p> <pre><code>use pQuery; my $page = pQuery("http://google.com/"); my $title = $page->find('title'); say "The title is: ", $title->html; </code></pre> <P> material substituição é semelhante: </p> <pre><code>$title->html('New Title'); say "The entirety of google.com with my new title is: ", $page->html; </code></pre> <P> Você pode passar uma string HTML para o construtor <code>pQuery</code>, que parece que você quer fazer. </P> <P> Finalmente, se você quiser usar arbitrário HTML como um "modelo", e depois "refinar" que, com comandos Perl, você quer usar <a href = "http://search.cpan.org/perldoc?Template :: Refine" rel = "noreferrer"> Molde :: Refine </a>. </p> </div> </div> </div> </div> </div> </div> <div class="row mt-4 adv"> <div class="col-12 text-center"> <ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-5108424997424987" data-ad-slot="1879801491"></ins> <script defer async crossorigin="anonymous"> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div class="row mt-4 adv"> <div class="col-12 text-center"> </div> </div> <div class="row mt-4"> <div class="col-12"> <div id="boxSoluzioniAvanzate" class="boxArticolo soluzioni"> <p class="title" style="background-color:black;"><i class="fas fa-file-alt"></i> Outras dicas</p> <div class="testo"> <div id="alt981546" class="boxBorderTop row noMargin pt-4"> <div class="col-md-12 text-left"> <i class="far fa-newspaper fa-2x mb-2" style="display:block;color:gray;"></i> </div> <div class="col-md-12"> <P> <a href="http://search.cpan.org/dist/HTML-Parser" rel="nofollow noreferrer"> HTML :: HeadParser </a> faz isso para você. </P> </div> </div> <div id="alt981547" class="boxBorderTop row noMargin pt-4"> <div class="col-md-12 text-left"> <i class="far fa-newspaper fa-2x mb-2" style="display:block;color:gray;"></i> </div> <div class="col-md-12"> <P> Não está claro para mim o que você está pedindo. Você parece estar falando de algo que poderia funcionar no navegador do usuário, ou pelo menos algo que já tenha uma página html carregado. </P> <P> Se Isso é <em> não </em> o caso, a resposta é <a href="http://search.cpan.org/perldoc/URI::Title" rel="nofollow noreferrer"> URI: :. Título </a> </p> </div> </div> <div id="alt981548" class="boxBorderTop row noMargin pt-4"> <div class="col-md-12 text-left"> <i class="far fa-newspaper fa-2x mb-2" style="display:block;color:gray;"></i> </div> <div class="col-md-12"> <pre><code>use strict; use LWP::Simple; my $url = 'http://www.google.com'|| die "Specify URL on the cmd line"; my $html = get ($url); $html =~ m{<TITLE>(.*?)</TITLE>}gism; print "$1\n"; </code></pre> </div> </div> <div id="alt981549" class="boxBorderTop row noMargin pt-4"> <div class="col-md-12 text-left"> <i class="far fa-newspaper fa-2x mb-2" style="display:block;color:gray;"></i> </div> <div class="col-md-12"> <P> A resposta anterior é errado, se o título de tag HTML é usado com mais freqüência, então isso pode ser facilmente superada pela verificação para certificar-se de que o título de tag é válido (sem marcas no meio). </P> <pre><code>my ($title) = $test_content =~ m/<title>([a-zA-Z\/][^>]+)<\/title>/si; </code></pre> </div> </div> <div id="alt981550" class="boxBorderTop row noMargin pt-4"> <div class="col-md-12 text-left"> <i class="far fa-newspaper fa-2x mb-2" style="display:block;color:gray;"></i> </div> <div class="col-md-12"> <H1> get a forma nome do título do arquivo. </H1> <pre><code> my $spool = 0; open my $fh, "<", $absPath or die $!; #open ($fh, "<$tempfile" ); # wrtie the opening brace print WFL "["; while (<$fh>) { # removes the new line from the line read chomp; # removes the leading and trailing spaces. $_=~ s/^\s+|\s+$//g; # case where the <title> and </title> occures in one line # we print and exit in one instant if (($_=~/$startstring/i)&&($_=~/$endstring/i)) { print WFL "'"; my ($title) = $_=~ m/$startstring(.+)$endstring/si; print WFL "$title"; print WFL "',"; last; } # case when the <title> is in one line and </title> is in other line #starting <title> string is found in the line elsif ($_=~/$startstring/i) { print WFL "'"; # extract everything after <title> but nothing before <title> my ($title) = $_=~ m/$startstring(.+)/si; print WFL "$title"; $spool = 1; } # ending string </title> is found elsif ($_=~/$endstring/i) { # read everything before </title> and nothing above that my ($title) = $_=~ m/(.+)$endstring/si; print WFL " "; print WFL "$title"; print WFL "',"; $spool = 0; last; } # this will useful in reading all line between <title> and </title> elsif ($spool == 1) { print WFL " "; print WFL "$_"; } } close $fh; # end of getting the title name </code></pre> </div> </div> <div id="alt981551" class="boxBorderTop row noMargin pt-4"> <div class="col-md-12 text-left"> <i class="far fa-newspaper fa-2x mb-2" style="display:block;color:gray;"></i> </div> <div class="col-md-12"> <P> Se você quiser apenas para extrair o título da página que você pode usar uma expressão regular. Eu acredito que seria algo como: </p> <pre><code>my ($title) = $html =~ m/<title>(.+)<\/title>/si; </code></pre> <P> onde sua página HTML é armazenado no <code>$html</code> string. Em <code>si</code>, o <code>s</code> significa para <em> modo de linha única </em> (ou seja, o ponto também coincide com uma nova linha) e <code>i</code> para <em> ignorar caso </em>. </P> </div> </div> </div> </div> </div> </div> <div class="row mt-4"> <div class="col-12"> <div class="attribution"> <div>Licenciado em: <a href="https://creativecommons.org/licenses/by-sa/3.0/" target="_blank">CC-BY-SA</a> com <a href="https://stackoverflow.blog/2009/06/25/attribution-required/" target="_blank">atribuição</a></div> <div>Não afiliado a <a href="https://stackoverflow.com/" target="_blank">StackOverflow</a></div> </div> </div> </div> <div id="share"></div> </div> <div class="row mb-4 adv"> <div class="col-md-12 text-center"> <!-- GeneraCodice - Footer pagina --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5108424997424987" data-ad-slot="5412049179" data-ad-format="auto" data-full-width-responsive="true"></ins> <script defer async crossorigin="anonymous"> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> </div> </div> <aside id="bannerRight" class="col-xs-12 col-md-4 col-lg-3 text-center" > <div class="container mt-4"> <div class="row mb-4 adv"> <div class="col-md-12"> <!-- GeneraCodice - Barra laterale --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5108424997424987" data-ad-slot="1592207755" data-ad-format="auto" data-full-width-responsive="true"></ins> <script defer async crossorigin="anonymous"> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div class="row adv"> <div class="col-md-12"> <!-- GeneraCodice - Barra laterale 2 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5108424997424987" data-ad-slot="8889943968" data-ad-format="auto" data-full-width-responsive="true"></ins> <script defer async crossorigin="anonymous"> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div class="row topArticoli justify-content-center"> <div class="col-md-12 col-lg-10 pt-4"> </div> </div> </div> </aside> </div> </section> <!-- DA INSERIRE COLLEGAMENTO A GENERANEWS E GRATISFORGRATIS.COM --> <footer class="site-footer"> <div class="section-free d-block d-md-flex"> <div class="section-newsletter col"> </div> <div class="col content-free-projects mb-2"> <div> <p class="my-3">Links Úteis</p> </div> <div class="d-flex justify-content-around"> <div></div> <div> <a class="nav-link" href="https://www.generacodice.com/pt/tag">Tag</a> <a class="nav-link" href="https://www.generacodice.com/pt/site/aboutus">Sobre nós</a> <a class="nav-link" href="https://www.generacodice.com/pt/site/contacts">Contatos</a> <a class="nav-link" href="https://www.generacodice.com/pt/site/privacy">Privacidade</a> </div> <div> <a class="nav-link social fb" href="https://www.facebook.com/generacodice" target="_blank"><i class="fab fa-facebook"></i> Facebook</a> <a class="nav-link social instagram" href="https://www.instagram.com/genera_codice" target="_blank"><i class="fab fa-instagram"></i> Instagram</a> </div> <div></div> </div> <div class="small-footer-link d-flex align-items-center justify-content-center"> <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top"> <input type="hidden" name="cmd" value="_s-xclick" /> <input type="hidden" name="hosted_button_id" value="42ZKUPRLM66J2" /> <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif" border="0" name="submit" title="PayPal - The safer, easier way to pay online!" alt="Donate with PayPal button" /> </form> </div> </div> </div> <div class="row m-0 justify-content-center text-center p-2"> <div class="col-md-5"> <p>O conteúdo é licenciado no Creative Commons.</p> <p class="mb-0">Se você encontrar violações de direitos autorais, poderá entrar em contato conosco em <a href="mailto:info@generacodice.com"> info@generacodice.com </a> para solicitar a remoção do conteúdo.</p> </div> </div> </footer> <div id="scroll-to-top" style="display: block;background:none;"> <img src="https://www.generacodice.com/img/icone/scroll-top.svg" alt="scroll top" style="width:48px;height:48px;background-color:#fff;" /> </div> <!-- Google Analytics --> <!-- Google tag (gtag.js) --> <script src="https://www.googletagmanager.com/gtag/js?id=G-PNYLV6VWJG" async crossorigin="anonymous"></script> <script crossorigin="anonymous" defer> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-PNYLV6VWJG'); </script> <!-- Visualizzare barra ricerca su google --> <script type="application/ld+json" crossorigin="anonymous"> { "@context": "https://schema.org", "@type": "WebSite", "url": "https://www.generacodice.com/", "potentialAction": { "@type": "SearchAction", "target": "https://www.generacodice.com/articolo?ricerca={search_term_string}", "query-input": "required name=search_term_string" } } </script> <!-- Yandex.Metrika counter <script type="text/javascript" defer crossorigin="anonymous"> (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(79291009, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/79291009" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> <script>var lingua = "https://www.generacodice.com/pt";</script> <script src="/lib/wow.min.js" preload></script> <script src="/lib/js.cookie.min.js" preload></script> <script src="https://cdn.jsdelivr.net/npm/cookie-bar/cookiebar-latest.min.js?customize=1&tracking=1&thirdparty=1&always=1&noGeoIp=1&showNoConsent=1&showPolicyLink=1&privacyPage=https%3A%2F%2Fwww.generacodice.com%2Fsite%2Fprivacy" preload></script> <script src="/js/form_ricerca.js" preload></script> <script src="https://kit.fontawesome.com/99a60a9345.js" preload></script> <script src="/js/ads.js" defer="defer" preload></script> <script src="/js/main.js?timestamp=20221207" defer="defer" preload></script> <script src="/assets/44258436/yii.js"></script> <script src="/assets/44258436/yii.validation.js"></script> <script src="/assets/44258436/yii.activeForm.js"></script> <script src="/js/feedback.js" defer></script> <script src="/js/articulate.min.js"></script> <script src="/js/playerTesto.js?202310021220"></script> <script src="/lib/jssocials/jssocials.min.js"></script> <script src="/js/sceditor/minified/sceditor.min.js"></script> <script src="/js/sceditor/minified/formats/xhtml.js"></script> <script src="/js/articolo/details.js?202309292139"></script> <script>jQuery(function ($) { jQuery('#feedback').yiiActiveForm([{"id":"feedbackform-pagina","name":"pagina","container":".field-feedbackform-pagina","input":"#feedbackform-pagina","error":".help-block.help-block-error","validate":function (attribute, value, messages, deferred, $form) {yii.validation.required(value, messages, {"message":"“Pagina” não pode ficar em branco."});}},{"id":"feedbackform-idargomento","name":"idArgomento","container":".field-feedbackform-idargomento","input":"#feedbackform-idargomento","error":".help-block.help-block-error","validate":function (attribute, value, messages, deferred, $form) {yii.validation.number(value, messages, {"pattern":/^[+-]?\d+$/,"message":"“Id Argomento” deve ser um número inteiro.","skipOnEmpty":1});}}], []); jQuery('#w0').yiiActiveForm([], []); });</script> <script> window.addEventListener('load', function() { var is_adsense_load = 0 window.addEventListener('scroll', function() { if (is_adsense_load == 0) { is_adsense_load = 1; var ele = document.createElement('script'); ele.async = true; ele.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js' var sc = document.getElementsByTagName('script')[0] sc.parentNode.insertBefore(ele, sc); (adsbygoogle = window.adsbygoogle || []).push({ google_ad_client: "ca-pub-5108424997424987", enable_page_level_ads: true }); } }) }) </script> </body> </html>