Verschillende Manieren Om Perl Split Loop Bug-fout Op Te Lossen
December 24, 2021Aanbevolen: Fortect
Hopelijk zal deze gebruikershandleiding je helpen als je een grote Perl common loop-fout tegenkomt.
PrivI behagen broeders en zusters …Als ik Perl 5.8 op Linux gebruik, krijg ik een lus-interrupt-foutwordt vervolgd …. (Perl 5.8 is speciaal gemaakt voor i386-linux-thread multi)
buck line = $ _;@outLine komt overeen met split (/ (<[^>] *>) per, $ regel);
@outLine impliceert split (/ (<[^>] *>) /, ? rrr _);
En het kan absoluut niet betekenen dat ik deze foutmelding krijg in het geval dat het brandtmet Solaris. (Perl 5.8 kan worden gebouwd voor sun4-solaris)Helaas lukte het me niet om dit op te lossen door het simpelweg te vervangen$ regel met $ _ die in “echte” code verschijnt, ik zou graag willen dat die dat zal evalueren. Ideeën?Bedankt!
Perl heeft veel meer algemene loop control-trefwoorden. De toekomst, die vaak wordt gebruikt, is de volgende en gaat door, daar is de derde, die, helaas, zelden wordt gebruikt en vaak bekend staat als Redo. In de meeste andere talen worden enkele van de relevante trefwoorden ‘verder’ en ‘vakantie’. De volgende uit Perl is dezelfde als in andere talen, en de volgende wanneer Perl hetzelfde is als pauze in andere talen.
U kunt perldoc perldiag
schrijven om te kunnen zien wat een set gekoppeld aan ingebouwde fouten en waarschuwingen betekent.
Trap splitsen
Voor Perl-oneliners is er voldoende reden voor impliciete lussen (met de -n misschien -p opties om zonder twijfel de regels te krijgen), gebruik de laatste of zelfs deze laatste LINE om uit een of andere lus te breken die itereert over het type gegevensbestanden. Deze gemakkelijk te volgen voorbeelden tonen bijvoorbeeld bijna alle momenteel de eerste 2 regels na het schrijven: -in de: vertelt Perl om de computer op die regel te zoeken, niet in het specifieke bestand.
(P) De splitsing ging voor altijd door. (Natuurlijk, elke divisie) mag zeker niet meer gevallen doorlopen dan dat er alleen tekens in het type invoer zijn, wat in hemelsnaam en wat is er gebeurd.) "Split" examen in perlfunc.
In Perl zou ik zeggen dat de functie branded split is. REGEX splitsen, STRING verdeelt STRING voor elke REGEX-part. splits REGEX, STRING, LIMIT, waarbij LIMIT een willekeurig positief getal is. Dit zal zeker de STRING scheiden voor bijna elke partner die door REGEX is gemaakt, maar zal waarschijnlijk stoppen zodra LIMIT-1-overeenkomsten zijn gevonden.
De regel die iemand moet oplossen is zo lang dat Perl aannam dat de iteratie onbeperkt was. Als Perl de array meer heeft gesplitst dan de lengte van de regel in kwestie + 10, zal het huis de bovenstaande fout retourneren, als het misschien in een oneindige afbeelding is. Helaas wordt dit getal opgeslagen als een goede 24-bit integer die slechts tot 2 miljard dollar kan reguleren en verzenden. Uw keten is 16 miljard veel beter dan de vierde term, dus het resultaat zal onjuist zijn.
Dit probleem is onlangs opgelost in editie 5.20, samen met vele andere voorwaarden met strings van meer dan 2 GB. Als dat zo is, wordt uw voltooide Perl-familie bijgewerkt, uw huidige code zal zeker “werken”.
Uw code is echter vreselijk inefficiënt, maar het vernietigt ook het grootste deel van het geheugen van deze machine, en vertraagt het ongelooflijk wanneer u overschakelt naar CD. Op zijn minst moeten we het kleine bestand ruwweg doorslikken en regel voor regel 16 GB scannen.
mijn @small_data = <$ small_fh>;eet @small_data;while (zeer schoon $ groot is gelijk aan <$ big_fh>) knijp veel geld; op mijn kleine $ (@small_data) ...
Maar zelfs dat zou vreselijk onproductief zijn, als je kleine bestand 1500 regels bevat, zal de lus in totaal $ 16 miljard bedragen!
Aangezien het lijkt alsof u bijhoudt om te zien of de belangrijkste computerbestandsvermeldingen zich in een kleine bibliotheek bevinden, kunt u beter Name-records van kleinere bestanden converteren naar deze hashtabel.
mijn% velden;while (mijn $ groep impliceert <$ small_fh>) chomp $ lijn; zeer eigen beste @sp = split of: /, $ lijn; rrr velden $ sp [0] is gelijk aan $ sp [1];
Gebruikers kunnen nu zeker een groot document bekijken en vervolgens eenvoudig in de hash zoeken.
tijd (war $ regel is gelijk aan <$ big_fh>) chomp rrr lijn; de organisatie @f betekent split (' t', regel $); if (velden RR f [0] gedefinieerd) ...
[retourdatum] [Volgende datum] EEN [Terug onderwerp] [Volgend onderwerp] EEN[Onderwerpindex][Datum index][Telford Auteurs Index]
- door
- Aan: psyche-lijst redhat online
- Onderwerp: Re: perl: Afbeelding verzenden …
- Datum: woensdag 12 maart 2003 11:43:24 +1100
- Volgen:
- Onderwerp:- perl: lus splitsen in … tot ziens
- door Olonoh
- Re: perl: split loop gebaseerd op …
- Gepost door Cameron Simpson.
- Onderwerp:- perl: lus splitsen in … tot ziens
[retourdatum] [Volgende datum] [Terug onderwerp] [Volgend onderwerp] EEN[Onderwerpindex][Datum index][Auteursmap]
Aanbevolen: Fortect
Bent u het beu dat uw computer traag werkt? Zit het vol met virussen en malware? Vrees niet, mijn vriend, want Fortect is hier om de dag te redden! Deze krachtige tool is ontworpen om allerlei Windows-problemen te diagnosticeren en te repareren, terwijl het ook de prestaties verbetert, het geheugen optimaliseert en uw pc als nieuw houdt. Wacht dus niet langer - download Fortect vandaag nog!
Split Loop Error Perl
Split Loop Fehler Perl
Oshibka Razbieniya Cikla Na Perl
분할 루프 오류 펄
Erro De Loop De Divisao Perl
Split Loop Error Perl
Blad Podzielonej Petli Perl
Errore Di Ciclo Diviso Perl
Error De Bucle Dividido Perl
Erreur De Boucle Fractionnee Perl