(Det skall inte vara ett mellanslag mellan : och "DATA", men förumet gör om denna kombination till :DATA)
Så innehåller ju inte $var4 på andra raden bara "DATA" utan "DATA[radbrytning]". Denna kan du plocka bort genom att använda kommandot "chomp" (som tar bort sista logiska tecknet i en sträng ifall det är en radbrytning).
foreach (@rad) {
chomp;
# ...osv
(Sedan fattas det ett $ före "var4" på print-raden :) )
Ursäkta, jag missade att du jämförde med 'TEST' i koden och inte 'DATA'. Vet inte var jag fick DATA från :), men jaja.
Det du gör i koden är ju att kolla om $var4 är lika med "TEST". I så fall görs ingenting (eftersom det enda du gör ligger i else-satsen). Alltså, i alla fall där $var4 INTE är lika med "TEST" skriver du ut den inlästa raden förljt av " - " och de 4 variablerna du nyss skapat med split, separerade av komma (om vi bortser från att du missat $ för var4). Sist kommer en radbrytning. Alltså kommer allt att skrivas på en rad (för varje inläst text-rad som stämmer if-satsen). Vill du ha varje rad från text-filen bli 2 rader i output'en får du slänga in en radbrytning till. Så långt fungerar scriptet. Sedan får du tänka på att om du skickar detta till en webbläsare som kommer allt att visas på en och samma rad i alla fall eftersom webbläsaren läser html, där radbrytning är "<br>", men det ser du ju genom att "visa källa".
Jag behöver ett script som går igenom rad för rad i ett textdokument och om t.ex rade är hej så ska den gör nåt annars ska den t.ex bara skriva ut raden som den är.
Visst, du är helt på rätt väg. $_ är ju som bekant en underförstådd variabel i perl, men för att vi inte skall tappa bort den någonstanns i hanteringen (om du lägger till fler saker i loopen som påverkar $_) så byter vi ut den mot en vanlig variabel.
Men tänk på att perl hanterar radbrytningar som logiska tecken. D.v.s., kör du scriptet på ett windows-baserat system kommer [cr][lf] (alltså 2 tecken) att ses som ett logiskt tecken, nämligen "radbrytning". Chomp ex. kommer alltså egentligen att plocka bort 2 tecken. Detta för att det skall bli enklare att programmera och det är enklare att flytta scriptet mellan olika system. Problem kan dock uppstå om du kör scriptet på en Unix-burk och text-filen kommer från en windows-maskin. Enklast i så fall är att se till att filen sparas i *nix-format (med bara [lf] som radbrytning).
Ett tänkbart fel är att text.txt är genererad/redigerad på ett windows-system (och har radbrytningssekvensen [cr][lf]) och scriptet körs på någon unix-dialekt som används [lf]. Perl använder nämligen logiska radbrytningar, d.v.s. körs scriptet under windows syftar "\n" på "[cr][lf] medans om scriptet körs under unix blir det "[lf]" (och under mac "[cr]"). Kan det stämma? I lite mer fullfjädrade edtiorer kan du välja vilket format du vill spara, så även under windows kan du skapa en unix-lik text-fil.
... enda sättet jag kan få fram fenomenet i ActivePerl (kör build 633) är att tvinga min editor att spara text-filen i mac(!) format, alltså endast [cr] som radbrytning. Både [lf] och [cr][lf] funkar fina fisken.
Har du möjlighet att spara om text-filen i olika format (unix/windows), bara för att testa?