笔者认为,司马迁的《太史公书》著作于前年的太初二年至前90年的征和三年之间。史书明确记载,司马迁是以主持人的太史令身份与其他二十余人共同参与制定了中国历史上著名的《太初历》。而前年的汉武帝元封七年,就改元为“太初元年”。那么,由此可以推断,《太初历》应该制定于汉武帝元封年间。司马迁是何时出任的太史令呢?他又是何时继承父亲司马谈的遗志而著作《太史公书》的呢?
根据史载可知,司马迁出任太史令的五年以后,汉王朝改元“太初元年”,而太初元年是前年,同时,太初元年又被人称之为“元封七年”。所以,如此推论上去,可以知道,司马迁应该是在前年的汉武帝元封三年出任的太史令;司马迁出任太史令的三年前的前年的元封元年,司马谈就死亡了。综上所述可知,司马迁出任太史令时“细史记石室金鐨之书”,不应只是“细”的人文历史典籍,应主要是“轴”的天文历法史料,当然,他也可能查阅收集了不少“春秋”史书。
因为,在西汉时代,“史记”是泛指一切史书,并非专指《春秋》这类人文历史书籍。司马迁主持和参与制定“太初历”的元封年间,他不可能著作《太史公书》,所以,《太初历》公布运用之后的前年的太初二年以降,他才可能开始著作《太史公书》。因此,我们可以认定司马迁是在前年的汉武帝太初二年以降,他才正式收集整理父亲司马谈遗留史料和他自己收集到的史料而著作《太史公书》的。这也是《太史公书》为什么不记载汉武帝太初年以降之人事的缘故,也就是史载所说:“武帝时,司马迁著《史记》,自太初以后,阙而不录。”(《后汉书·班彪传》)
因为,太初二年以降,司马迁就专心致志地埋头著述《太史公书》了,他不可能再了解到当世的许多人事情况。而《太史公书》问世后,他又因该书触怒汉武帝而被拘禁,他就更不可能记录太初年以降的事情了。
关于司马迁生卒时间和他的阅历问题。笔者认为,司马迁生于前年左右,卒于前90年左右。司马迁享年60岁左右。现今,中国一些辞典对司马迁的生卒日期和阅历的记载,大都很模糊,或者有明显错误。一些辞典认定司马迁出生于前年或者前年一前年之间;或不知卒年,或将司马迁卒年确定在汉武帝死亡的前87年。这种认定,是否正确呢?下面,我们来推论此问题。
据《史记·太史公自序》和《汉书·司马迁传》都记载判断司马迁出生时间、地点和青年时代阅历的主要史料。其中,最重要的关于司马迁年龄与历史时空相对应的坐标参照文字,是司马迁自述自己“二十而南游......于是迁仕为郎中,奉使西征巴、蜀以南,略邛、莋、昆明”这段话。这就是说,只要今人搞清楚了司马迁究竟是在什么时候和什么年龄“奉使西征巴、蜀以南,略邛、莋、昆明”的,那么,今人就能够准确推论出司马迁的出生年了。
因为司马迁是年二十岁游历了长江中下游的吴楚地和黄河中下游的齐鲁地之后,他才出仕郎中西征巴蜀和邛、莋、昆明等地的,因此,我们可以推论出,司马迁“奉使西征巴、蜀以南,略邛、莋、昆明”时的岁数,应该至少在二十岁以上了。这里,我们暂且将司马迁“奉使西征巴、蜀以南,略邛、莋、昆明”的年龄确定在22岁左右。既然以上已经确定了司马迁参与西征的岁数,那么,要搞清楚司马迁究竟是在什么时间“奉使西征巴、蜀以南,略邛、莋、昆明”的,就必须事先搞清楚汉武帝时代究竟发生过几次“西征巴、蜀以南,略邛、莋、昆明”的重大历史事件!
史书明确记载汉武帝元光五年的“夏,发巴、蜀治南夷道。”(《汉书·武帝纪》)所以,今人应该确认,西汉王朝是在前年的元光五年正式拉开西征西南夷的行动的帷幕的。再因为司马迁是前年的元封三年出任太史令,司马迁出任太史令以后,他就再也不可能“奉使西征巴、蜀以南,略邛、莋、昆明”了。
由此可知,我们只要搞清楚了前年至前年这22年之间,西汉王朝一共有几次“西征巴、蜀以南,略邛、莋、昆明”,及其这几次西征的具体时间,那么,我们就可以依据判断出司马迁出使西征“巴、蜀、邛、莋、昆明”时的岁数了,并依据去推证出司马迁的准确出生年。
根据明确史载,前年一前年的22年,一共发生过三次大规模的西征西南夷军政行动。一次是前年的元光五年至前年的元朔三年的先由唐蒙主帅,后由司马相如主帅的西征西南夷;一次是前年的元鼎六年的越驰义侯率军西征西南夷;一次是前年的元封二年的将军郭昌、中郎将卫广发巴、蜀兵西征西南夷。司马迁当年是参与的以上所说的这三次西征西南夷的哪一次西征西南夷行动呢?这个问题,涉及到了对古今四川、云南、贵州的地理位置的知识。
之所以长期对司马迁的岁数问题含混不清,其实,主要就是因为今人大多对西汉王朝时代的西征西南夷的情况与中国西南地理情况不太了解所致!前年的汉武帝元光五年的首开西南夷的主帅是唐蒙,副帅是司马相如,而且,当时的西征西南夷,唐蒙和司马相如并非是西征一路,而是各自有自己的西征路线。通过以上这段史载,今人可知,前年的首次西征西南夷,郎中将军的唐蒙大军是从“巴苻关”进入夜郎国的,当年的“巴苻关”,大约是在今四川西南的泸州地区中的合江县与贵州的赤水市交界一带。
这条西征路线,与现今四川泸州通往贵州大方的国道邻近。这里需提及一句《史记》和《汉书》在此段史载中的“从巴苻关人”章句差异问题,其他版本均说“从巴蜀筰关人”或“从巴莋关人”,唯宋朝景祐本《史记》说“筰关”为“苻关”。后世学人大多认同景祐本《史记》此说,认为“”乃“苻”之误。这有可能是东汉时撰《汉书》的史家对西南地理不熟悉造成的笔误。
与唐蒙从今川南挺进今贵州始西征西南夷的同时,同样也为郎中将军的司马相如率领的西征大军则是从“邛、莋”这一今川西南地区挺进西南夷的,这条西征路线,与现今四川邛崃市通往雅安、汉源、越西、西昌直至昆明的国道线邻近。西汉时代的“邛、莋”,“邛”可能是指西汉王朝时代蜀郡的临邛县地区,即现今的四川邛崃市、蒲江县、名山县、荥经县一带,更有可能是指意现今四川西昌一带,因为,后来的西汉“邛都”就设立在今四川西昌一带,今四川西昌地区在历史上一直号称“邛”。
《史记·司马相如列传》文颖曰:“邛者,今为邛都县;笮者,今为定笮县:皆属越嶲郡。”由此可知,西汉王朝时代的“莋”,就是指现今四川的雅安市、汉源县、越西县一带。西汉时代的“邛”则是指现今四川越西至四川西昌一带的地区。由于西汉时代的“巴苻关”与“邛、莋”之间不仅相距甚远,之间还相隔着千山万水,不要说西汉时代,就是现今,这两个地区的交通也甚为遥远和艰险。
所以,我们可以确认,当年西汉王朝西征西南夷,唐蒙、司马相如各自率领的两支西征大军根本就不在一个地区和方向上。这个问题,今人只要一察看地图,就很清楚了。当年,唐蒙率领西征西南夷的巴蜀军民从现今的四川泸州一线挺进今贵州境内的夜郎国一带,他动用了严酷的军法诛杀参与西征的巴蜀军民和本地夜郎、僰中及其巴蜀后勤运输队伍中的首领人物,从而引发了这路西征大军的哗变。
汉武帝闻讯之后,立即派遣正在另一条西征路线上任统领的司马相如前去唐蒙西征所在地中谴责唐蒙的西征政策,且撤职了唐蒙。事后,汉武帝还让司马相如特意撰文“因谕告巴、蜀民以非上意”,这份“谕告”,就是司马相如的《喻巴蜀檄》,其文被收录在《史记·司马相如列传》中。
但是,很遗憾,今人通过《喻巴蜀檄》看不出其发表的时间。不过,根据“上闻之,乃遣相如责唐蒙等,因谕告巴、蜀民以非上意。”这段史载看,《喻巴蜀檄》和司马相如后来发表的《难巴蜀父老书》两文,都应该是在唐蒙被撤职和司马相如被汉武帝任命为西征西南夷主帅的“中郎将”以后。