The perjury charges are laid out with specificity, and amount to the difference between testifying that he knew for a fact (which he did, but didn't admit); and hearing it as a rumor, which is the jist of Libby's testimony - "All I heard was rumors from reporters."
But his answers were dependent on the timeframe in question. Of course at some point he knew for a fact that Plame worked for the CIA. We all knew that for a fact before Libby was ever indicted. In Libby's statement, during the timeframe in question, he had at that time only heard rumors from reporters, as opposed to having known about it already through his government clearance.