0

I think there's a bug here. I have a string consisting of numbers separated by ':'. when I use split(), the number of list items is not a number, it returns "1289,2235,2300,2336". What's wrong here?

#!/opt/local/bin/perl

$data="10:2284:2345:2381:9:2235:2300:2336:8:2212:2273:2320:7:2194:2262:2295:6:2165:2232:2269:5:2118:2167:2205:4:2086:2142:2161:3:2039:2106:2138:2:2034:2088:2127:1:2028:2079:2109:01:1999:2046:2080:02:1972:2016:2052:03:1960:1987:2019:04:1915:1945:1971:05:1870:1888:1911:06:1798:1828:1855:07:1764:1789:1809:08:1692:1728:1753:09:1665:1688:1706:010:1636:1657:1679:011:1575:1607:1641:012:1549:1582:1620:013:1485:1539:1582:014:1395:1485:1540:015:1382:1456:1504:016:1368:1422:1465:017:1301:1360:1405:018:1267:1252:1283:019:1213:1252:1283:020::1159:1180:021::1112:1143:022::1087:1094::";

@l = split(':',$data);

print scalar @l ;
2
  • 3
    I have tried it and it returns 128. Looks like you print somethin else later in your code. And because you have no line break at end of your print statement it will be connected to the output of print scalar @l ; Commented Jan 20, 2015 at 8:27
  • Works for me as well. The stuff you print later appears in your original string after the 4th colon. Commented Jan 20, 2015 at 9:16

1 Answer 1

5

Your code works fine for me - I get 128 printed when I run it. I think the thing that will be tripping you up is that you don't print a line feed. E.g. \n or use say.

So your number is:1289,2235,2300,2336 which implies this bit of the code is printing 128 and elsewhere in your code is printing 9,2235,2300,2336.

If you can extract more of your code, and produce an MCVE - minimal complete verifiable example - the fine folk of StackOverflow can help you further. I suspect when you do this, your problem will disappear - whilst there are bugs in perl, it's quite a mature language and so the bugs really don't show up unless you're doing something particularly obscure.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.